{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:03.413502Z","repo":{"ref":{"host":"github.com","owner":"ccieblogger","name":"netraven"},"default_branch":"main","clone_url":"https://github.com/ccieblogger/netraven.git","html_url":"https://github.com/ccieblogger/netraven","description":"AI coded multi-service, containerized platform","stars":1,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":5034,"primary_language":"Python","license_spdx":"AGPL-3.0","created_at":"2025-03-12T05:25:47Z","pushed_at":"2025-05-22T23:09:20Z","security_policy_url":null,"distribution":{"owner_created_at":"2019-07-11T16:06:35Z","owner_type":"User","release_assets":[]}},"commit_sha":"2f641cca30c2238ba78c37dcd2c0fa1bea0189ce","profile":{"lines_by_language":{"Python":17841,"Vue":9877,"JavaScript":2621,"Shell":1910},"files_by_category":{"source":229,"docs":160,"test":42,"other":31,"config":14,"generated":2,"binary":1},"source_lines":24961,"test_lines":7288},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.65,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0,"suspected_share":0.6016,"estimated_share":0.0,"ai_artifacts":3.0,"flagged_work_units":7.0,"flagged_releases":0.0,"style_index":1.262},"summary":"Weak signals consistent with AI-assisted development. 2 commit(s) carry explicit AI attribution, too few to characterize the codebase. Comments and strings use phrasing typical of LLM-written code (see the coding style evidence)."},"quality":{"score":50.4,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":55.6,"duplication":60.6,"lint":60.6,"testing":38.2,"docs":65.0,"type_safety":0.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.29, no CI test run detected; 20% of function code in complex or long functions; 8% duplicated lines. Weakest area: type safety."},"security":{"score":34.3,"confidence":0.85,"coverage":1.0,"label":"poor","breakdown":{"secrets":36.8,"sast":82.0,"dependencies":0.6,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is poor: 0 possible secret(s) in the tree, 3 only in history; 181 known vulnerabilities in 41 dependencies; 8 high-severity SAST findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":46.0,"checked":46.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":457.0,"attributed_commits":2.0,"attributed_commit_share":0.00437636761487965,"effective_loc":70029.0,"attributed_loc":2.0,"attributed_loc_share":0.000028559596738494053,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"GitHub Copilot coding agent: 2 attributed commits, 2 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot'","ref":"d11ef0ede6d614ad419ea30d7c29d1e0fbf98e82","url":"https://github.com/ccieblogger/netraven/commit/d11ef0ede6d614ad419ea30d7c29d1e0fbf98e82","weight":0.9},{"kind":"attributed-commit","description":"GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot'","ref":"2e20607c7b078c1529e614a450d8019a0c3a3881","url":"https://github.com/ccieblogger/netraven/commit/2e20607c7b078c1529e614a450d8019a0c3a3881","weight":0.9}],"data":{"attributed_loc_by_commit":{"2e20607c7b078c1529e614a450d8019a0c3a3881":1,"d11ef0ede6d614ad419ea30d7c29d1e0fbf98e82":1},"tools":{"github-copilot":{"name":"GitHub Copilot coding agent","commits":2,"loc":2,"first_seen":1744862749,"last_seen":1744862771}},"monthly":{"2025-04":{"loc":60112,"attributed_loc":2},"2025-05":{"loc":9917,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":3.0,"workflow_agents":0.0,"tools_configured":2.0,"earliest_adoption":1744574745.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":".cursor/rules/tech-stack.mdc (cursor configuration)","ref":".cursor/rules/tech-stack.mdc","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/.cursor/rules/tech-stack.mdc","weight":0.5},{"kind":"ai-artifact","description":".cursor/rules/utility-scripts.mdc (cursor configuration)","ref":".cursor/rules/utility-scripts.mdc","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/.cursor/rules/utility-scripts.mdc","weight":0.5},{"kind":"ai-artifact","description":".github/copilot-instructions.md (github-copilot configuration)","ref":".github/copilot-instructions.md","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/.github/copilot-instructions.md","weight":0.5}],"data":{"artifacts":[{"tool":"cursor","path":".cursor/rules/tech-stack.mdc","added_at":1744574745},{"tool":"cursor","path":".cursor/rules/utility-scripts.mdc","added_at":1744577503},{"tool":"github-copilot","path":".github/copilot-instructions.md","added_at":1746820635}],"workflows":[],"tools":["cursor","github-copilot"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":127.0,"flagged_units":7.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":70029.0,"flagged_loc":42128.0,"flagged_loc_share":0.6015793456996387,"max_loc_per_hour":6057.0,"median_loc_per_hour":103.71961840157417,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"24,228 lines of first-party code in ~4.0h (6,057 lines/hour, 1 commit session)","ref":"759634d492438c7743895b199e14aa5c5e493a8c","url":"https://github.com/ccieblogger/netraven/commit/759634d492438c7743895b199e14aa5c5e493a8c","weight":0.6},{"kind":"velocity-burst","description":"2,769 lines of first-party code in ~1.5h (1,824 lines/hour, 1 commit session)","ref":"588c77c07d331fc21dd8ff3f69902ded41073146","url":"https://github.com/ccieblogger/netraven/commit/588c77c07d331fc21dd8ff3f69902ded41073146","weight":0.5473133235724743},{"kind":"velocity-burst","description":"6,181 lines of first-party code in ~3.5h (1,783 lines/hour, 9 commit session)","ref":"d587e2101e4d41e9b41eceffba62198a8c4fb5e0","url":"https://github.com/ccieblogger/netraven/commit/d587e2101e4d41e9b41eceffba62198a8c4fb5e0","weight":0.5349370943184549},{"kind":"velocity-burst","description":"1,289 lines of first-party code in ~1.0h (1,351 lines/hour, 1 commit session)","ref":"90f8cdcf078496116860f14dd9ca27737cc43915","url":"https://github.com/ccieblogger/netraven/commit/90f8cdcf078496116860f14dd9ca27737cc43915","weight":0.4052751091703056},{"kind":"velocity-burst","description":"4,392 lines of first-party code in ~5.0h (871 lines/hour, 6 commit session)","ref":"ac129623200eee1b47b647a6396940e8ec26a79b","url":"https://github.com/ccieblogger/netraven/commit/ac129623200eee1b47b647a6396940e8ec26a79b","weight":0.2613709499669385},{"kind":"velocity-burst","description":"1,147 lines of first-party code in ~1.4h (801 lines/hour, 2 commit session)","ref":"243aa04bb62ce05b38e0132e7cf15d12c1dc9754","url":"https://github.com/ccieblogger/netraven/commit/243aa04bb62ce05b38e0132e7cf15d12c1dc9754","weight":0.24044254658385092},{"kind":"velocity-burst","description":"2,122 lines of first-party code in ~3.1h (683 lines/hour, 18 commit session)","ref":"a74c06d0682af245a99e2e8a19e1c39c44ab1474","url":"https://github.com/ccieblogger/netraven/commit/a74c06d0682af245a99e2e8a19e1c39c44ab1474","weight":0.20478598874095252}],"data":{"flagged_loc_by_commit":{"a8a6b89f5a89bd7e6ea7b0e59708be645bec6f4a":52,"85115487bd970feb418a5a26da7f3eafe17812db":74,"8cc1c00ba2e52d2a689aa7c55e64e300b44fc539":74,"2db446e584218b87b0b590a810b8c8d279f85821":54,"39b4940b7b8e38b9309fd7164009c5a45552dd05":206,"9d2239336b8ee8c96191f5773bc2c01c1534e13f":109,"99ca79d507258b8fef39f05e7e7a17107c907ad9":56,"dc4ebc52632fae32c429faaccc2586af69441762":112,"3148b80795f6d01d0a3efe25982ef990acebeae1":88,"e9af3ea308b3051d60cfb17d540238c3e4494894":404,"13c6ca0512113529e065cd5235ea44f1b657c0ea":4,"7b0dffba17416f00410ce3e72e6b15d4037a9edf":4,"768c12d4afa7928914efd3197301efc9c81575d6":81,"e3889aec3af2e345c5aaf9e22bcca4fbf74aeb8c":154,"a03825a8e725d68bd42c7da23417325e0b3ccb34":133,"9b3b18f94164ac976271a5966c774cda9ccf4fe3":189,"19888c22bd1a1695928a91930e5f2502f592b9a1":120,"a74c06d0682af245a99e2e8a19e1c39c44ab1474":208,"0cb68674351989d5b10d1dc8057fe11f4e48a076":876,"243aa04bb62ce05b38e0132e7cf15d12c1dc9754":271,"588c77c07d331fc21dd8ff3f69902ded41073146":2769,"38b22de073554169785bf2653992405f1b17ecd5":1168,"ba8f18ea9eec9c0cabb9c0a387d4942909e7b4af":935,"18af614efe60f83362491602de980f5367fcf4ab":1371,"6a97c13a6b753e185394dcb6b673421f955fc8bb":640,"c2dcb38d699cbb2452273e59c3cce2ca77ce04c7":551,"a0f43bd8ba33754b8069990c1a20b89e80d835a4":540,"30d43518a35babc87897072cb23d30067b53aabe":18,"bd159fb7addc0b1918464a6c65ae33ada57d0996":901,"d587e2101e4d41e9b41eceffba62198a8c4fb5e0":57,"759634d492438c7743895b199e14aa5c5e493a8c":24228,"1d25852b7634528412ff0dcbdc48a9400a4bfa4a":1637,"fe6e6cd858689724cf448b08ce7637027e890211":175,"bafd9c08e7167aa5b328f58115672086d41f27fe":587,"189bf4f9e5116011c62620e47ea7b1a41bd27d72":474,"19a76b93d4921626c6c1c1e4302858863d17eafa":675,"ac129623200eee1b47b647a6396940e8ec26a79b":844,"90f8cdcf078496116860f14dd9ca27737cc43915":1289},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":13.0,"flagged_releases":0.0,"max_loc_per_day":65142.9},"findings":[],"evidence":[],"data":{"releases":[{"from":"v0.5.0","to":"v0.6.0","loc":2668,"days":0.96,"loc_per_day":2775.6,"flagged":false},{"from":"v0.6.0","to":"v0.6.5","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"v0.6.5","to":"v0.6.5.1","loc":1237,"days":2.04,"loc_per_day":606.7,"flagged":false},{"from":"v0.6.5.1","to":"v0.6.5.2","loc":68,"days":0.08,"loc_per_day":831.1,"flagged":false},{"from":"v0.6.5.2","to":"v0.6.5.3","loc":448,"days":0.82,"loc_per_day":544.5,"flagged":false},{"from":"v0.6.5.3","to":"0.6.5.4","loc":90,"days":0.04,"loc_per_day":2160.0,"flagged":false},{"from":"0.6.5.4","to":"v0.6.5.5","loc":142,"days":0.06,"loc_per_day":2503.8,"flagged":false},{"from":"v0.6.5.5","to":"v0.6.5.51","loc":864,"days":1.01,"loc_per_day":857.6,"flagged":false},{"from":"v0.6.5.51","to":"v0.6.5.52","loc":1637,"days":0.1,"loc_per_day":16232.8,"flagged":false},{"from":"v0.6.5.52","to":"v0.6.5.53","loc":2755,"days":0.04,"loc_per_day":65142.9,"flagged":false},{"from":"v0.6.5.53","to":"v0.6.5.54","loc":1770,"days":1.02,"loc_per_day":1734.5,"flagged":false},{"from":"v0.6.5.54","to":"v0.6.5.55","loc":195,"days":0.61,"loc_per_day":318.3,"flagged":false},{"from":"v0.6.5.55","to":"v0.6.5.56","loc":105,"days":0.3,"loc_per_day":350.2,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":24961.0,"index":1.262,"count:narrated_steps":1.0,"per_kloc:narrated_steps":0.04,"files:narrated_steps":1.0,"count:placeholder":3.0,"per_kloc:placeholder":0.12,"files:placeholder":3.0,"count:emoji_in_code":37.0,"per_kloc:emoji_in_code":1.482,"files:emoji_in_code":10.0,"count:assistant_voice":3.0,"per_kloc:assistant_voice":0.12,"files:assistant_voice":3.0},"findings":[],"evidence":[{"kind":"stylometry:placeholder","description":"placeholder or demo-only phrasing: icon: 'NetworkCheckIcon', // Placeholder, replace with actual icon component if needed","ref":"frontend/src/jobTypeRegistry.js:6","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/jobTypeRegistry.js#L6","weight":0.0},{"kind":"stylometry:placeholder","description":"placeholder or demo-only phrasing: # In a real system, this would push config_data to the device.","ref":"netraven/api/routers/configs.py:201","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/api/routers/configs.py#L201","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Next, try .password property (not a method)","ref":"netraven/services/credential_utils.py:20","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/services/credential_utils.py#L20","weight":0.0},{"kind":"stylometry:assistant_voice","description":"assistant-style phrasing left in code: Key features:","ref":"netraven/worker/backends/netmiko_driver.py:11","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/worker/backends/netmiko_driver.py#L11","weight":0.0},{"kind":"stylometry:placeholder","description":"placeholder or demo-only phrasing: #     # Replace with actual details for a test device ONLY for local testing","ref":"netraven/worker/backends/netmiko_driver.py:312","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/worker/backends/netmiko_driver.py#L312","weight":0.0},{"kind":"stylometry:assistant_voice","description":"assistant-style phrasing left in code: Key features:","ref":"netraven/worker/backends/paramiko_driver.py:11","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/worker/backends/paramiko_driver.py#L11","weight":0.0},{"kind":"stylometry:assistant_voice","description":"assistant-style phrasing left in code: Key features:","ref":"netraven/worker/circuit_breaker.py:19","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/worker/circuit_breaker.py#L19","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":3.0,"secrets_nonprod":14.0,"secrets_low_confidence":1.0},"findings":[{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"docs/architecture/netraven_api_spec.md","line":111,"fingerprint":"docs/architecture/netraven_api_spec.md:generic-api-key:111"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in history (commit f7b71093cd); removed from the current tree but still retrievable","path":"scripts/tests/test_gateway_integration.sh","line":79,"fingerprint":"f7b71093cdf7ca98c2459d34daa6d252fbbd5fc0:scripts/tests/test_gateway_integration.sh:curl-auth-header:79"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in history (commit 8862e1bf81); removed from the current tree but still retrievable","path":"README.md","line":265,"fingerprint":"8862e1bf813ef4417e1189b71e95332042b5190e:README.md:curl-auth-header:265"},{"rule_id":"gitleaks/jwt","severity":"medium","message":"Possible jwt secret in history (commit 7541742295); removed from the current tree but still retrievable","path":"token.json","line":1,"fingerprint":"75417422952c7f1acfe38fc354e8d42ec361ee29:token.json:jwt:1"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in history (commit 77f3db9382); removed from the current tree but still retrievable","path":"docs/developer-guide/api-reference.md","line":47,"fingerprint":"77f3db9382000d2b8a23192e5f4095e0abd22dba:docs/developer-guide/api-reference.md:curl-auth-header:47"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 77f3db9382); removed from the current tree but still retrievable","path":"docs/developer-guide/api-reference.md","line":42,"fingerprint":"77f3db9382000d2b8a23192e5f4095e0abd22dba:docs/developer-guide/api-reference.md:generic-api-key:42"},{"rule_id":"gitleaks/jwt","severity":"low","message":"Possible jwt secret in history (commit 7541742295); removed from the current tree but still retrievable","path":"tests/integration/test_auth_advanced.py","line":585,"fingerprint":"75417422952c7f1acfe38fc354e8d42ec361ee29:tests/integration/test_auth_advanced.py:jwt:585"},{"rule_id":"gitleaks/jwt","severity":"low","message":"Possible jwt secret in history (commit 7541742295); removed from the current tree but still retrievable","path":"tests/integration/test_security_features.py","line":81,"fingerprint":"75417422952c7f1acfe38fc354e8d42ec361ee29:tests/integration/test_security_features.py:jwt:81"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 7541742295); removed from the current tree but still retrievable","path":"tests/integration/test_credential_store_integration.py","line":186,"fingerprint":"75417422952c7f1acfe38fc354e8d42ec361ee29:tests/integration/test_credential_store_integration.py:generic-api-key:186"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 25f6e5b128); removed from the current tree but still retrievable","path":"docs/reference/configuration-options.md","line":25,"fingerprint":"25f6e5b1287c17621bd08236593b737bb79e96dc:docs/reference/configuration-options.md:generic-api-key:25"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in history (commit e2f6c1a71b); removed from the current tree but still retrievable","path":"DEVELOPER.md","line":253,"fingerprint":"e2f6c1a71b122a017268602323a2332864c3e96f:DEVELOPER.md:curl-auth-header:253"},{"rule_id":"gitleaks/jwt","severity":"medium","message":"Possible jwt secret in history (commit 9d95e8040a); removed from the current tree but still retrievable","path":"tokens.json","line":4,"fingerprint":"9d95e8040a2b8b31641461c9dcf128a2f236b409:tokens.json:jwt:4"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 03c76c2dfd); removed from the current tree but still retrievable","path":"netraven/web/models/auth.py","line":76,"fingerprint":"03c76c2dfd5fe06a8f2db8dd08e2072a2b530330:netraven/web/models/auth.py:generic-api-key:76"},{"rule_id":"gitleaks/curl-auth-header","severity":"medium","message":"Possible curl-auth-header secret in history (commit ff87e6e509); removed from the current tree but still retrievable","path":"scripts/test_gateway_integration.sh","line":79,"fingerprint":"ff87e6e509a1f57af210e2a6c2843e367fc30817:scripts/test_gateway_integration.sh:curl-auth-header:79"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in history (commit 3624023ee6); removed from the current tree but still retrievable","path":"docs/troubleshooting.md","line":391,"fingerprint":"3624023ee694d653d3753a54f6c8e97656e920d5:docs/troubleshooting.md:curl-auth-header:391"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in history (commit 475640d0eb); removed from the current tree but still retrievable","path":"docs/api.md","line":24,"fingerprint":"475640d0eb3ab1f2f67a8e5f2dd3fd9b0ef48e0e:docs/api.md:curl-auth-header:24"},{"rule_id":"gitleaks/jwt","severity":"low","message":"Possible jwt secret in history (commit 9fa193de1c); removed from the current tree but still retrievable","path":"tests/test_core_auth.py","line":86,"fingerprint":"9fa193de1c7a9a5ab0789340f82bdda97a4bfacc:tests/test_core_auth.py:jwt:86"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 88d1982e34); removed from the current tree but still retrievable","path":"docs/troubleshooting.md","line":51,"fingerprint":"88d1982e344434adac2f81f3862b531aeeb45e4c:docs/troubleshooting.md:generic-api-key:51"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":12.0,"findings_high":8.0,"findings_medium":3.0,"findings_low":1.0,"weighted_findings":14.163,"scanned_lines":24961.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/dockerfile.security.missing-user","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docker/api/Dockerfile","line":43,"fingerprint":"dockerfile.security.missing-user:docker/api/Dockerfile:43"},{"rule_id":"opengrep/dockerfile.security.missing-user-entrypoint","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docker/api/Dockerfile","line":47,"fingerprint":"dockerfile.security.missing-user-entrypoint:docker/api/Dockerfile:47"},{"rule_id":"opengrep/dockerfile.security.missing-user","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docker/frontend/Dockerfile","line":38,"fingerprint":"dockerfile.security.missing-user:docker/frontend/Dockerfile:38"},{"rule_id":"opengrep/dockerfile.security.missing-user","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docker/frontend/Dockerfile","line":41,"fingerprint":"dockerfile.security.missing-user:docker/frontend/Dockerfile:41"},{"rule_id":"opengrep/dockerfile.security.missing-user-entrypoint","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docker/rq_scheduler/Dockerfile","line":41,"fingerprint":"dockerfile.security.missing-user-entrypoint:docker/rq_scheduler/Dockerfile:41"},{"rule_id":"opengrep/dockerfile.security.missing-user-entrypoint","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docker/scheduler/Dockerfile","line":41,"fingerprint":"dockerfile.security.missing-user-entrypoint:docker/scheduler/Dockerfile:41"},{"rule_id":"opengrep/dockerfile.security.missing-user-entrypoint","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docker/worker/Dockerfile","line":48,"fingerprint":"dockerfile.security.missing-user-entrypoint:docker/worker/Dockerfile:48"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":"netraven/worker/jobs/reachability.py","line":51,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:netraven/worker/jobs/reachability.py:51"},{"rule_id":"opengrep/javascript.vue.security.audit.xss.templates.avoid-v-html","severity":"medium","message":"Dynamically rendering arbitrary HTML on your website can be very dangerous because it can easily lead to XSS vulnerabilities. Only use HTML interpolation on trusted content and never on user-provided content. [confidence low]","path":"frontend/src/components/ui/MarkdownRenderer.vue","line":2,"fingerprint":"javascript.vue.security.audit.xss.templates.avoid-v-html:frontend/src/components/ui/MarkdownRenderer.vue:2"},{"rule_id":"opengrep/python.lang.security.audit.non-literal-import","severity":"medium","message":"Untrusted user input in `importlib.import_module()` function allows an attacker to load arbitrary code. Avoid dynamic values in `importlib.import_module()` or use a whitelist to prevent running untrusted code. [confidence low]","path":"netraven/worker/job_registry.py","line":33,"fingerprint":"python.lang.security.audit.non-literal-import:netraven/worker/job_registry.py:33"},{"rule_id":"opengrep/bash.curl.security.curl-pipe-bash","severity":"medium","message":"Data is being piped into `bash` from a `curl` command. An attacker with control of the server in the `curl` command could inject malicious code into the pipe, resulting in a system compromise. Avoid piping untrusted data into `bash` or any other shell if you can. If you must do this, consider checki [confidence low]","path":"setup/manage_netraven.sh","line":102,"fingerprint":"bash.curl.security.curl-pipe-bash:setup/manage_netraven.sh:102"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"frontend/src/store/job.js","line":100,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:frontend/src/store/job.js:100"}],"evidence":[],"data":{"rulesets":["python","javascript","bash","dockerfile"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":41.0,"vulnerabilities":181.0,"vulns_critical":8.0,"vulns_high":99.0,"vulns_medium":62.0,"vulns_low":11.0,"vulns_unknown":1.0,"penalty":311.0},"findings":[{"rule_id":"osv/GHSA-fjxv-7rqg-78g4","severity":"critical","message":"form-data@4.0.2 (npm) is affected by GHSA-fjxv-7rqg-78g4","path":"frontend/package-lock.json","line":null,"fingerprint":"form-data@4.0.2 (npm):GHSA-fjxv-7rqg-78g4"},{"rule_id":"osv/GHSA-wf6x-7x77-mvgw","severity":"critical","message":"immutable@5.1.1 (npm) is affected by GHSA-wf6x-7x77-mvgw","path":"frontend/package-lock.json","line":null,"fingerprint":"immutable@5.1.1 (npm):GHSA-wf6x-7x77-mvgw"},{"rule_id":"osv/GHSA-82r6-8w77-94w6","severity":"critical","message":"anyio@4.9.0 (PyPI) is affected by PYSEC-2026-4025, GHSA-82r6-8w77-94w6","path":"poetry.lock","line":null,"fingerprint":"anyio@4.9.0 (PyPI):GHSA-82r6-8w77-94w6"},{"rule_id":"osv/GHSA-6q48-6c7w-9gw2","severity":"critical","message":"certifi@2025.1.31 (PyPI) is affected by PYSEC-2026-4320, GHSA-6q48-6c7w-9gw2","path":"poetry.lock","line":null,"fingerprint":"certifi@2025.1.31 (PyPI):GHSA-6q48-6c7w-9gw2"},{"rule_id":"osv/GHSA-x2qx-6953-8485","severity":"critical","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-2161, GHSA-x2qx-6953-8485","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-x2qx-6953-8485"},{"rule_id":"osv/GHSA-284h-m62q-gf8w","severity":"critical","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3786, GHSA-284h-m62q-gf8w","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-284h-m62q-gf8w"},{"rule_id":"osv/GHSA-vqfr-h8mv-ghfj","severity":"critical","message":"h11@0.14.0 (PyPI) is affected by PYSEC-2026-348, GHSA-vqfr-h8mv-ghfj","path":"poetry.lock","line":null,"fingerprint":"h11@0.14.0 (PyPI):GHSA-vqfr-h8mv-ghfj"},{"rule_id":"osv/GHSA-3qf3-8w2g-rqmx","severity":"critical","message":"python-jose@3.4.0 (PyPI) is affected by PYSEC-2026-4298, GHSA-3qf3-8w2g-rqmx","path":"poetry.lock","line":null,"fingerprint":"python-jose@3.4.0 (PyPI):GHSA-3qf3-8w2g-rqmx"},{"rule_id":"osv/GHSA-g2v6-rqmx-r4w6","severity":"high","message":"@vue/server-renderer@3.5.13 (npm) is affected by GHSA-g2v6-rqmx-r4w6","path":"frontend/package-lock.json","line":null,"fingerprint":"@vue/server-renderer@3.5.13 (npm):GHSA-g2v6-rqmx-r4w6"},{"rule_id":"osv/GHSA-35jp-ww65-95wh","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-35jp-ww65-95wh","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-35jp-ww65-95wh"},{"rule_id":"osv/GHSA-3g43-6gmg-66jw","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-3g43-6gmg-66jw","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-3g43-6gmg-66jw"},{"rule_id":"osv/GHSA-43fc-jf86-j433","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-43fc-jf86-j433","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-43fc-jf86-j433"},{"rule_id":"osv/GHSA-4hjh-wcwx-xvwj","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-4hjh-wcwx-xvwj","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-4hjh-wcwx-xvwj"},{"rule_id":"osv/GHSA-62hf-57xw-28j9","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-62hf-57xw-28j9","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-62hf-57xw-28j9"},{"rule_id":"osv/GHSA-6chq-wfr3-2hj9","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-6chq-wfr3-2hj9","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-6chq-wfr3-2hj9"},{"rule_id":"osv/GHSA-777c-7fjr-54vf","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-777c-7fjr-54vf","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-777c-7fjr-54vf"},{"rule_id":"osv/GHSA-hfxv-24rg-xrqf","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-hfxv-24rg-xrqf","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-hfxv-24rg-xrqf"},{"rule_id":"osv/GHSA-j5f8-grm9-p9fc","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-j5f8-grm9-p9fc","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-j5f8-grm9-p9fc"},{"rule_id":"osv/GHSA-p92q-9vqr-4j8v","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-p92q-9vqr-4j8v","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-p92q-9vqr-4j8v"},{"rule_id":"osv/GHSA-pf86-5x62-jrwf","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-pf86-5x62-jrwf","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-pf86-5x62-jrwf"},{"rule_id":"osv/GHSA-pmwg-cvhr-8vh7","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-pmwg-cvhr-8vh7","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-pmwg-cvhr-8vh7"},{"rule_id":"osv/GHSA-q8qp-cvcw-x6jj","severity":"high","message":"axios@1.8.4 (npm) is affected by GHSA-q8qp-cvcw-x6jj","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-q8qp-cvcw-x6jj"},{"rule_id":"osv/GHSA-3jxr-9vmj-r5cp","severity":"high","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-3jxr-9vmj-r5cp","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-3jxr-9vmj-r5cp"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-mh99-v99m-4gvg","severity":"high","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-mh99-v99m-4gvg","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-mh99-v99m-4gvg"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-rgw5-rvv9-x895","severity":"high","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-rgw5-rvv9-x895","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-rgw5-rvv9-x895"},{"rule_id":"osv/GHSA-73wf-gq98-2v4g","severity":"high","message":"browserslist@4.24.4 (npm) is affected by GHSA-73wf-gq98-2v4g","path":"frontend/package-lock.json","line":null,"fingerprint":"browserslist@4.24.4 (npm):GHSA-73wf-gq98-2v4g"},{"rule_id":"osv/GHSA-c83g-rgw3-j3cx","severity":"high","message":"browserslist@4.24.4 (npm) is affected by GHSA-c83g-rgw3-j3cx","path":"frontend/package-lock.json","line":null,"fingerprint":"browserslist@4.24.4 (npm):GHSA-c83g-rgw3-j3cx"},{"rule_id":"osv/GHSA-hmw2-7cc7-3qxx","severity":"high","message":"form-data@4.0.2 (npm) is affected by GHSA-hmw2-7cc7-3qxx","path":"frontend/package-lock.json","line":null,"fingerprint":"form-data@4.0.2 (npm):GHSA-hmw2-7cc7-3qxx"},{"rule_id":"osv/GHSA-5j98-mcp5-4vw2","severity":"high","message":"glob@10.4.5 (npm) is affected by GHSA-5j98-mcp5-4vw2","path":"frontend/package-lock.json","line":null,"fingerprint":"glob@10.4.5 (npm):GHSA-5j98-mcp5-4vw2"},{"rule_id":"osv/GHSA-v56q-mh7h-f735","severity":"high","message":"immutable@5.1.1 (npm) is affected by GHSA-v56q-mh7h-f735","path":"frontend/package-lock.json","line":null,"fingerprint":"immutable@5.1.1 (npm):GHSA-v56q-mh7h-f735"},{"rule_id":"osv/GHSA-xvcm-6775-5m9r","severity":"high","message":"immutable@5.1.1 (npm) is affected by GHSA-xvcm-6775-5m9r","path":"frontend/package-lock.json","line":null,"fingerprint":"immutable@5.1.1 (npm):GHSA-xvcm-6775-5m9r"},{"rule_id":"osv/GHSA-23c5-xmqv-rm74","severity":"high","message":"minimatch@9.0.5 (npm) is affected by GHSA-23c5-xmqv-rm74","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@9.0.5 (npm):GHSA-23c5-xmqv-rm74"},{"rule_id":"osv/GHSA-3ppc-4f35-3m26","severity":"high","message":"minimatch@9.0.5 (npm) is affected by GHSA-3ppc-4f35-3m26","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@9.0.5 (npm):GHSA-3ppc-4f35-3m26"},{"rule_id":"osv/GHSA-7r86-cg39-jmmj","severity":"high","message":"minimatch@9.0.5 (npm) is affected by GHSA-7r86-cg39-jmmj","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@9.0.5 (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-28wg-ghj8-5hjv","severity":"high","message":"nanoid@5.1.5 (npm) is affected by GHSA-28wg-ghj8-5hjv","path":"frontend/package-lock.json","line":null,"fingerprint":"nanoid@5.1.5 (npm):GHSA-28wg-ghj8-5hjv"},{"rule_id":"osv/GHSA-2v37-7h3g-55p8","severity":"high","message":"nanoid@5.1.5 (npm) is affected by GHSA-2v37-7h3g-55p8","path":"frontend/package-lock.json","line":null,"fingerprint":"nanoid@5.1.5 (npm):GHSA-2v37-7h3g-55p8"},{"rule_id":"osv/GHSA-xwg4-73v4-xw9w","severity":"high","message":"nanoid@5.1.5 (npm) is affected by GHSA-xwg4-73v4-xw9w","path":"frontend/package-lock.json","line":null,"fingerprint":"nanoid@5.1.5 (npm):GHSA-xwg4-73v4-xw9w"},{"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.2 (npm) is affected by GHSA-c2c7-rcm5-vvqj","path":"frontend/package-lock.json","line":null,"fingerprint":"picomatch@4.0.2 (npm):GHSA-c2c7-rcm5-vvqj"},{"rule_id":"osv/GHSA-6g55-p6wh-862q","severity":"high","message":"postcss@8.5.3 (npm) is affected by GHSA-6g55-p6wh-862q","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.3 (npm):GHSA-6g55-p6wh-862q"},{"rule_id":"osv/GHSA-r28c-9q8g-f849","severity":"high","message":"postcss@8.5.3 (npm) is affected by GHSA-r28c-9q8g-f849","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.3 (npm):GHSA-r28c-9q8g-f849"},{"rule_id":"osv/GHSA-mw96-cpmx-2vgc","severity":"high","message":"rollup@4.39.0 (npm) is affected by GHSA-mw96-cpmx-2vgc","path":"frontend/package-lock.json","line":null,"fingerprint":"rollup@4.39.0 (npm):GHSA-mw96-cpmx-2vgc"},{"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-587h-7wmj-h5pm","severity":"high","message":"vite@5.4.18 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-r6ph-v2qm-q3c2","severity":"high","message":"cryptography@44.0.2 (PyPI) is affected by PYSEC-2026-2141, GHSA-r6ph-v2qm-q3c2","path":"poetry.lock","line":null,"fingerprint":"cryptography@44.0.2 (PyPI):GHSA-r6ph-v2qm-q3c2"},{"rule_id":"osv/GHSA-g6cj-pr64-35w5","severity":"high","message":"cryptography@44.0.2 (PyPI) is affected by PYSEC-2026-3552, GHSA-g6cj-pr64-35w5","path":"poetry.lock","line":null,"fingerprint":"cryptography@44.0.2 (PyPI):GHSA-g6cj-pr64-35w5"},{"rule_id":"osv/GHSA-jwv3-5hgf-82ww","severity":"high","message":"cryptography@44.0.2 (PyPI) is affected by PYSEC-2026-3553, GHSA-jwv3-5hgf-82ww","path":"poetry.lock","line":null,"fingerprint":"cryptography@44.0.2 (PyPI):GHSA-jwv3-5hgf-82ww"},{"rule_id":"osv/GHSA-537c-gmf6-5ccf","severity":"high","message":"cryptography@44.0.2 (PyPI) is affected by GHSA-537c-gmf6-5ccf","path":"poetry.lock","line":null,"fingerprint":"cryptography@44.0.2 (PyPI):GHSA-537c-gmf6-5ccf"},{"rule_id":"osv/GHSA-45c3-73f7-pv4m","severity":"high","message":"dnspython@2.7.0 (PyPI) is affected by GHSA-45c3-73f7-pv4m","path":"poetry.lock","line":null,"fingerprint":"dnspython@2.7.0 (PyPI):GHSA-45c3-73f7-pv4m"},{"rule_id":"osv/GHSA-vvf4-9x63-8xvv","severity":"high","message":"dnspython@2.7.0 (PyPI) is affected by GHSA-vvf4-9x63-8xvv","path":"poetry.lock","line":null,"fingerprint":"dnspython@2.7.0 (PyPI):GHSA-vvf4-9x63-8xvv"},{"rule_id":"osv/GHSA-wj6h-64fc-37mp","severity":"high","message":"ecdsa@0.19.1 (PyPI) is affected by PYSEC-2026-1325, GHSA-wj6h-64fc-37mp","path":"poetry.lock","line":null,"fingerprint":"ecdsa@0.19.1 (PyPI):GHSA-wj6h-64fc-37mp"},{"rule_id":"osv/GHSA-rpm5-65cw-6hj4","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-2160, GHSA-rpm5-65cw-6hj4","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-rpm5-65cw-6hj4"},{"rule_id":"osv/GHSA-7545-fcxq-7j24","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-2162, GHSA-7545-fcxq-7j24","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-7545-fcxq-7j24"},{"rule_id":"osv/GHSA-v87r-6q3f-2j67","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-2163, GHSA-v87r-6q3f-2j67","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-v87r-6q3f-2j67"},{"rule_id":"osv/GHSA-jm78-9fvv-mhgr","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3783, GHSA-jm78-9fvv-mhgr","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-jm78-9fvv-mhgr"},{"rule_id":"osv/GHSA-hmq2-w58f-27jc","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3784, GHSA-hmq2-w58f-27jc","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-hmq2-w58f-27jc"},{"rule_id":"osv/GHSA-7833-fr7j-v32q","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3785, GHSA-7833-fr7j-v32q","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-7833-fr7j-v32q"},{"rule_id":"osv/GHSA-8mcc-hrx5-hvxc","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3787, GHSA-8mcc-hrx5-hvxc","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-8mcc-hrx5-hvxc"},{"rule_id":"osv/GHSA-5xxx-qhh7-9287","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3788, GHSA-5xxx-qhh7-9287","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-5xxx-qhh7-9287"},{"rule_id":"osv/GHSA-2f96-g7mh-g2hx","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3836, GHSA-2f96-g7mh-g2hx","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-2f96-g7mh-g2hx"},{"rule_id":"osv/GHSA-4gmw-gg2m-w46p","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3838, GHSA-4gmw-gg2m-w46p","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-4gmw-gg2m-w46p"},{"rule_id":"osv/GHSA-956x-8gvw-wg5v","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3839, GHSA-956x-8gvw-wg5v","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-956x-8gvw-wg5v"},{"rule_id":"osv/GHSA-9rj7-rf2p-w77r","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3840, GHSA-9rj7-rf2p-w77r","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-9rj7-rf2p-w77r"},{"rule_id":"osv/GHSA-rwj8-pgh3-r573","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3842, GHSA-rwj8-pgh3-r573","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-rwj8-pgh3-r573"},{"rule_id":"osv/GHSA-wvpp-8hx9-p66j","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3843, GHSA-wvpp-8hx9-p66j","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-wvpp-8hx9-p66j"},{"rule_id":"osv/GHSA-539m-9xh6-q6rr","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3948, GHSA-539m-9xh6-q6rr","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-539m-9xh6-q6rr"},{"rule_id":"osv/GHSA-3f7w-8rr8-f37f","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3949, GHSA-3f7w-8rr8-f37f","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-3f7w-8rr8-f37f"},{"rule_id":"osv/GHSA-94p4-4cq8-9g67","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3951, GHSA-94p4-4cq8-9g67","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-94p4-4cq8-9g67"},{"rule_id":"osv/GHSA-6p8h-3wgx-97gf","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3952, GHSA-6p8h-3wgx-97gf","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-6p8h-3wgx-97gf"},{"rule_id":"osv/GHSA-r9mr-m37c-5fr3","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3953, GHSA-r9mr-m37c-5fr3","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-r9mr-m37c-5fr3"},{"rule_id":"osv/GHSA-mv93-w799-cj2w","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3980, GHSA-mv93-w799-cj2w","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-mv93-w799-cj2w"},{"rule_id":"osv/GHSA-3rp5-jjmw-4wv2","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3981, GHSA-3rp5-jjmw-4wv2","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-3rp5-jjmw-4wv2"},{"rule_id":"osv/GHSA-239g-whfq-7xj9","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3982, GHSA-239g-whfq-7xj9","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-239g-whfq-7xj9"},{"rule_id":"osv/GHSA-g5vv-9gxw-82hx","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3984, GHSA-g5vv-9gxw-82hx","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-g5vv-9gxw-82hx"},{"rule_id":"osv/GHSA-fjr4-x663-mwxc","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3995, GHSA-fjr4-x663-mwxc","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-fjr4-x663-mwxc"},{"rule_id":"osv/GHSA-23mf-xhv8-69c2","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-23mf-xhv8-69c2","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-23mf-xhv8-69c2"},{"rule_id":"osv/GHSA-83vg-56qc-22m7","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-83vg-56qc-22m7","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-83vg-56qc-22m7"},{"rule_id":"osv/GHSA-f9j4-qggq-h239","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-f9j4-qggq-h239","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-f9j4-qggq-h239"},{"rule_id":"osv/GHSA-m64x-33q8-m5h7","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-m64x-33q8-m5h7","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-m64x-33q8-m5h7"},{"rule_id":"osv/GHSA-w8jc-g24h-crhw","severity":"high","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-w8jc-g24h-crhw","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-w8jc-g24h-crhw"},{"rule_id":"osv/GHSA-2h4p-vjrc-8xpq","severity":"high","message":"mako@1.3.9 (PyPI) is affected by PYSEC-2026-2617, GHSA-2h4p-vjrc-8xpq","path":"poetry.lock","line":null,"fingerprint":"mako@1.3.9 (PyPI):GHSA-2h4p-vjrc-8xpq"},{"rule_id":"osv/GHSA-v92g-xgxw-vvmm","severity":"high","message":"mako@1.3.9 (PyPI) is affected by PYSEC-2026-88, GHSA-v92g-xgxw-vvmm","path":"poetry.lock","line":null,"fingerprint":"mako@1.3.9 (PyPI):GHSA-v92g-xgxw-vvmm"},{"rule_id":"osv/GHSA-jr27-m4p2-rc6r","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by PYSEC-2026-2263, GHSA-jr27-m4p2-rc6r","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-jr27-m4p2-rc6r"},{"rule_id":"osv/GHSA-m4p7-r5rc-7g4j","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by PYSEC-2026-3455, GHSA-m4p7-r5rc-7g4j","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-m4p7-r5rc-7g4j"},{"rule_id":"osv/GHSA-8ppf-4f7h-5ppj","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by PYSEC-2026-3456, GHSA-8ppf-4f7h-5ppj","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-8ppf-4f7h-5ppj"},{"rule_id":"osv/GHSA-hm4w-wwcw-mr6r","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by PYSEC-2026-3457, GHSA-hm4w-wwcw-mr6r","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-hm4w-wwcw-mr6r"},{"rule_id":"osv/GHSA-2qm8-x737-gmw5","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by GHSA-2qm8-x737-gmw5","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-2qm8-x737-gmw5"},{"rule_id":"osv/GHSA-9m75-vc3g-4x39","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by GHSA-9m75-vc3g-4x39","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-9m75-vc3g-4x39"},{"rule_id":"osv/GHSA-fm9c-5rcf-2q5p","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by GHSA-fm9c-5rcf-2q5p","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-fm9c-5rcf-2q5p"},{"rule_id":"osv/GHSA-mm57-4v3p-rchx","severity":"high","message":"pyasn1@0.4.8 (PyPI) is affected by GHSA-mm57-4v3p-rchx","path":"poetry.lock","line":null,"fingerprint":"pyasn1@0.4.8 (PyPI):GHSA-mm57-4v3p-rchx"},{"rule_id":"osv/GHSA-wp53-j4wj-2cfg","severity":"high","message":"python-multipart@0.0.20 (PyPI) is affected by PYSEC-2026-1852, GHSA-wp53-j4wj-2cfg","path":"poetry.lock","line":null,"fingerprint":"python-multipart@0.0.20 (PyPI):GHSA-wp53-j4wj-2cfg"},{"rule_id":"osv/GHSA-5rvq-cxj2-64vf","severity":"high","message":"python-multipart@0.0.20 (PyPI) is affected by PYSEC-2026-3036, GHSA-5rvq-cxj2-64vf","path":"poetry.lock","line":null,"fingerprint":"python-multipart@0.0.20 (PyPI):GHSA-5rvq-cxj2-64vf"},{"rule_id":"osv/GHSA-pp6c-gr5w-3c5g","severity":"high","message":"python-multipart@0.0.20 (PyPI) is affected by PYSEC-2026-3039, GHSA-pp6c-gr5w-3c5g","path":"poetry.lock","line":null,"fingerprint":"python-multipart@0.0.20 (PyPI):GHSA-pp6c-gr5w-3c5g"},{"rule_id":"osv/GHSA-7f5h-v6xp-fcq8","severity":"high","message":"starlette@0.46.1 (PyPI) is affected by PYSEC-2026-1942, GHSA-7f5h-v6xp-fcq8","path":"poetry.lock","line":null,"fingerprint":"starlette@0.46.1 (PyPI):GHSA-7f5h-v6xp-fcq8"},{"rule_id":"osv/GHSA-wqp7-x3pw-xc5r","severity":"high","message":"starlette@0.46.1 (PyPI) is affected by PYSEC-2026-2281, GHSA-wqp7-x3pw-xc5r","path":"poetry.lock","line":null,"fingerprint":"starlette@0.46.1 (PyPI):GHSA-wqp7-x3pw-xc5r"},{"rule_id":"osv/GHSA-82w8-qh3p-5jfq","severity":"high","message":"starlette@0.46.1 (PyPI) is affected by PYSEC-2026-249, GHSA-82w8-qh3p-5jfq","path":"poetry.lock","line":null,"fingerprint":"starlette@0.46.1 (PyPI):GHSA-82w8-qh3p-5jfq"},{"rule_id":"osv/GHSA-qccp-gfcp-xxvc","severity":"high","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-141, GHSA-qccp-gfcp-xxvc","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-qccp-gfcp-xxvc"},{"rule_id":"osv/GHSA-2xpw-w6gg-jr37","severity":"high","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1994, GHSA-2xpw-w6gg-jr37","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-2xpw-w6gg-jr37"},{"rule_id":"osv/GHSA-38jv-5279-wg99","severity":"high","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1996, GHSA-38jv-5279-wg99","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-38jv-5279-wg99"},{"rule_id":"osv/GHSA-gm62-xv2j-4w53","severity":"high","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1998, GHSA-gm62-xv2j-4w53","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-gm62-xv2j-4w53"},{"rule_id":"osv/GHSA-8988-9cw3-xx77","severity":"high","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-4175, GHSA-8988-9cw3-xx77","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-8988-9cw3-xx77"},{"rule_id":"osv/GHSA-vxq7-64xx-v4gw","severity":"high","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-4177, GHSA-vxq7-64xx-v4gw","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-vxq7-64xx-v4gw"},{"rule_id":"osv/GHSA-3p68-rc4w-qgx5","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-3p68-rc4w-qgx5","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-3p68-rc4w-qgx5"},{"rule_id":"osv/GHSA-3w6x-2g7m-8v23","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-3w6x-2g7m-8v23","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-3w6x-2g7m-8v23"},{"rule_id":"osv/GHSA-42h9-826w-cgv3","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-42h9-826w-cgv3","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-42h9-826w-cgv3"},{"rule_id":"osv/GHSA-445q-vr5w-6q77","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-445q-vr5w-6q77","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-445q-vr5w-6q77"},{"rule_id":"osv/GHSA-5c9x-8gcm-mpgx","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-5c9x-8gcm-mpgx","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-5c9x-8gcm-mpgx"},{"rule_id":"osv/GHSA-7q8q-rj6j-mhjq","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-7q8q-rj6j-mhjq","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-7q8q-rj6j-mhjq"},{"rule_id":"osv/GHSA-898c-q2cr-xwhg","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-898c-q2cr-xwhg","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-898c-q2cr-xwhg"},{"rule_id":"osv/GHSA-9fr6-4gfg-395g","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-9fr6-4gfg-395g","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-9fr6-4gfg-395g"},{"rule_id":"osv/GHSA-fvcv-3m26-pcqx","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-fvcv-3m26-pcqx","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-fvcv-3m26-pcqx"},{"rule_id":"osv/GHSA-j8rh-479h-cp32","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-j8rh-479h-cp32","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-j8rh-479h-cp32"},{"rule_id":"osv/GHSA-jqh4-m9w3-8hp9","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-jqh4-m9w3-8hp9","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-jqh4-m9w3-8hp9"},{"rule_id":"osv/GHSA-m7pr-hjqh-92cm","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-m7pr-hjqh-92cm","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-m7pr-hjqh-92cm"},{"rule_id":"osv/GHSA-mmx7-hfxf-jppx","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-mmx7-hfxf-jppx","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-mmx7-hfxf-jppx"},{"rule_id":"osv/GHSA-pmv8-rq9r-6j72","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-pmv8-rq9r-6j72","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-pmv8-rq9r-6j72"},{"rule_id":"osv/GHSA-vf2m-468p-8v99","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-vf2m-468p-8v99","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-vf2m-468p-8v99"},{"rule_id":"osv/GHSA-vh66-26gq-q6x8","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-vh66-26gq-q6x8","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-vh66-26gq-q6x8"},{"rule_id":"osv/GHSA-w9j2-pvgh-6h63","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-w9j2-pvgh-6h63","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-w9j2-pvgh-6h63"},{"rule_id":"osv/GHSA-xx6v-rp6x-q39c","severity":"medium","message":"axios@1.8.4 (npm) is affected by GHSA-xx6v-rp6x-q39c","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-xx6v-rp6x-q39c"},{"rule_id":"osv/GHSA-f886-m6hf-6m8v","severity":"medium","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-f886-m6hf-6m8v","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-f886-m6hf-6m8v"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-67mh-4wv8-2f99","severity":"medium","message":"esbuild@0.21.5 (npm) is affected by GHSA-67mh-4wv8-2f99","path":"frontend/package-lock.json","line":null,"fingerprint":"esbuild@0.21.5 (npm):GHSA-67mh-4wv8-2f99"},{"rule_id":"osv/GHSA-r4q5-vmmm-2653","severity":"medium","message":"follow-redirects@1.15.9 (npm) is affected by GHSA-r4q5-vmmm-2653","path":"frontend/package-lock.json","line":null,"fingerprint":"follow-redirects@1.15.9 (npm):GHSA-r4q5-vmmm-2653"},{"rule_id":"osv/GHSA-3g3m-2fjr-6pw4","severity":"medium","message":"glob@10.4.5 (npm) is affected by GHSA-3g3m-2fjr-6pw4","path":"frontend/package-lock.json","line":null,"fingerprint":"glob@10.4.5 (npm):GHSA-3g3m-2fjr-6pw4"},{"rule_id":"osv/GHSA-g3hv-75wg-m249","severity":"medium","message":"minimatch@9.0.5 (npm) is affected by GHSA-g3hv-75wg-m249","path":"frontend/package-lock.json","line":null,"fingerprint":"minimatch@9.0.5 (npm):GHSA-g3hv-75wg-m249"},{"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.2 (npm) is affected by GHSA-3v7f-55p6-f55p","path":"frontend/package-lock.json","line":null,"fingerprint":"picomatch@4.0.2 (npm):GHSA-3v7f-55p6-f55p"},{"rule_id":"osv/GHSA-fxqj-rqcc-2cmp","severity":"medium","message":"postcss@8.5.3 (npm) is affected by GHSA-fxqj-rqcc-2cmp","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.3 (npm):GHSA-fxqj-rqcc-2cmp"},{"rule_id":"osv/GHSA-qx2v-qp2m-jg93","severity":"medium","message":"postcss@8.5.3 (npm) is affected by GHSA-qx2v-qp2m-jg93","path":"frontend/package-lock.json","line":null,"fingerprint":"postcss@8.5.3 (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-4w7w-66w2-5vf9","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-4w7w-66w2-5vf9","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-4w7w-66w2-5vf9"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-859w-5945-r5v3","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-859w-5945-r5v3","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-859w-5945-r5v3"},{"rule_id":"osv/GHSA-93m4-6634-74q7","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-93m4-6634-74q7","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-93m4-6634-74q7"},{"rule_id":"osv/GHSA-fx2h-pf6j-xcff","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-fx2h-pf6j-xcff","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-fx2h-pf6j-xcff"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-rq7h-c2jc-7f22","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-rq7h-c2jc-7f22","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-rq7h-c2jc-7f22"},{"rule_id":"osv/GHSA-v6wh-96g9-6wx3","severity":"medium","message":"vite@5.4.18 (npm) is affected by GHSA-v6wh-96g9-6wx3","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-v6wh-96g9-6wx3"},{"rule_id":"osv/GHSA-48c2-rrv3-qjmp","severity":"medium","message":"yaml@2.7.1 (npm) is affected by GHSA-48c2-rrv3-qjmp","path":"frontend/package-lock.json","line":null,"fingerprint":"yaml@2.7.1 (npm):GHSA-48c2-rrv3-qjmp"},{"rule_id":"osv/GHSA-5p39-cfhj-2xmp","severity":"medium","message":"anyio@4.9.0 (PyPI) is affected by PYSEC-2026-4024, GHSA-5p39-cfhj-2xmp","path":"poetry.lock","line":null,"fingerprint":"anyio@4.9.0 (PyPI):GHSA-5p39-cfhj-2xmp"},{"rule_id":"osv/GHSA-m959-cc7f-wv43","severity":"medium","message":"cryptography@44.0.2 (PyPI) is affected by PYSEC-2026-35, GHSA-m959-cc7f-wv43","path":"poetry.lock","line":null,"fingerprint":"cryptography@44.0.2 (PyPI):GHSA-m959-cc7f-wv43"},{"rule_id":"osv/PYSEC-2026-3554","severity":"medium","message":"cryptography@44.0.2 (PyPI) is affected by PYSEC-2026-3554","path":"poetry.lock","line":null,"fingerprint":"cryptography@44.0.2 (PyPI):PYSEC-2026-3554"},{"rule_id":"osv/GHSA-9f5j-8jwj-x28g","severity":"medium","message":"ecdsa@0.19.1 (PyPI) is affected by PYSEC-2026-2467, GHSA-9f5j-8jwj-x28g","path":"poetry.lock","line":null,"fingerprint":"ecdsa@0.19.1 (PyPI):GHSA-9f5j-8jwj-x28g"},{"rule_id":"osv/GHSA-3wxw-xv34-2frg","severity":"medium","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3837, GHSA-3wxw-xv34-2frg","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-3wxw-xv34-2frg"},{"rule_id":"osv/GHSA-hh9p-6wh2-4mfc","severity":"medium","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3841, GHSA-hh9p-6wh2-4mfc","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-hh9p-6wh2-4mfc"},{"rule_id":"osv/GHSA-p538-c434-8v24","severity":"medium","message":"gitpython@3.1.44 (PyPI) is affected by PYSEC-2026-3950, GHSA-p538-c434-8v24","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-p538-c434-8v24"},{"rule_id":"osv/GHSA-59cr-6r3x-644w","severity":"medium","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-59cr-6r3x-644w","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-59cr-6r3x-644w"},{"rule_id":"osv/GHSA-fx3j-rwgx-fr94","severity":"medium","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-fx3j-rwgx-fr94","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-fx3j-rwgx-fr94"},{"rule_id":"osv/GHSA-gq48-pqfc-9p58","severity":"medium","message":"gitpython@3.1.44 (PyPI) is affected by GHSA-gq48-pqfc-9p58","path":"poetry.lock","line":null,"fingerprint":"gitpython@3.1.44 (PyPI):GHSA-gq48-pqfc-9p58"},{"rule_id":"osv/GHSA-65pc-fj4g-8rjx","severity":"medium","message":"idna@3.10 (PyPI) is affected by PYSEC-2026-215, GHSA-65pc-fj4g-8rjx","path":"poetry.lock","line":null,"fingerprint":"idna@3.10 (PyPI):GHSA-65pc-fj4g-8rjx"},{"rule_id":"osv/GHSA-5639-2j2p-m4mx","severity":"medium","message":"mako@1.3.9 (PyPI) is affected by PYSEC-2026-4243, GHSA-5639-2j2p-m4mx","path":"poetry.lock","line":null,"fingerprint":"mako@1.3.9 (PyPI):GHSA-5639-2j2p-m4mx"},{"rule_id":"osv/GHSA-mrfv-m5wm-5w6w","severity":"medium","message":"pynacl@1.5.0 (PyPI) is affected by PYSEC-2026-3002, GHSA-mrfv-m5wm-5w6w","path":"poetry.lock","line":null,"fingerprint":"pynacl@1.5.0 (PyPI):GHSA-mrfv-m5wm-5w6w"},{"rule_id":"osv/GHSA-6w46-j5rx-g56g","severity":"medium","message":"pytest@8.3.5 (PyPI) is affected by PYSEC-2026-1845, GHSA-6w46-j5rx-g56g","path":"poetry.lock","line":null,"fingerprint":"pytest@8.3.5 (PyPI):GHSA-6w46-j5rx-g56g"},{"rule_id":"osv/GHSA-mf9w-mj56-hr94","severity":"medium","message":"python-dotenv@1.1.0 (PyPI) is affected by PYSEC-2026-2270, GHSA-mf9w-mj56-hr94","path":"poetry.lock","line":null,"fingerprint":"python-dotenv@1.1.0 (PyPI):GHSA-mf9w-mj56-hr94"},{"rule_id":"osv/GHSA-mj87-hwqh-73pj","severity":"medium","message":"python-multipart@0.0.20 (PyPI) is affected by PYSEC-2026-3038, GHSA-mj87-hwqh-73pj","path":"poetry.lock","line":null,"fingerprint":"python-multipart@0.0.20 (PyPI):GHSA-mj87-hwqh-73pj"},{"rule_id":"osv/GHSA-9hjg-9r4m-mvj7","severity":"medium","message":"requests@2.32.3 (PyPI) is affected by PYSEC-2026-1872, GHSA-9hjg-9r4m-mvj7","path":"poetry.lock","line":null,"fingerprint":"requests@2.32.3 (PyPI):GHSA-9hjg-9r4m-mvj7"},{"rule_id":"osv/GHSA-gc5v-m9x4-r6x2","severity":"medium","message":"requests@2.32.3 (PyPI) is affected by PYSEC-2026-2275, GHSA-gc5v-m9x4-r6x2","path":"poetry.lock","line":null,"fingerprint":"requests@2.32.3 (PyPI):GHSA-gc5v-m9x4-r6x2"},{"rule_id":"osv/GHSA-86qp-5c8j-p5mr","severity":"medium","message":"starlette@0.46.1 (PyPI) is affected by PYSEC-2026-161, GHSA-86qp-5c8j-p5mr","path":"poetry.lock","line":null,"fingerprint":"starlette@0.46.1 (PyPI):GHSA-86qp-5c8j-p5mr"},{"rule_id":"osv/GHSA-2c2j-9gv5-cj73","severity":"medium","message":"starlette@0.46.1 (PyPI) is affected by PYSEC-2026-1941, GHSA-2c2j-9gv5-cj73","path":"poetry.lock","line":null,"fingerprint":"starlette@0.46.1 (PyPI):GHSA-2c2j-9gv5-cj73"},{"rule_id":"osv/GHSA-x746-7m8f-x49c","severity":"medium","message":"starlette@0.46.1 (PyPI) is affected by PYSEC-2026-2280, GHSA-x746-7m8f-x49c","path":"poetry.lock","line":null,"fingerprint":"starlette@0.46.1 (PyPI):GHSA-x746-7m8f-x49c"},{"rule_id":"osv/GHSA-jp82-jpqv-5vv3","severity":"medium","message":"starlette@0.46.1 (PyPI) is affected by PYSEC-2026-248, GHSA-jp82-jpqv-5vv3","path":"poetry.lock","line":null,"fingerprint":"starlette@0.46.1 (PyPI):GHSA-jp82-jpqv-5vv3"},{"rule_id":"osv/GHSA-48p4-8xcf-vxj5","severity":"medium","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1997, GHSA-48p4-8xcf-vxj5","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-48p4-8xcf-vxj5"},{"rule_id":"osv/GHSA-pq67-6m6q-mj2v","severity":"medium","message":"urllib3@2.4.0 (PyPI) is affected by PYSEC-2026-1999, GHSA-pq67-6m6q-mj2v","path":"poetry.lock","line":null,"fingerprint":"urllib3@2.4.0 (PyPI):GHSA-pq67-6m6q-mj2v"},{"rule_id":"osv/GHSA-4x5r-pxfx-6jf8","severity":"low","message":"@babel/core@7.26.10 (npm) is affected by GHSA-4x5r-pxfx-6jf8","path":"frontend/package-lock.json","line":null,"fingerprint":"@babel/core@7.26.10 (npm):GHSA-4x5r-pxfx-6jf8"},{"rule_id":"osv/GHSA-xhjh-pmcv-23jw","severity":"low","message":"axios@1.8.4 (npm) is affected by GHSA-xhjh-pmcv-23jw","path":"frontend/package-lock.json","line":null,"fingerprint":"axios@1.8.4 (npm):GHSA-xhjh-pmcv-23jw"},{"rule_id":"osv/GHSA-v6h2-p8h4-qcjw","severity":"low","message":"brace-expansion@2.0.1 (npm) is affected by GHSA-v6h2-p8h4-qcjw","path":"frontend/package-lock.json","line":null,"fingerprint":"brace-expansion@2.0.1 (npm):GHSA-v6h2-p8h4-qcjw"},{"rule_id":"osv/GHSA-9jrq-w75r-8gcw","severity":"low","message":"vite@5.4.18 (npm) is affected by GHSA-9jrq-w75r-8gcw","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-9jrq-w75r-8gcw"},{"rule_id":"osv/GHSA-g4jq-h2w9-997c","severity":"low","message":"vite@5.4.18 (npm) is affected by GHSA-g4jq-h2w9-997c","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-g4jq-h2w9-997c"},{"rule_id":"osv/GHSA-jqfw-vq24-v9c3","severity":"low","message":"vite@5.4.18 (npm) is affected by GHSA-jqfw-vq24-v9c3","path":"frontend/package-lock.json","line":null,"fingerprint":"vite@5.4.18 (npm):GHSA-jqfw-vq24-v9c3"},{"rule_id":"osv/GHSA-r374-rxx8-8654","severity":"low","message":"paramiko@3.5.1 (PyPI) is affected by PYSEC-2026-2858, GHSA-r374-rxx8-8654","path":"poetry.lock","line":null,"fingerprint":"paramiko@3.5.1 (PyPI):GHSA-r374-rxx8-8654"},{"rule_id":"osv/GHSA-5239-wwwm-4pmq","severity":"low","message":"pygments@2.19.1 (PyPI) is affected by PYSEC-2026-2987, GHSA-5239-wwwm-4pmq","path":"poetry.lock","line":null,"fingerprint":"pygments@2.19.1 (PyPI):GHSA-5239-wwwm-4pmq"},{"rule_id":"osv/GHSA-6jv3-5f52-599m","severity":"low","message":"python-multipart@0.0.20 (PyPI) is affected by PYSEC-2026-3037, GHSA-6jv3-5f52-599m","path":"poetry.lock","line":null,"fingerprint":"python-multipart@0.0.20 (PyPI):GHSA-6jv3-5f52-599m"},{"rule_id":"osv/GHSA-v9pg-7xvm-68hf","severity":"low","message":"python-multipart@0.0.20 (PyPI) is affected by PYSEC-2026-3040, GHSA-v9pg-7xvm-68hf","path":"poetry.lock","line":null,"fingerprint":"python-multipart@0.0.20 (PyPI):GHSA-v9pg-7xvm-68hf"},{"rule_id":"osv/GHSA-vffw-93wf-4j4q","severity":"low","message":"python-multipart@0.0.20 (PyPI) is affected by PYSEC-2026-3041, GHSA-vffw-93wf-4j4q","path":"poetry.lock","line":null,"fingerprint":"python-multipart@0.0.20 (PyPI):GHSA-vffw-93wf-4j4q"}],"evidence":[],"data":{"ecosystems":["PyPI","npm"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":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":846.0,"function_nloc":8631.0,"mean_ccn":2.95,"p90_ccn":6.0,"complex_functions":14.0,"long_functions":7.0,"many_param_functions":6.0,"risky_nloc_share":0.1959},"findings":[],"evidence":[{"kind":"complex-function","description":"dispatch_tasks in netraven/worker/dispatcher.py: complexity 29, 199 lines","ref":"netraven/worker/dispatcher.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/worker/dispatcher.py#L44","weight":0.48333333333333334},{"kind":"complex-function","description":"bulk_import_devices in netraven/api/routers/devices.py: complexity 25, 81 lines","ref":"netraven/api/routers/devices.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/api/routers/devices.py#L190","weight":0.4166666666666667},{"kind":"complex-function","description":"update_device in netraven/api/routers/devices.py: complexity 25, 79 lines","ref":"netraven/api/routers/devices.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/api/routers/devices.py#L448","weight":0.4166666666666667},{"kind":"complex-function","description":"run_job in netraven/worker/runner.py: complexity 24, 173 lines","ref":"netraven/worker/runner.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/worker/runner.py#L200","weight":0.4},{"kind":"complex-function","description":"get_scheduled_jobs in netraven/api/routers/jobs.py: complexity 23, 33 lines","ref":"netraven/api/routers/jobs.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/api/routers/jobs.py#L165","weight":0.38333333333333336},{"kind":"complex-function","description":"run_command in netraven/worker/backends/netmiko_driver.py: complexity 21, 180 lines","ref":"netraven/worker/backends/netmiko_driver.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/worker/backends/netmiko_driver.py#L40","weight":0.35},{"kind":"complex-function","description":"get_recent_jobs in netraven/api/routers/jobs.py: complexity 20, 34 lines","ref":"netraven/api/routers/jobs.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/api/routers/jobs.py#L204","weight":0.3333333333333333},{"kind":"complex-function","description":"log in netraven/utils/unified_logger.py: complexity 20, 41 lines","ref":"netraven/utils/unified_logger.py","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/netraven/utils/unified_logger.py#L127","weight":0.3333333333333333},{"kind":"complex-function","description":"validateForm in frontend/src/components/JobFormModal.vue: complexity 18, 41 lines","ref":"frontend/src/components/JobFormModal.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/JobFormModal.vue#L298","weight":0.3},{"kind":"complex-function","description":"(anonymous) in frontend/src/pages/Dashboard.vue: complexity 18, 42 lines","ref":"frontend/src/pages/Dashboard.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/pages/Dashboard.vue#L139","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":19181.0,"duplicated_lines":1599.0,"duplicated_share":0.0834,"files":229.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: docker/api/entrypoint.sh:1 and docker/worker/entrypoint.sh:1","ref":"docker/api/entrypoint.sh","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/docker/api/entrypoint.sh#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: docker/scheduler/entrypoint.sh:7 and docker/worker/entrypoint.sh:14","ref":"docker/scheduler/entrypoint.sh","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/docker/scheduler/entrypoint.sh#L7","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/ConnectionLogTable.vue:4 and frontend/src/components/JobLogTable.vue:4","ref":"frontend/src/components/ConnectionLogTable.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/ConnectionLogTable.vue#L4","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/CredentialFormModal.vue:1 and frontend/src/components/TagFormModal.vue:1","ref":"frontend/src/components/CredentialFormModal.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/CredentialFormModal.vue#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/CredentialFormModal.vue:76 and frontend/src/components/DeleteConfirmationModal.vue:16","ref":"frontend/src/components/CredentialFormModal.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/CredentialFormModal.vue#L76","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/CredentialSelector.vue:3 and frontend/src/components/TagSelector.vue:3","ref":"frontend/src/components/CredentialSelector.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/CredentialSelector.vue#L3","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/CredentialSelector.vue:91 and frontend/src/components/FormField.vue:71","ref":"frontend/src/components/CredentialSelector.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/CredentialSelector.vue#L91","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/DeviceTable.vue:1 and frontend/src/components/dashboard/DeviceInventoryTable.vue:1","ref":"frontend/src/components/DeviceTable.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/DeviceTable.vue#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/JobLogTable.vue:58 and frontend/src/pages/JobLogs.vue:170","ref":"frontend/src/components/JobLogTable.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/JobLogTable.vue#L58","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: frontend/src/components/JobMonitor.vue:125 and frontend/src/components/JobMonitor.vue:221","ref":"frontend/src/components/JobMonitor.vue","url":"https://github.com/ccieblogger/netraven/blob/2f641cca30c2238ba78c37dcd2c0fa1bea0189ce/frontend/src/components/JobMonitor.vue#L125","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":84.0,"weighted_findings":50.0,"scanned_lines":24961.0,"category:best-practice":7.0,"category:correctness":50.0,"category:maintainability":27.0},"findings":[{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"netraven/worker/backends/paramiko_driver.py","line":152,"fingerprint":"python.lang.best-practice.arbitrary-sleep:netraven/worker/backends/paramiko_driver.py:152"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_active\" a function or an attribute? If it is a function, you may have meant current_user.is_active() because current_user.is_active is always true.","path":"netraven/api/dependencies.py","line":66,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/dependencies.py:66"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_active\" a function or an attribute? If it is a function, you may have meant user.is_active() because user.is_active is always true.","path":"netraven/api/routers/auth_router.py","line":131,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/auth_router.py:131"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system\" a function or an attribute? If it is a function, you may have meant db_credential.is_system() because db_credential.is_system is always true.","path":"netraven/api/routers/credentials.py","line":187,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/credentials.py:187"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_enabled\" a function or an attribute? If it is a function, you may have meant models.Job.is_enabled() because models.Job.is_enabled is always true.","path":"netraven/api/routers/jobs.py","line":133,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:133"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_enabled\" a function or an attribute? If it is a function, you may have meant models.Job.is_enabled() because models.Job.is_enabled is always true.","path":"netraven/api/routers/jobs.py","line":167,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:167"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_enabled\" a function or an attribute? If it is a function, you may have meant job.is_enabled() because job.is_enabled is always true.","path":"netraven/api/routers/jobs.py","line":198,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:198"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_enabled\" a function or an attribute? If it is a function, you may have meant job.is_enabled() because job.is_enabled is always true.","path":"netraven/api/routers/jobs.py","line":198,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:198"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system_job\" a function or an attribute? If it is a function, you may have meant job.is_system_job() because job.is_system_job is always true.","path":"netraven/api/routers/jobs.py","line":199,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:199"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system_job\" a function or an attribute? If it is a function, you may have meant job.is_system_job() because job.is_system_job is always true.","path":"netraven/api/routers/jobs.py","line":199,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:199"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system_job\" a function or an attribute? If it is a function, you may have meant job.is_system_job() because job.is_system_job is always true.","path":"netraven/api/routers/jobs.py","line":241,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:241"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system_job\" a function or an attribute? If it is a function, you may have meant job.is_system_job() because job.is_system_job is always true.","path":"netraven/api/routers/jobs.py","line":241,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:241"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system_job\" a function or an attribute? If it is a function, you may have meant db_job.is_system_job() because db_job.is_system_job is always true.","path":"netraven/api/routers/jobs.py","line":393,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:393"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system_job\" a function or an attribute? If it is a function, you may have meant db_job.is_system_job() because db_job.is_system_job is always true.","path":"netraven/api/routers/jobs.py","line":447,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/jobs.py:447"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_active\" a function or an attribute? If it is a function, you may have meant models.User.is_active() because models.User.is_active is always true.","path":"netraven/api/routers/users.py","line":117,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/api/routers/users.py:117"},{"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":"netraven/config/loader.py","line":77,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:netraven/config/loader.py:77"},{"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":"netraven/config/loader.py","line":88,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:netraven/config/loader.py:88"},{"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":"netraven/config/logger_config.py","line":17,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:netraven/config/logger_config.py:17"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system\" a function or an attribute? If it is a function, you may have meant new_cred.is_system() because new_cred.is_system is always true.","path":"netraven/db/init_data.py","line":191,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/db/init_data.py:191"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_system_job\" a function or an attribute? If it is a function, you may have meant Job.is_system_job() because Job.is_system_job is always true.","path":"netraven/db/init_data.py","line":328,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/db/init_data.py:328"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_enabled\" a function or an attribute? If it is a function, you may have meant Job.is_enabled() because Job.is_enabled is always true.","path":"netraven/scheduler/job_registration.py","line":66,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/scheduler/job_registration.py:66"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_enabled\" a function or an attribute? If it is a function, you may have meant db_job.is_enabled() because db_job.is_enabled is always true.","path":"netraven/scheduler/job_registration.py","line":110,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/scheduler/job_registration.py:110"},{"rule_id":"opengrep/python.lang.correctness.use-sys-exit","severity":"medium","message":"Detected use of `exit`. Use `sys.exit` over the python shell `exit` built-in. `exit` is a helper for the interactive shell and may not be available on all Python implementations.","path":"netraven/scheduler/scheduler_runner.py","line":75,"fingerprint":"python.lang.correctness.use-sys-exit:netraven/scheduler/scheduler_runner.py:75"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant error_info.is_retriable() because error_info.is_retriable is always true.","path":"netraven/worker/dispatcher.py","line":441,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/dispatcher.py:441"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant error_info.is_retriable() because error_info.is_retriable is always true.","path":"netraven/worker/dispatcher.py","line":500,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/dispatcher.py:500"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant self.is_retriable() because self.is_retriable is always true.","path":"netraven/worker/error_handler.py","line":119,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/error_handler.py:119"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant self.is_retriable() because self.is_retriable is always true.","path":"netraven/worker/error_handler.py","line":136,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/error_handler.py:136"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant self.is_retriable() because self.is_retriable is always true.","path":"netraven/worker/error_handler.py","line":149,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/error_handler.py:149"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant self.is_retriable() because self.is_retriable is always true.","path":"netraven/worker/error_handler.py","line":168,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/error_handler.py:168"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant self.is_retriable() because self.is_retriable is always true.","path":"netraven/worker/error_handler.py","line":189,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/error_handler.py:189"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant self.is_retriable() because self.is_retriable is always true.","path":"netraven/worker/error_handler.py","line":218,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/error_handler.py:218"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_retriable\" a function or an attribute? If it is a function, you may have meant error_info.is_retriable() because error_info.is_retriable is always true.","path":"netraven/worker/error_handler.py","line":387,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:netraven/worker/error_handler.py:387"},{"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":"netraven/worker/job_registry.py","line":26,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:netraven/worker/job_registry.py:26"},{"rule_id":"opengrep/python.lang.correctness.use-sys-exit","severity":"medium","message":"Detected use of `exit`. Use `sys.exit` over the python shell `exit` built-in. `exit` is a helper for the interactive shell and may not be available on all Python implementations.","path":"scripts/seed_dev_data.py","line":16,"fingerprint":"python.lang.correctness.use-sys-exit:scripts/seed_dev_data.py:16"},{"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":"scripts/seed_dev_data.py","line":80,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:scripts/seed_dev_data.py:80"},{"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":"scripts/seed_dev_data.py","line":94,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:scripts/seed_dev_data.py:94"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"docker/api/entrypoint.sh","line":33,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:docker/api/entrypoint.sh:33"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"docker/setup/generate_fernet_key.sh","line":6,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:docker/setup/generate_fernet_key.sh:6"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_api_container.sh","line":64,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_api_container.sh:64"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":53,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:53"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":63,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:63"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":70,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:70"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":70,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:70"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":77,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:77"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":88,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:88"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":98,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:98"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/check_postgres_container.sh","line":98,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/check_postgres_container.sh:98"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":139,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:139"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":140,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:140"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-command-substitution-in-command","severity":"low","message":"The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result.","path":"setup/manage_netraven.sh","line":144,"fingerprint":"bash.lang.correctness.unquoted-command-substitution-in-command:setup/manage_netraven.sh:144"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":148,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:148"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":180,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:180"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":186,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:186"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":235,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:235"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":240,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:240"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":245,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:245"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":250,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:250"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":272,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:272"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":295,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:295"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":307,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:307"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":345,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:345"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":349,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:349"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":392,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:392"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":404,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:404"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":410,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:410"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":415,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:415"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":426,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:426"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":431,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:431"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":438,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:438"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":447,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:447"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":498,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:498"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":499,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:499"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/manage_netraven.sh","line":502,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/manage_netraven.sh:502"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/setup_postgres.sh","line":66,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/setup_postgres.sh:66"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/setup_postgres.sh","line":72,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/setup_postgres.sh:72"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-command-substitution-in-command","severity":"low","message":"The result of command substitution $(...) or `...`, if unquoted, is split on whitespace or other separators specified by the IFS variable. You should surround it with double quotes to avoid splitting the result.","path":"setup/start_netraven.sh","line":130,"fingerprint":"bash.lang.correctness.unquoted-command-substitution-in-command:setup/start_netraven.sh:130"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/start_netraven.sh","line":131,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/start_netraven.sh:131"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/start_netraven.sh","line":136,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/start_netraven.sh:136"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/start_netraven.sh","line":138,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/start_netraven.sh:138"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/start_netraven.sh","line":142,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/start_netraven.sh:142"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/stop_netraven.sh","line":17,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/stop_netraven.sh:17"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/stop_netraven.sh","line":19,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/stop_netraven.sh:19"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/stop_netraven.sh","line":22,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/stop_netraven.sh:22"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"setup/stop_netraven.sh","line":24,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:setup/stop_netraven.sh:24"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.584,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.3621,"test_lines":7288.0,"source_lines":24961.0,"test_ratio":0.292,"ci_files":0.0,"cochange_share":0.0905,"cochange_commits":243.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":115.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":0.0,"escapes":95.0,"escapes_per_kloc":8.564},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":2.0,"other_lines":24959.0,"files_blamed":229.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":84.0,"quality:other_per_kloc":3.366,"security:ai_findings":0.0,"security:ai_per_kloc":0.0,"security:other_findings":5.0,"security:other_per_kloc":0.2},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}