{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-13T23:55:11.566754Z","repo":{"ref":{"host":"github.com","owner":"kirarpit","name":"plexwrap"},"default_branch":"main","clone_url":"https://github.com/kirarpit/plexwrap.git","html_url":"https://github.com/kirarpit/plexwrap","description":"A personalized year-in-review for Plex","stars":26,"forks":2,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":3559,"primary_language":"Python","license_spdx":null,"created_at":"2025-12-26T21:37:42Z","pushed_at":"2026-01-16T03:24:13Z","security_policy_url":null,"distribution":{"owner_created_at":"2013-04-11T07:57:02Z","owner_type":"User","release_assets":[]}},"commit_sha":"2a751066a8aef2bd936e4a32597ee835f01aec29","profile":{"lines_by_language":{"TypeScript":3920,"Python":3700,"Shell":93},"files_by_category":{"source":41,"config":9,"other":7,"binary":6,"docs":3,"oversized":2,"generated":1,"test":1},"source_lines":7704,"test_lines":9},"pillars":{"ai_provenance":{"score":1.6,"confidence":0.76,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.0162,"suspected_share":0.0,"estimated_share":0.0162,"ai_artifacts":1.0,"flagged_work_units":0.0,"flagged_releases":null},"summary":"Explicit AI attribution on 2% of first-party code added; an estimated 2% including velocity signals."},"quality":{"score":53.3,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":36.9,"duplication":76.0,"lint":61.5,"testing":57.9,"docs":40.0,"type_safety":30.8,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.00, CI runs tests; 33% of function code in complex or long functions; 5% duplicated lines. Weakest area: type safety."},"security":{"score":58.2,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":93.0,"dependencies":0.1,"ci_actions":58.3,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 189 known vulnerabilities in 57 dependencies; 3 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":"ok","tool_version":null,"metrics":{"declared":27.0,"checked":27.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":24.0,"attributed_commits":2.0,"attributed_commit_share":0.08333333333333333,"effective_loc":8332.0,"attributed_loc":135.0,"attributed_loc_share":0.016202592414786367,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 2 attributed commits, 135 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: on merged branch (89cbb29f58)","ref":"55060dc21332b02848f3d99936051c8888d1966d","url":"https://github.com/kirarpit/plexwrap/commit/55060dc21332b02848f3d99936051c8888d1966d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author claude[bot]","ref":"ddfe48713472588a48bab5bb941b1b82ff5a4511","url":"https://github.com/kirarpit/plexwrap/commit/ddfe48713472588a48bab5bb941b1b82ff5a4511","weight":0.9}],"data":{"attributed_loc_by_commit":{"ddfe48713472588a48bab5bb941b1b82ff5a4511":134,"55060dc21332b02848f3d99936051c8888d1966d":1},"tools":{"claude-code":{"name":"Claude Code","commits":2,"loc":135,"first_seen":1767758614,"last_seen":1768526209}},"monthly":{"2025-12":{"loc":8170,"attributed_loc":0},"2026-01":{"loc":162,"attributed_loc":135}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":1.0,"tools_configured":1.0},"findings":[],"evidence":[{"kind":"ai-workflow","description":".github/workflows/claude.yml runs anthropics/claude-code-action","ref":".github/workflows/claude.yml","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/.github/workflows/claude.yml","weight":0.6}],"data":{"artifacts":[],"workflows":[{"tool":"claude-code","path":".github/workflows/claude.yml","action":"anthropics/claude-code-action"}],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":9.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":653.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":76.87687687687688,"median_loc_per_hour":37.163679633329416,"pr_timed_units":0.0,"excluded_import_loc":7679.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["a504a339e1478ce5c53375ae07486615d5ddd0de"]},"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":7704.0,"index":4.803,"count:narrated_steps":1.0,"per_kloc:narrated_steps":0.13,"files:narrated_steps":1.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":72.0,"per_kloc:emoji_in_code":9.346,"files:emoji_in_code":8.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: // First, get the image modification time for cache-busting","ref":"frontend/src/components/StoryCard.tsx:79","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/StoryCard.tsx#L79","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":2.0,"findings_high":0.0,"findings_medium":2.0,"findings_low":0.0,"weighted_findings":1.6,"scanned_lines":7704.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/javascript.browser.security.js-open-redirect","severity":"medium","message":"The application accepts potentially user-controlled input `$PROP` 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 befor [confidence high]","path":"frontend/src/App.tsx","line":210,"fingerprint":"javascript.browser.security.js-open-redirect:frontend/src/App.tsx:210"},{"rule_id":"opengrep/python.fastapi.security.wildcard-cors","severity":"medium","message":"CORS policy allows any origin (using wildcard '*'). This is insecure and should be avoided. [confidence medium]","path":"main.py","line":18,"fingerprint":"python.fastapi.security.wildcard-cors:main.py:18"}],"evidence":[],"data":{"rulesets":["typescript","javascript","python","bash","dockerfile"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":57.0,"vulnerabilities":189.0,"vulns_critical":4.0,"vulns_high":92.0,"vulns_medium":78.0,"vulns_low":15.0,"vulns_unknown":0.0,"penalty":395.0},"findings":[{"rule_id":"osv/GHSA-87r5-mp6g-5w5j","severity":"critical","message":"jsonpath@1.1.1 (npm) is affected by GHSA-87r5-mp6g-5w5j","path":"frontend/package-lock.json","line":null,"fingerprint":"jsonpath@1.1.1 (npm):GHSA-87r5-mp6g-5w5j"},{"rule_id":"osv/GHSA-jqcg-44mw-7w3h","severity":"critical","message":"proxy-addr@2.0.7 (npm) is affected by GHSA-jqcg-44mw-7w3h","path":"frontend/package-lock.json","line":null,"fingerprint":"proxy-addr@2.0.7 (npm):GHSA-jqcg-44mw-7w3h"},{"rule_id":"osv/GHSA-w7jw-789q-3m8p","severity":"critical","message":"shell-quote@1.8.3 (npm) is affected by GHSA-w7jw-789q-3m8p","path":"frontend/package-lock.json","line":null,"fingerprint":"shell-quote@1.8.3 (npm):GHSA-w7jw-789q-3m8p"},{"rule_id":"osv/GHSA-xv26-6w52-cph6","severity":"critical","message":"websocket-driver@0.7.4 (npm) is affected by GHSA-xv26-6w52-cph6","path":"frontend/package-lock.json","line":null,"fingerprint":"websocket-driver@0.7.4 (npm):GHSA-xv26-6w52-cph6"},{"rule_id":"osv/GHSA-fv7c-fp4j-7gwp","severity":"high","message":"@babel/plugin-transform-modules-systemjs@7.28.5 (npm) is affected by GHSA-fv7c-fp4j-7gwp","path":"frontend/package-lock.json","line":null,"fingerprint":"@babel/plugin-transform-modules-systemjs@7.28.5 (npm):GHSA-fv7c-fp4j-7gwp"},{"rule_id":"osv/GHSA-35jp-ww65-95wh","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-35jp-ww65-95wh","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-35jp-ww65-95wh"},{"rule_id":"osv/GHSA-3g43-6gmg-66jw","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-3g43-6gmg-66jw","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-3g43-6gmg-66jw"},{"rule_id":"osv/GHSA-3pq3-5fj3-cg6v","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-3pq3-5fj3-cg6v","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-3pq3-5fj3-cg6v"},{"rule_id":"osv/GHSA-43fc-jf86-j433","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-43fc-jf86-j433","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-43fc-jf86-j433"},{"rule_id":"osv/GHSA-542g-h47m-68v8","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-542g-h47m-68v8","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-542g-h47m-68v8"},{"rule_id":"osv/GHSA-62hf-57xw-28j9","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-62hf-57xw-28j9","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-62hf-57xw-28j9"},{"rule_id":"osv/GHSA-6chq-wfr3-2hj9","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-6chq-wfr3-2hj9","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-6chq-wfr3-2hj9"},{"rule_id":"osv/GHSA-777c-7fjr-54vf","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-777c-7fjr-54vf","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-777c-7fjr-54vf"},{"rule_id":"osv/GHSA-hfxv-24rg-xrqf","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-hfxv-24rg-xrqf","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-hfxv-24rg-xrqf"},{"rule_id":"osv/GHSA-j5f8-grm9-p9fc","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-j5f8-grm9-p9fc","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-j5f8-grm9-p9fc"},{"rule_id":"osv/GHSA-p92q-9vqr-4j8v","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-p92q-9vqr-4j8v","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-p92q-9vqr-4j8v"},{"rule_id":"osv/GHSA-pf86-5x62-jrwf","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-pf86-5x62-jrwf","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-pf86-5x62-jrwf"},{"rule_id":"osv/GHSA-pmwg-cvhr-8vh7","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-pmwg-cvhr-8vh7","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-pmwg-cvhr-8vh7"},{"rule_id":"osv/GHSA-q8qp-cvcw-x6jj","severity":"high","message":"axios@1.13.2 (npm) is affected by GHSA-q8qp-cvcw-x6jj","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-q8qp-cvcw-x6jj"},{"rule_id":"osv/GHSA-27r3-jxmh-p828","severity":"high","message":"body-parser@1.20.4 (npm) is affected by GHSA-27r3-jxmh-p828","path":"frontend/package-lock.json","line":null,"fingerprint":"body-parser@1.20.4 (npm):GHSA-27r3-jxmh-p828"},{"rule_id":"osv/GHSA-3jxr-9vmj-r5cp","severity":"high","message":"brace-expansion@1.1.12 (npm) is affected by GHSA-3jxr-9vmj-r5cp","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.12 (npm):GHSA-3jxr-9vmj-r5cp"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@1.1.12 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.12 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-mh99-v99m-4gvg","severity":"high","message":"brace-expansion@1.1.12 (npm) is affected by GHSA-mh99-v99m-4gvg","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.12 (npm):GHSA-mh99-v99m-4gvg"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@1.1.12 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.12 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-rgw5-rvv9-x895","severity":"high","message":"brace-expansion@1.1.12 (npm) is affected by GHSA-rgw5-rvv9-x895","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.12 (npm):GHSA-rgw5-rvv9-x895"},{"rule_id":"osv/GHSA-3jxr-9vmj-r5cp","severity":"high","message":"brace-expansion@2.0.2 (npm) is affected by GHSA-3jxr-9vmj-r5cp","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.2 (npm):GHSA-3jxr-9vmj-r5cp"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@2.0.2 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.2 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-mh99-v99m-4gvg","severity":"high","message":"brace-expansion@2.0.2 (npm) is affected by GHSA-mh99-v99m-4gvg","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.2 (npm):GHSA-mh99-v99m-4gvg"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@2.0.2 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.2 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-rgw5-rvv9-x895","severity":"high","message":"brace-expansion@2.0.2 (npm) is affected by GHSA-rgw5-rvv9-x895","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.2 (npm):GHSA-rgw5-rvv9-x895"},{"rule_id":"osv/GHSA-73wf-gq98-2v4g","severity":"high","message":"browserslist@4.28.1 (npm) is affected by GHSA-73wf-gq98-2v4g","path":"frontend/package-lock.json","line":null,"fingerprint":"browserslist@4.28.1 (npm):GHSA-73wf-gq98-2v4g"},{"rule_id":"osv/GHSA-c83g-rgw3-j3cx","severity":"high","message":"browserslist@4.28.1 (npm) is affected by GHSA-c83g-rgw3-j3cx","path":"frontend/package-lock.json","line":null,"fingerprint":"browserslist@4.28.1 (npm):GHSA-c83g-rgw3-j3cx"},{"rule_id":"osv/GHSA-vc2v-76pw-4v95","severity":"high","message":"compression@1.8.1 (npm) is affected by GHSA-vc2v-76pw-4v95","path":"frontend/package-lock.json","line":null,"fingerprint":"compression@1.8.1 (npm):GHSA-vc2v-76pw-4v95"},{"rule_id":"osv/GHSA-4c8g-83qw-93j6","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-4c8g-83qw-93j6","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-4c8g-83qw-93j6"},{"rule_id":"osv/GHSA-7p8r-x3mc-p8w7","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-7p8r-x3mc-p8w7","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-7p8r-x3mc-p8w7"},{"rule_id":"osv/GHSA-f65p-4m7j-42xc","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-f65p-4m7j-42xc","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-f65p-4m7j-42xc"},{"rule_id":"osv/GHSA-jqff-g426-hqxp","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-jqff-g426-hqxp","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-jqff-g426-hqxp"},{"rule_id":"osv/GHSA-q3j6-qgpj-74h6","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-q3j6-qgpj-74h6","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-q3j6-qgpj-74h6"},{"rule_id":"osv/GHSA-qw65-cvwx-89v3","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-qw65-cvwx-89v3","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-qw65-cvwx-89v3"},{"rule_id":"osv/GHSA-v2hh-gcrm-f6hx","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-v2hh-gcrm-f6hx","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-v2hh-gcrm-f6hx"},{"rule_id":"osv/GHSA-v39h-62p7-jpjc","severity":"high","message":"fast-uri@3.1.0 (npm) is affected by GHSA-v39h-62p7-jpjc","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-v39h-62p7-jpjc"},{"rule_id":"osv/GHSA-25h7-pfq9-p65f","severity":"high","message":"flatted@3.3.3 (npm) is affected by GHSA-25h7-pfq9-p65f","path":"frontend/package-lock.json","line":null,"fingerprint":"flatted@3.3.3 (npm):GHSA-25h7-pfq9-p65f"},{"rule_id":"osv/GHSA-rf6f-7fwh-wjgh","severity":"high","message":"flatted@3.3.3 (npm) is affected by GHSA-rf6f-7fwh-wjgh","path":"frontend/package-lock.json","line":null,"fingerprint":"flatted@3.3.3 (npm):GHSA-rf6f-7fwh-wjgh"},{"rule_id":"osv/GHSA-hmw2-7cc7-3qxx","severity":"high","message":"form-data@3.0.4 (npm) is affected by GHSA-hmw2-7cc7-3qxx","path":"frontend/package-lock.json","line":null,"fingerprint":"form-data@3.0.4 (npm):GHSA-hmw2-7cc7-3qxx"},{"rule_id":"osv/GHSA-hmw2-7cc7-3qxx","severity":"high","message":"form-data@4.0.5 (npm) is affected by GHSA-hmw2-7cc7-3qxx","path":"frontend/package-lock.json","line":null,"fingerprint":"form-data@4.0.5 (npm):GHSA-hmw2-7cc7-3qxx"},{"rule_id":"osv/GHSA-2883-xcg3-v3hh","severity":"high","message":"js-yaml@3.14.2 (npm) is affected by GHSA-2883-xcg3-v3hh","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@3.14.2 (npm):GHSA-2883-xcg3-v3hh"},{"rule_id":"osv/GHSA-52cp-r559-cp3m","severity":"high","message":"js-yaml@3.14.2 (npm) is affected by GHSA-52cp-r559-cp3m","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@3.14.2 (npm):GHSA-52cp-r559-cp3m"},{"rule_id":"osv/GHSA-5p4m-2wfm-xmqj","severity":"high","message":"js-yaml@3.14.2 (npm) is affected by GHSA-5p4m-2wfm-xmqj","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@3.14.2 (npm):GHSA-5p4m-2wfm-xmqj"},{"rule_id":"osv/GHSA-2883-xcg3-v3hh","severity":"high","message":"js-yaml@4.1.1 (npm) is affected by GHSA-2883-xcg3-v3hh","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@4.1.1 (npm):GHSA-2883-xcg3-v3hh"},{"rule_id":"osv/GHSA-52cp-r559-cp3m","severity":"high","message":"js-yaml@4.1.1 (npm) is affected by GHSA-52cp-r559-cp3m","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@4.1.1 (npm):GHSA-52cp-r559-cp3m"},{"rule_id":"osv/GHSA-5p4m-2wfm-xmqj","severity":"high","message":"js-yaml@4.1.1 (npm) is affected by GHSA-5p4m-2wfm-xmqj","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@4.1.1 (npm):GHSA-5p4m-2wfm-xmqj"},{"rule_id":"osv/GHSA-587h-7wmj-h5pm","severity":"high","message":"launch-editor@2.12.0 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"frontend/package-lock.json","line":null,"fingerprint":"launch-editor@2.12.0 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-r5fr-rjxr-66jc","severity":"high","message":"lodash@4.17.21 (npm) is affected by GHSA-r5fr-rjxr-66jc","path":"frontend/package-lock.json","line":null,"fingerprint":"lodash@4.17.21 (npm):GHSA-r5fr-rjxr-66jc"},{"rule_id":"osv/GHSA-23c5-xmqv-rm74","severity":"high","message":"minimatch@3.1.2 (npm) is affected by GHSA-23c5-xmqv-rm74","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@3.1.2 (npm):GHSA-23c5-xmqv-rm74"},{"rule_id":"osv/GHSA-3ppc-4f35-3m26","severity":"high","message":"minimatch@3.1.2 (npm) is affected by GHSA-3ppc-4f35-3m26","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@3.1.2 (npm):GHSA-3ppc-4f35-3m26"},{"rule_id":"osv/GHSA-7r86-cg39-jmmj","severity":"high","message":"minimatch@3.1.2 (npm) is affected by GHSA-7r86-cg39-jmmj","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@3.1.2 (npm):GHSA-7r86-cg39-jmmj"},{"rule_id":"osv/GHSA-23c5-xmqv-rm74","severity":"high","message":"minimatch@5.1.6 (npm) is affected by GHSA-23c5-xmqv-rm74","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@5.1.6 (npm):GHSA-23c5-xmqv-rm74"},{"rule_id":"osv/GHSA-3ppc-4f35-3m26","severity":"high","message":"minimatch@5.1.6 (npm) is affected by GHSA-3ppc-4f35-3m26","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@5.1.6 (npm):GHSA-3ppc-4f35-3m26"},{"rule_id":"osv/GHSA-7r86-cg39-jmmj","severity":"high","message":"minimatch@5.1.6 (npm) is affected by GHSA-7r86-cg39-jmmj","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@5.1.6 (npm):GHSA-7r86-cg39-jmmj"},{"rule_id":"osv/GHSA-28wg-ghj8-5hjv","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-28wg-ghj8-5hjv","path":"frontend/package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-28wg-ghj8-5hjv"},{"rule_id":"osv/GHSA-2v37-7h3g-55p8","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-2v37-7h3g-55p8","path":"frontend/package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-2v37-7h3g-55p8"},{"rule_id":"osv/GHSA-xwg4-73v4-xw9w","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-xwg4-73v4-xw9w","path":"frontend/package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-xwg4-73v4-xw9w"},{"rule_id":"osv/GHSA-2328-f5f3-gj25","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-2328-f5f3-gj25","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-2328-f5f3-gj25"},{"rule_id":"osv/GHSA-5m6q-g25r-mvwx","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-5m6q-g25r-mvwx","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-5m6q-g25r-mvwx"},{"rule_id":"osv/GHSA-5x38-2vff-x55p","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-5x38-2vff-x55p","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-5x38-2vff-x55p"},{"rule_id":"osv/GHSA-6qrw-m8cv-hcxf","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-6qrw-m8cv-hcxf","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-6qrw-m8cv-hcxf"},{"rule_id":"osv/GHSA-7wch-p9px-956x","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-7wch-p9px-956x","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-7wch-p9px-956x"},{"rule_id":"osv/GHSA-86w9-cpqp-85rv","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-86w9-cpqp-85rv, GHSA-ppp5-5v6c-4jwp","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-86w9-cpqp-85rv"},{"rule_id":"osv/GHSA-8hrf-8g6f-7xwp","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-8hrf-8g6f-7xwp","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-8hrf-8g6f-7xwp"},{"rule_id":"osv/GHSA-hqq3-7jhf-c5jx","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-hqq3-7jhf-c5jx","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-hqq3-7jhf-c5jx"},{"rule_id":"osv/GHSA-jc66-7q78-782g","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-jc66-7q78-782g","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-jc66-7q78-782g"},{"rule_id":"osv/GHSA-q67f-28xg-22rw","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-q67f-28xg-22rw","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-q67f-28xg-22rw"},{"rule_id":"osv/GHSA-rhr8-3pm8-cq29","severity":"high","message":"node-forge@1.3.3 (npm) is affected by GHSA-rhr8-3pm8-cq29","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-rhr8-3pm8-cq29"},{"rule_id":"osv/GHSA-rp65-9cf3-cjxr","severity":"high","message":"nth-check@1.0.2 (npm) is affected by GHSA-rp65-9cf3-cjxr","path":"frontend/package-lock.json","line":null,"fingerprint":"nth-check@1.0.2 (npm):GHSA-rp65-9cf3-cjxr"},{"rule_id":"osv/GHSA-37ch-88jc-xwx2","severity":"high","message":"path-to-regexp@0.1.12 (npm) is affected by GHSA-37ch-88jc-xwx2","path":"frontend/package-lock.json","line":null,"fingerprint":"path-to-regexp@0.1.12 (npm):GHSA-37ch-88jc-xwx2"},{"rule_id":"osv/GHSA-c2c7-rcm5-vvqj","severity":"high","message":"picomatch@2.3.1 (npm) is affected by GHSA-c2c7-rcm5-vvqj","path":"frontend/package-lock.json","line":null,"fingerprint":"picomatch@2.3.1 (npm):GHSA-c2c7-rcm5-vvqj"},{"rule_id":"osv/GHSA-c2c7-rcm5-vvqj","severity":"high","message":"picomatch@4.0.3 (npm) is affected by GHSA-c2c7-rcm5-vvqj","path":"frontend/package-lock.json","line":null,"fingerprint":"picomatch@4.0.3 (npm):GHSA-c2c7-rcm5-vvqj"},{"rule_id":"osv/GHSA-6g55-p6wh-862q","severity":"high","message":"postcss@7.0.39 (npm) is affected by GHSA-6g55-p6wh-862q","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@7.0.39 (npm):GHSA-6g55-p6wh-862q"},{"rule_id":"osv/GHSA-r28c-9q8g-f849","severity":"high","message":"postcss@7.0.39 (npm) is affected by GHSA-r28c-9q8g-f849","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@7.0.39 (npm):GHSA-r28c-9q8g-f849"},{"rule_id":"osv/GHSA-6g55-p6wh-862q","severity":"high","message":"postcss@8.5.6 (npm) is affected by GHSA-6g55-p6wh-862q","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-6g55-p6wh-862q"},{"rule_id":"osv/GHSA-r28c-9q8g-f849","severity":"high","message":"postcss@8.5.6 (npm) is affected by GHSA-r28c-9q8g-f849","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-r28c-9q8g-f849"},{"rule_id":"osv/GHSA-mw96-cpmx-2vgc","severity":"high","message":"rollup@2.79.2 (npm) is affected by GHSA-mw96-cpmx-2vgc","path":"frontend/package-lock.json","line":null,"fingerprint":"rollup@2.79.2 (npm):GHSA-mw96-cpmx-2vgc"},{"rule_id":"osv/GHSA-5c6j-r48x-rmvq","severity":"high","message":"serialize-javascript@4.0.0 (npm) is affected by GHSA-5c6j-r48x-rmvq","path":"frontend/package-lock.json","line":null,"fingerprint":"serialize-javascript@4.0.0 (npm):GHSA-5c6j-r48x-rmvq"},{"rule_id":"osv/GHSA-5c6j-r48x-rmvq","severity":"high","message":"serialize-javascript@6.0.2 (npm) is affected by GHSA-5c6j-r48x-rmvq","path":"frontend/package-lock.json","line":null,"fingerprint":"serialize-javascript@6.0.2 (npm):GHSA-5c6j-r48x-rmvq"},{"rule_id":"osv/GHSA-395f-4hp3-45gv","severity":"high","message":"shell-quote@1.8.3 (npm) is affected by GHSA-395f-4hp3-45gv","path":"frontend/package-lock.json","line":null,"fingerprint":"shell-quote@1.8.3 (npm):GHSA-395f-4hp3-45gv"},{"rule_id":"osv/GHSA-68fv-2mgg-jv7q","severity":"high","message":"source-map-js@1.2.1 (npm) is affected by GHSA-68fv-2mgg-jv7q","path":"frontend/package-lock.json","line":null,"fingerprint":"source-map-js@1.2.1 (npm):GHSA-68fv-2mgg-jv7q"},{"rule_id":"osv/GHSA-2p49-hgcm-8545","severity":"high","message":"svgo@1.3.2 (npm) is affected by GHSA-2p49-hgcm-8545","path":"frontend/package-lock.json","line":null,"fingerprint":"svgo@1.3.2 (npm):GHSA-2p49-hgcm-8545"},{"rule_id":"osv/GHSA-w27v-7q3p-w38r","severity":"high","message":"svgo@1.3.2 (npm) is affected by GHSA-w27v-7q3p-w38r","path":"frontend/package-lock.json","line":null,"fingerprint":"svgo@1.3.2 (npm):GHSA-w27v-7q3p-w38r"},{"rule_id":"osv/GHSA-2p49-hgcm-8545","severity":"high","message":"svgo@2.8.0 (npm) is affected by GHSA-2p49-hgcm-8545","path":"frontend/package-lock.json","line":null,"fingerprint":"svgo@2.8.0 (npm):GHSA-2p49-hgcm-8545"},{"rule_id":"osv/GHSA-w27v-7q3p-w38r","severity":"high","message":"svgo@2.8.0 (npm) is affected by GHSA-w27v-7q3p-w38r","path":"frontend/package-lock.json","line":null,"fingerprint":"svgo@2.8.0 (npm):GHSA-w27v-7q3p-w38r"},{"rule_id":"osv/GHSA-xpqw-6gx7-v673","severity":"high","message":"svgo@2.8.0 (npm) is affected by GHSA-xpqw-6gx7-v673","path":"frontend/package-lock.json","line":null,"fingerprint":"svgo@2.8.0 (npm):GHSA-xpqw-6gx7-v673"},{"rule_id":"osv/GHSA-qpx9-hpmf-5gmw","severity":"high","message":"underscore@1.12.1 (npm) is affected by GHSA-qpx9-hpmf-5gmw","path":"frontend/package-lock.json","line":null,"fingerprint":"underscore@1.12.1 (npm):GHSA-qpx9-hpmf-5gmw"},{"rule_id":"osv/GHSA-w5hq-g745-h8pq","severity":"high","message":"uuid@8.3.2 (npm) is affected by GHSA-w5hq-g745-h8pq","path":"frontend/package-lock.json","line":null,"fingerprint":"uuid@8.3.2 (npm):GHSA-w5hq-g745-h8pq"},{"rule_id":"osv/GHSA-g84c-rxfj-3j2c","severity":"high","message":"webpack-dev-middleware@5.3.4 (npm) is affected by GHSA-g84c-rxfj-3j2c","path":"frontend/package-lock.json","line":null,"fingerprint":"webpack-dev-middleware@5.3.4 (npm):GHSA-g84c-rxfj-3j2c"},{"rule_id":"osv/GHSA-96hv-2xvq-fx4p","severity":"high","message":"ws@7.5.10 (npm) is affected by GHSA-96hv-2xvq-fx4p","path":"frontend/package-lock.json","line":null,"fingerprint":"ws@7.5.10 (npm):GHSA-96hv-2xvq-fx4p"},{"rule_id":"osv/GHSA-96hv-2xvq-fx4p","severity":"high","message":"ws@8.18.3 (npm) is affected by GHSA-96hv-2xvq-fx4p","path":"frontend/package-lock.json","line":null,"fingerprint":"ws@8.18.3 (npm):GHSA-96hv-2xvq-fx4p"},{"rule_id":"osv/GHSA-2g4f-4pwh-qvx6","severity":"medium","message":"ajv@6.12.6 (npm) is affected by GHSA-2g4f-4pwh-qvx6","path":"frontend/package-lock.json","line":null,"fingerprint":"ajv@6.12.6 (npm):GHSA-2g4f-4pwh-qvx6"},{"rule_id":"osv/GHSA-2g4f-4pwh-qvx6","severity":"medium","message":"ajv@8.17.1 (npm) is affected by GHSA-2g4f-4pwh-qvx6","path":"frontend/package-lock.json","line":null,"fingerprint":"ajv@8.17.1 (npm):GHSA-2g4f-4pwh-qvx6"},{"rule_id":"osv/GHSA-3p68-rc4w-qgx5","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-3p68-rc4w-qgx5","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-3p68-rc4w-qgx5"},{"rule_id":"osv/GHSA-3w6x-2g7m-8v23","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-3w6x-2g7m-8v23","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-3w6x-2g7m-8v23"},{"rule_id":"osv/GHSA-42h9-826w-cgv3","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-42h9-826w-cgv3","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-42h9-826w-cgv3"},{"rule_id":"osv/GHSA-445q-vr5w-6q77","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-445q-vr5w-6q77","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-445q-vr5w-6q77"},{"rule_id":"osv/GHSA-4hqw-qxg8-jxx2","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-4hqw-qxg8-jxx2","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-4hqw-qxg8-jxx2"},{"rule_id":"osv/GHSA-5c9x-8gcm-mpgx","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-5c9x-8gcm-mpgx","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-5c9x-8gcm-mpgx"},{"rule_id":"osv/GHSA-7q8q-rj6j-mhjq","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-7q8q-rj6j-mhjq","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-7q8q-rj6j-mhjq"},{"rule_id":"osv/GHSA-898c-q2cr-xwhg","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-898c-q2cr-xwhg","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-898c-q2cr-xwhg"},{"rule_id":"osv/GHSA-9fr6-4gfg-395g","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-9fr6-4gfg-395g","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-9fr6-4gfg-395g"},{"rule_id":"osv/GHSA-fvcv-3m26-pcqx","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-fvcv-3m26-pcqx","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-fvcv-3m26-pcqx"},{"rule_id":"osv/GHSA-j8rh-479h-cp32","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-j8rh-479h-cp32","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-j8rh-479h-cp32"},{"rule_id":"osv/GHSA-jqh4-m9w3-8hp9","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-jqh4-m9w3-8hp9","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-jqh4-m9w3-8hp9"},{"rule_id":"osv/GHSA-m7pr-hjqh-92cm","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-m7pr-hjqh-92cm","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-m7pr-hjqh-92cm"},{"rule_id":"osv/GHSA-mmx7-hfxf-jppx","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-mmx7-hfxf-jppx","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-mmx7-hfxf-jppx"},{"rule_id":"osv/GHSA-mwf2-3pr3-8698","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-mwf2-3pr3-8698","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-mwf2-3pr3-8698"},{"rule_id":"osv/GHSA-pmv8-rq9r-6j72","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-pmv8-rq9r-6j72","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-pmv8-rq9r-6j72"},{"rule_id":"osv/GHSA-vf2m-468p-8v99","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-vf2m-468p-8v99","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-vf2m-468p-8v99"},{"rule_id":"osv/GHSA-vh66-26gq-q6x8","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-vh66-26gq-q6x8","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-vh66-26gq-q6x8"},{"rule_id":"osv/GHSA-w9j2-pvgh-6h63","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-w9j2-pvgh-6h63","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-w9j2-pvgh-6h63"},{"rule_id":"osv/GHSA-xx6v-rp6x-q39c","severity":"medium","message":"axios@1.13.2 (npm) is affected by GHSA-xx6v-rp6x-q39c","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-xx6v-rp6x-q39c"},{"rule_id":"osv/GHSA-w5vr-8v7q-w6rv","severity":"medium","message":"baseline-browser-mapping@2.9.11 (npm) is affected by GHSA-w5vr-8v7q-w6rv","path":"frontend/package-lock.json","line":null,"fingerprint":"baseline-browser-mapping@2.9.11 (npm):GHSA-w5vr-8v7q-w6rv"},{"rule_id":"osv/GHSA-f886-m6hf-6m8v","severity":"medium","message":"brace-expansion@1.1.12 (npm) is affected by GHSA-f886-m6hf-6m8v","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.12 (npm):GHSA-f886-m6hf-6m8v"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@1.1.12 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.12 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-f886-m6hf-6m8v","severity":"medium","message":"brace-expansion@2.0.2 (npm) is affected by GHSA-f886-m6hf-6m8v","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.2 (npm):GHSA-f886-m6hf-6m8v"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@2.0.2 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.2 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-2wm5-q62r-hmrv","severity":"medium","message":"colord@2.9.3 (npm) is affected by GHSA-2wm5-q62r-hmrv","path":"frontend/package-lock.json","line":null,"fingerprint":"colord@2.9.3 (npm):GHSA-2wm5-q62r-hmrv"},{"rule_id":"osv/GHSA-gcqx-w48m-w2h4","severity":"medium","message":"deepmerge@4.3.1 (npm) is affected by GHSA-gcqx-w48m-w2h4","path":"frontend/package-lock.json","line":null,"fingerprint":"deepmerge@4.3.1 (npm):GHSA-gcqx-w48m-w2h4"},{"rule_id":"osv/GHSA-hrr3-gc8f-f4qj","severity":"medium","message":"fast-uri@3.1.0 (npm) is affected by GHSA-hrr3-gc8f-f4qj","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-hrr3-gc8f-f4qj"},{"rule_id":"osv/GHSA-w74x-v6f9-j3xg","severity":"medium","message":"fast-uri@3.1.0 (npm) is affected by GHSA-w74x-v6f9-j3xg","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-w74x-v6f9-j3xg"},{"rule_id":"osv/GHSA-r4q5-vmmm-2653","severity":"medium","message":"follow-redirects@1.15.11 (npm) is affected by GHSA-r4q5-vmmm-2653","path":"frontend/package-lock.json","line":null,"fingerprint":"follow-redirects@1.15.11 (npm):GHSA-r4q5-vmmm-2653"},{"rule_id":"osv/GHSA-64mm-vxmg-q3vj","severity":"medium","message":"http-proxy-middleware@2.0.9 (npm) is affected by GHSA-64mm-vxmg-q3vj","path":"frontend/package-lock.json","line":null,"fingerprint":"http-proxy-middleware@2.0.9 (npm):GHSA-64mm-vxmg-q3vj"},{"rule_id":"osv/GHSA-h67p-54hq-rp68","severity":"medium","message":"js-yaml@3.14.2 (npm) is affected by GHSA-h67p-54hq-rp68","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@3.14.2 (npm):GHSA-h67p-54hq-rp68"},{"rule_id":"osv/GHSA-h67p-54hq-rp68","severity":"medium","message":"js-yaml@4.1.1 (npm) is affected by GHSA-h67p-54hq-rp68","path":"frontend/package-lock.json","line":null,"fingerprint":"js-yaml@4.1.1 (npm):GHSA-h67p-54hq-rp68"},{"rule_id":"osv/GHSA-6c59-mwgh-r2x6","severity":"medium","message":"jsonpath@1.1.1 (npm) is affected by GHSA-6c59-mwgh-r2x6","path":"frontend/package-lock.json","line":null,"fingerprint":"jsonpath@1.1.1 (npm):GHSA-6c59-mwgh-r2x6"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"launch-editor@2.12.0 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"frontend/package-lock.json","line":null,"fingerprint":"launch-editor@2.12.0 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"launch-editor@2.12.0 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"frontend/package-lock.json","line":null,"fingerprint":"launch-editor@2.12.0 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-v6wh-96g9-6wx3","severity":"medium","message":"launch-editor@2.12.0 (npm) is affected by GHSA-v6wh-96g9-6wx3","path":"frontend/package-lock.json","line":null,"fingerprint":"launch-editor@2.12.0 (npm):GHSA-v6wh-96g9-6wx3"},{"rule_id":"osv/GHSA-xxjr-mmjv-4gpg","severity":"medium","message":"lodash@4.17.21 (npm) is affected by GHSA-xxjr-mmjv-4gpg","path":"frontend/package-lock.json","line":null,"fingerprint":"lodash@4.17.21 (npm):GHSA-xxjr-mmjv-4gpg"},{"rule_id":"osv/GHSA-525v-9gp9-w22h","severity":"medium","message":"node-forge@1.3.3 (npm) is affected by GHSA-525v-9gp9-w22h","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-525v-9gp9-w22h"},{"rule_id":"osv/GHSA-5cwg-6vw7-rj6p","severity":"medium","message":"node-forge@1.3.3 (npm) is affected by GHSA-5cwg-6vw7-rj6p","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-5cwg-6vw7-rj6p"},{"rule_id":"osv/GHSA-6cv4-p8m7-4r25","severity":"medium","message":"node-forge@1.3.3 (npm) is affected by GHSA-6cv4-p8m7-4r25","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-6cv4-p8m7-4r25"},{"rule_id":"osv/GHSA-6wvx-3r32-xmcg","severity":"medium","message":"node-forge@1.3.3 (npm) is affected by GHSA-6wvx-3r32-xmcg","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-6wvx-3r32-xmcg"},{"rule_id":"osv/GHSA-h46v-rmh6-fq4f","severity":"medium","message":"node-forge@1.3.3 (npm) is affected by GHSA-h46v-rmh6-fq4f","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-h46v-rmh6-fq4f"},{"rule_id":"osv/GHSA-j8rw-jp99-435v","severity":"medium","message":"node-forge@1.3.3 (npm) is affected by GHSA-j8rw-jp99-435v","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-j8rw-jp99-435v"},{"rule_id":"osv/GHSA-w4xr-hqv8-ch44","severity":"medium","message":"node-forge@1.3.3 (npm) is affected by GHSA-w4xr-hqv8-ch44","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-w4xr-hqv8-ch44"},{"rule_id":"osv/GHSA-3v7f-55p6-f55p","severity":"medium","message":"picomatch@2.3.1 (npm) is affected by GHSA-3v7f-55p6-f55p","path":"frontend/package-lock.json","line":null,"fingerprint":"picomatch@2.3.1 (npm):GHSA-3v7f-55p6-f55p"},{"rule_id":"osv/GHSA-3v7f-55p6-f55p","severity":"medium","message":"picomatch@4.0.3 (npm) is affected by GHSA-3v7f-55p6-f55p","path":"frontend/package-lock.json","line":null,"fingerprint":"picomatch@4.0.3 (npm):GHSA-3v7f-55p6-f55p"},{"rule_id":"osv/GHSA-7fh5-64p2-3v2j","severity":"medium","message":"postcss@7.0.39 (npm) is affected by GHSA-7fh5-64p2-3v2j","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@7.0.39 (npm):GHSA-7fh5-64p2-3v2j"},{"rule_id":"osv/GHSA-fxqj-rqcc-2cmp","severity":"medium","message":"postcss@7.0.39 (npm) is affected by GHSA-fxqj-rqcc-2cmp","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@7.0.39 (npm):GHSA-fxqj-rqcc-2cmp"},{"rule_id":"osv/GHSA-qx2v-qp2m-jg93","severity":"medium","message":"postcss@7.0.39 (npm) is affected by GHSA-qx2v-qp2m-jg93","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@7.0.39 (npm):GHSA-qx2v-qp2m-jg93"},{"rule_id":"osv/GHSA-fxqj-rqcc-2cmp","severity":"medium","message":"postcss@8.5.6 (npm) is affected by GHSA-fxqj-rqcc-2cmp","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-fxqj-rqcc-2cmp"},{"rule_id":"osv/GHSA-qx2v-qp2m-jg93","severity":"medium","message":"postcss@8.5.6 (npm) is affected by GHSA-qx2v-qp2m-jg93","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-qx2v-qp2m-jg93"},{"rule_id":"osv/GHSA-rj75-hqrm-r3gf","severity":"medium","message":"postcss-selector-parser@6.1.2 (npm) is affected by GHSA-rj75-hqrm-r3gf","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss-selector-parser@6.1.2 (npm):GHSA-rj75-hqrm-r3gf"},{"rule_id":"osv/GHSA-w9m9-85wc-3x92","severity":"medium","message":"postcss-selector-parser@6.1.2 (npm) is affected by GHSA-w9m9-85wc-3x92","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss-selector-parser@6.1.2 (npm):GHSA-w9m9-85wc-3x92"},{"rule_id":"osv/GHSA-rj75-hqrm-r3gf","severity":"medium","message":"postcss-selector-parser@7.1.1 (npm) is affected by GHSA-rj75-hqrm-r3gf","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss-selector-parser@7.1.1 (npm):GHSA-rj75-hqrm-r3gf"},{"rule_id":"osv/GHSA-w9m9-85wc-3x92","severity":"medium","message":"postcss-selector-parser@7.1.1 (npm) is affected by GHSA-w9m9-85wc-3x92","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss-selector-parser@7.1.1 (npm):GHSA-w9m9-85wc-3x92"},{"rule_id":"osv/GHSA-4mjr-xmp4-gh2g","severity":"medium","message":"qs@6.14.0 (npm) is affected by GHSA-4mjr-xmp4-gh2g","path":"frontend/package-lock.json","line":null,"fingerprint":"qs@6.14.0 (npm):GHSA-4mjr-xmp4-gh2g"},{"rule_id":"osv/GHSA-6pq8-jhm2-2vcw","severity":"medium","message":"qs@6.14.0 (npm) is affected by GHSA-6pq8-jhm2-2vcw","path":"frontend/package-lock.json","line":null,"fingerprint":"qs@6.14.0 (npm):GHSA-6pq8-jhm2-2vcw"},{"rule_id":"osv/GHSA-6rw7-vpxm-498p","severity":"medium","message":"qs@6.14.0 (npm) is affected by GHSA-6rw7-vpxm-498p","path":"frontend/package-lock.json","line":null,"fingerprint":"qs@6.14.0 (npm):GHSA-6rw7-vpxm-498p"},{"rule_id":"osv/GHSA-q8mj-m7cp-5q26","severity":"medium","message":"qs@6.14.0 (npm) is affected by GHSA-q8mj-m7cp-5q26","path":"frontend/package-lock.json","line":null,"fingerprint":"qs@6.14.0 (npm):GHSA-q8mj-m7cp-5q26"},{"rule_id":"osv/GHSA-qj8w-gfj5-8c6v","severity":"medium","message":"serialize-javascript@6.0.2 (npm) is affected by GHSA-qj8w-gfj5-8c6v","path":"frontend/package-lock.json","line":null,"fingerprint":"serialize-javascript@6.0.2 (npm):GHSA-qj8w-gfj5-8c6v"},{"rule_id":"osv/GHSA-4vpr-x523-8j87","severity":"medium","message":"svgo@1.3.2 (npm) is affected by GHSA-4vpr-x523-8j87","path":"frontend/package-lock.json","line":null,"fingerprint":"svgo@1.3.2 (npm):GHSA-4vpr-x523-8j87"},{"rule_id":"osv/GHSA-4vpr-x523-8j87","severity":"medium","message":"svgo@2.8.0 (npm) is affected by GHSA-4vpr-x523-8j87","path":"frontend/package-lock.json","line":null,"fingerprint":"svgo@2.8.0 (npm):GHSA-4vpr-x523-8j87"},{"rule_id":"osv/GHSA-4v9v-hfq4-rm2v","severity":"medium","message":"webpack-dev-server@4.15.2 (npm) is affected by GHSA-4v9v-hfq4-rm2v","path":"frontend/package-lock.json","line":null,"fingerprint":"webpack-dev-server@4.15.2 (npm):GHSA-4v9v-hfq4-rm2v"},{"rule_id":"osv/GHSA-79cf-xcqc-c78w","severity":"medium","message":"webpack-dev-server@4.15.2 (npm) is affected by GHSA-79cf-xcqc-c78w","path":"frontend/package-lock.json","line":null,"fingerprint":"webpack-dev-server@4.15.2 (npm):GHSA-79cf-xcqc-c78w"},{"rule_id":"osv/GHSA-9jgg-88mc-972h","severity":"medium","message":"webpack-dev-server@4.15.2 (npm) is affected by GHSA-9jgg-88mc-972h","path":"frontend/package-lock.json","line":null,"fingerprint":"webpack-dev-server@4.15.2 (npm):GHSA-9jgg-88mc-972h"},{"rule_id":"osv/GHSA-f5vj-f2hx-8m93","severity":"medium","message":"webpack-dev-server@4.15.2 (npm) is affected by GHSA-f5vj-f2hx-8m93","path":"frontend/package-lock.json","line":null,"fingerprint":"webpack-dev-server@4.15.2 (npm):GHSA-f5vj-f2hx-8m93"},{"rule_id":"osv/GHSA-m28w-2pqf-7qgj","severity":"medium","message":"webpack-dev-server@4.15.2 (npm) is affected by GHSA-m28w-2pqf-7qgj","path":"frontend/package-lock.json","line":null,"fingerprint":"webpack-dev-server@4.15.2 (npm):GHSA-m28w-2pqf-7qgj"},{"rule_id":"osv/GHSA-mx8g-39q3-5c79","severity":"medium","message":"webpack-dev-server@4.15.2 (npm) is affected by GHSA-mx8g-39q3-5c79","path":"frontend/package-lock.json","line":null,"fingerprint":"webpack-dev-server@4.15.2 (npm):GHSA-mx8g-39q3-5c79"},{"rule_id":"osv/GHSA-mp7j-qc5w-4988","severity":"medium","message":"websocket-driver@0.7.4 (npm) is affected by GHSA-mp7j-qc5w-4988","path":"frontend/package-lock.json","line":null,"fingerprint":"websocket-driver@0.7.4 (npm):GHSA-mp7j-qc5w-4988"},{"rule_id":"osv/GHSA-58qx-3vcg-4xpx","severity":"medium","message":"ws@8.18.3 (npm) is affected by GHSA-58qx-3vcg-4xpx","path":"frontend/package-lock.json","line":null,"fingerprint":"ws@8.18.3 (npm):GHSA-58qx-3vcg-4xpx"},{"rule_id":"osv/GHSA-48c2-rrv3-qjmp","severity":"medium","message":"yaml@1.10.2 (npm) is affected by GHSA-48c2-rrv3-qjmp","path":"frontend/package-lock.json","line":null,"fingerprint":"yaml@1.10.2 (npm):GHSA-48c2-rrv3-qjmp"},{"rule_id":"osv/GHSA-48c2-rrv3-qjmp","severity":"medium","message":"yaml@2.8.2 (npm) is affected by GHSA-48c2-rrv3-qjmp","path":"frontend/package-lock.json","line":null,"fingerprint":"yaml@2.8.2 (npm):GHSA-48c2-rrv3-qjmp"},{"rule_id":"osv/GHSA-mf9w-mj56-hr94","severity":"medium","message":"python-dotenv@1.0.0 (PyPI) is affected by PYSEC-2026-2270, GHSA-mf9w-mj56-hr94","path":"requirements.txt","line":null,"fingerprint":"python-dotenv@1.0.0 (PyPI):GHSA-mf9w-mj56-hr94"},{"rule_id":"osv/GHSA-9hjg-9r4m-mvj7","severity":"medium","message":"requests@2.32.0 (PyPI) is affected by PYSEC-2026-1872, GHSA-9hjg-9r4m-mvj7","path":"requirements.txt","line":null,"fingerprint":"requests@2.32.0 (PyPI):GHSA-9hjg-9r4m-mvj7"},{"rule_id":"osv/GHSA-gc5v-m9x4-r6x2","severity":"medium","message":"requests@2.32.0 (PyPI) is affected by PYSEC-2026-2275, GHSA-gc5v-m9x4-r6x2","path":"requirements.txt","line":null,"fingerprint":"requests@2.32.0 (PyPI):GHSA-gc5v-m9x4-r6x2"},{"rule_id":"osv/GHSA-4x5r-pxfx-6jf8","severity":"low","message":"@babel/core@7.28.5 (npm) is affected by GHSA-4x5r-pxfx-6jf8","path":"frontend/package-lock.json","line":null,"fingerprint":"@babel/core@7.28.5 (npm):GHSA-4x5r-pxfx-6jf8"},{"rule_id":"osv/GHSA-vpq2-c234-7xj6","severity":"low","message":"@tootallnate/once@1.1.2 (npm) is affected by GHSA-vpq2-c234-7xj6","path":"frontend/package-lock.json","line":null,"fingerprint":"@tootallnate/once@1.1.2 (npm):GHSA-vpq2-c234-7xj6"},{"rule_id":"osv/GHSA-xhjh-pmcv-23jw","severity":"low","message":"axios@1.13.2 (npm) is affected by GHSA-xhjh-pmcv-23jw","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.13.2 (npm):GHSA-xhjh-pmcv-23jw"},{"rule_id":"osv/GHSA-v422-hmwv-36x6","severity":"low","message":"body-parser@1.20.4 (npm) is affected by GHSA-v422-hmwv-36x6","path":"frontend/package-lock.json","line":null,"fingerprint":"body-parser@1.20.4 (npm):GHSA-v422-hmwv-36x6"},{"rule_id":"osv/GHSA-333x-w4r6-6crp","severity":"low","message":"fast-uri@3.1.0 (npm) is affected by GHSA-333x-w4r6-6crp","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-333x-w4r6-6crp"},{"rule_id":"osv/GHSA-xhq7-xmqj-769h","severity":"low","message":"fast-uri@3.1.0 (npm) is affected by GHSA-xhq7-xmqj-769h","path":"frontend/package-lock.json","line":null,"fingerprint":"fast-uri@3.1.0 (npm):GHSA-xhq7-xmqj-769h"},{"rule_id":"osv/GHSA-2vgq-wchc-25w7","severity":"low","message":"node-forge@1.3.3 (npm) is affected by GHSA-2vgq-wchc-25w7","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-2vgq-wchc-25w7"},{"rule_id":"osv/GHSA-4487-j8r4-4g2f","severity":"low","message":"node-forge@1.3.3 (npm) is affected by GHSA-4487-j8r4-4g2f","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-4487-j8r4-4g2f"},{"rule_id":"osv/GHSA-4642-5mcj-2rqw","severity":"low","message":"node-forge@1.3.3 (npm) is affected by GHSA-4642-5mcj-2rqw","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-4642-5mcj-2rqw"},{"rule_id":"osv/GHSA-6889-vf6x-f3g5","severity":"low","message":"node-forge@1.3.3 (npm) is affected by GHSA-6889-vf6x-f3g5","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-6889-vf6x-f3g5"},{"rule_id":"osv/GHSA-9wg5-mj3p-v49q","severity":"low","message":"node-forge@1.3.3 (npm) is affected by GHSA-9wg5-mj3p-v49q","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-9wg5-mj3p-v49q"},{"rule_id":"osv/GHSA-h6cr-wjv9-3cpp","severity":"low","message":"node-forge@1.3.3 (npm) is affected by GHSA-h6cr-wjv9-3cpp","path":"frontend/package-lock.json","line":null,"fingerprint":"node-forge@1.3.3 (npm):GHSA-h6cr-wjv9-3cpp"},{"rule_id":"osv/GHSA-w7fw-mjwx-w883","severity":"low","message":"qs@6.14.0 (npm) is affected by GHSA-w7fw-mjwx-w883","path":"frontend/package-lock.json","line":null,"fingerprint":"qs@6.14.0 (npm):GHSA-w7fw-mjwx-w883"},{"rule_id":"osv/GHSA-m5mm-p8h7-m29v","severity":"low","message":"serialize-javascript@4.0.0 (npm) is affected by GHSA-m5mm-p8h7-m29v","path":"frontend/package-lock.json","line":null,"fingerprint":"serialize-javascript@4.0.0 (npm):GHSA-m5mm-p8h7-m29v"},{"rule_id":"osv/GHSA-m5mm-p8h7-m29v","severity":"low","message":"serialize-javascript@6.0.2 (npm) is affected by GHSA-m5mm-p8h7-m29v","path":"frontend/package-lock.json","line":null,"fingerprint":"serialize-javascript@6.0.2 (npm):GHSA-m5mm-p8h7-m29v"}],"evidence":[],"data":{"ecosystems":["PyPI","npm"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":1.0,"findings":4.0,"findings_high":3.0,"findings_medium":1.0,"findings_low":0.0,"penalty":32.4},"findings":[{"rule_id":"zizmor/dangerous-triggers","severity":"high","message":"use of fundamentally insecure workflow trigger [confidence medium]","path":".github/workflows/claude.yml","line":4,"fingerprint":"dangerous-triggers:.github/workflows/claude.yml:4"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/claude.yml","line":29,"fingerprint":"unpinned-uses:.github/workflows/claude.yml:29"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/claude.yml","line":35,"fingerprint":"unpinned-uses:.github/workflows/claude.yml:35"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/claude.yml","line":28,"fingerprint":"artipacked:.github/workflows/claude.yml:28"}],"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":0.0,"signed_commit_share":0.0,"unpinned_manifests":1.0},"findings":[],"evidence":[{"kind":"posture","description":"package.json has no lockfile alongside it (unpinned dependencies)","ref":"package.json","url":null,"weight":0.3}],"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":268.0,"function_nloc":5372.0,"mean_ccn":5.65,"p90_ccn":12.0,"complex_functions":14.0,"long_functions":7.0,"many_param_functions":0.0,"risky_nloc_share":0.3327},"findings":[],"evidence":[{"kind":"complex-function","description":"analyze_history in analyzer.py: complexity 141, 363 lines","ref":"analyzer.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/analyzer.py#L112","weight":1.0},{"kind":"complex-function","description":"get_user_comparative_stats in cross_user_analyzer.py: complexity 72, 255 lines","ref":"cross_user_analyzer.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/cross_user_analyzer.py#L140","weight":1.0},{"kind":"complex-function","description":"(anonymous) in frontend/src/components/cards/CardFactory.tsx: complexity 29, 126 lines","ref":"frontend/src/components/cards/CardFactory.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/cards/CardFactory.tsx#L24","weight":0.48333333333333334},{"kind":"complex-function","description":"SummaryCard in frontend/src/components/cards/SummaryCard.tsx: complexity 28, 152 lines","ref":"frontend/src/components/cards/SummaryCard.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/cards/SummaryCard.tsx#L17","weight":0.4666666666666667},{"kind":"complex-function","description":"_extract_images_from_response in clients/image_client.py: complexity 24, 54 lines","ref":"clients/image_client.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/clients/image_client.py#L349","weight":0.4},{"kind":"complex-function","description":"get_user_history in clients/tautulli_client.py: complexity 22, 53 lines","ref":"clients/tautulli_client.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/clients/tautulli_client.py#L88","weight":0.36666666666666664},{"kind":"complex-function","description":"_extract_genres in analyzer.py: complexity 21, 24 lines","ref":"analyzer.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/analyzer.py#L75","weight":0.35},{"kind":"complex-function","description":"generate_cross_user_insights in cross_user_analyzer.py: complexity 21, 73 lines","ref":"cross_user_analyzer.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/cross_user_analyzer.py#L20","weight":0.35},{"kind":"complex-function","description":"_analyze_time_of_day in analyzer.py: complexity 20, 62 lines","ref":"analyzer.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/analyzer.py#L798","weight":0.3333333333333333},{"kind":"complex-function","description":"_generate_images_one_by_one in clients/image_client.py: complexity 18, 115 lines","ref":"clients/image_client.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/clients/image_client.py#L150","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":5696.0,"duplicated_lines":261.0,"duplicated_share":0.0458,"files":41.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: analyzer.py:519 and analyzer.py:616","ref":"analyzer.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/analyzer.py#L519","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: clients/tautulli_client.py:37 and clients/tautulli_client.py:65","ref":"clients/tautulli_client.py","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/clients/tautulli_client.py#L37","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/api.ts:130 and frontend/src/types/cards.ts:2","ref":"frontend/src/api.ts","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/api.ts#L130","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/StoryCard.tsx:70 and frontend/src/utils/imageUtils.ts:40","ref":"frontend/src/components/StoryCard.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/StoryCard.tsx#L70","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/WrapDisplay.tsx:227 and frontend/src/components/WrapDisplay.tsx:346","ref":"frontend/src/components/WrapDisplay.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/WrapDisplay.tsx#L227","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/cards/ComparisonCard.tsx:238 and frontend/src/components/cards/ComparisonCard.tsx:239","ref":"frontend/src/components/cards/ComparisonCard.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/cards/ComparisonCard.tsx#L238","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/cards/FunCard.tsx:27 and frontend/src/components/cards/TastePersonalityCard.tsx:120","ref":"frontend/src/components/cards/FunCard.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/cards/FunCard.tsx#L27","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/cards/FunCard.tsx:94 and frontend/src/components/cards/FunCard.tsx:109","ref":"frontend/src/components/cards/FunCard.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/cards/FunCard.tsx#L94","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/cards/SeasonalCard.tsx:67 and frontend/src/components/cards/SummaryCard.tsx:172","ref":"frontend/src/components/cards/SeasonalCard.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/cards/SeasonalCard.tsx#L67","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/cards/TastePersonalityCard.tsx:166 and frontend/src/components/cards/TastePersonalityCard.tsx:211","ref":"frontend/src/components/cards/TastePersonalityCard.tsx","url":"https://github.com/kirarpit/plexwrap/blob/2a751066a8aef2bd936e4a32597ee835f01aec29/frontend/src/components/cards/TastePersonalityCard.tsx#L166","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":15.0,"weighted_findings":15.0,"scanned_lines":7704.0,"category:best-practice":15.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":"clients/image_client.py","line":182,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:clients/image_client.py:182"},{"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":"clients/image_client.py","line":226,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:clients/image_client.py:226"},{"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":"config.py","line":51,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:config.py:51"},{"rule_id":"opengrep/python.requests.best-practice.use-raise-for-status","severity":"medium","message":"There's an HTTP request made with requests, but the raise_for_status() utility method isn't used. This can result in request errors going unnoticed and your code behaving in unexpected ways, such as if your authorization API returns a 500 error while you're only checking for a 401.","path":"main.py","line":349,"fingerprint":"python.requests.best-practice.use-raise-for-status:main.py:349"},{"rule_id":"opengrep/python.requests.best-practice.use-timeout","severity":"medium","message":"Detected a 'requests' call without a timeout set. By default, 'requests' calls wait until the connection is closed. This means a 'requests' call without a timeout will hang the program if a response is never received. Consider setting a timeout for all 'requests'.","path":"main.py","line":349,"fingerprint":"python.requests.best-practice.use-timeout:main.py:349"},{"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":"pregenerate.py","line":48,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:48"},{"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":"pregenerate.py","line":58,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:58"},{"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":"pregenerate.py","line":84,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:84"},{"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":"pregenerate.py","line":97,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:97"},{"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":"pregenerate.py","line":154,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:154"},{"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":"pregenerate.py","line":180,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:180"},{"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":"pregenerate.py","line":226,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:226"},{"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":"pregenerate.py","line":231,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:231"},{"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":"pregenerate.py","line":255,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:255"},{"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":"pregenerate.py","line":265,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:pregenerate.py:265"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0023,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.2857,"test_lines":9.0,"source_lines":7704.0,"test_ratio":0.0012,"ci_files":1.0,"cochange_share":0.0714,"cochange_commits":14.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/claude.yml","ref":".github/workflows/claude.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (npm run test)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["npm run test"],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":268.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.5139,"check:low_escape_density":0.0,"escapes":47.0,"escapes_per_kloc":6.175},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: frontend/tsconfig.json","ref":"frontend/tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":108.0,"other_lines":7596.0,"files_blamed":41.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":15.0,"quality:other_per_kloc":1.975,"security:ai_findings":0.0,"security:ai_per_kloc":0.0,"security:other_findings":2.0,"security:other_per_kloc":0.263},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}