{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:08.636895Z","repo":{"ref":{"host":"github.com","owner":"yasirali0","name":"drift"},"default_branch":"main","clone_url":"https://github.com/yasirali0/drift.git","html_url":"https://github.com/yasirali0/drift","description":null,"stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":1393,"primary_language":"TypeScript","license_spdx":null,"created_at":"2026-03-05T02:47:11Z","pushed_at":"2026-03-09T00:23:08Z","security_policy_url":null,"distribution":{"owner_created_at":"2019-11-18T14:53:25Z","owner_type":"User","release_assets":[]}},"commit_sha":"44584a545e3c40c18ba454133cbc5ed1060aa7d6","profile":{"lines_by_language":{"TypeScript":5337},"files_by_category":{"source":33,"config":3,"docs":2,"binary":2,"other":1,"generated":1},"source_lines":5337,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.44,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0,"suspected_share":0.6613,"estimated_share":0.0,"ai_artifacts":1.0,"flagged_work_units":2.0,"flagged_releases":null,"style_index":0.187},"summary":"Weak signals consistent with AI-assisted development."},"quality":{"score":51.1,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":58.3,"duplication":89.7,"lint":79.1,"testing":0.0,"docs":40.0,"type_safety":100.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.00, no CI test run detected; 18% of function code in complex or long functions; 2% duplicated lines. Weakest area: testing."},"security":{"score":61.9,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":62.2,"dependencies":44.9,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 20 known vulnerabilities in 6 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":4.0,"checked":4.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":16.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":5479.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2026-03":{"loc":5479,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":1.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1772685156.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":".github/copilot-instructions.md (github-copilot configuration)","ref":".github/copilot-instructions.md","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/.github/copilot-instructions.md","weight":0.5}],"data":{"artifacts":[{"tool":"github-copilot","path":".github/copilot-instructions.md","added_at":1772685156}],"workflows":[],"tools":["github-copilot"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":4.0,"flagged_units":2.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":5479.0,"flagged_loc":3623.0,"flagged_loc_share":0.6612520532943967,"max_loc_per_hour":765.8234660925725,"median_loc_per_hour":483.9062094892404,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"1,581 lines of first-party code in ~2.1h (766 lines/hour, 2 commit session)","ref":"4fcd532e644738142964c4fe59dede92eb80728d","url":"https://github.com/yasirali0/drift/commit/4fcd532e644738142964c4fe59dede92eb80728d","weight":0.22974703982777175},{"kind":"velocity-burst","description":"2,042 lines of first-party code in ~3.2h (635 lines/hour, 7 commit session)","ref":"f1e6f5d218cf795b176c8d3342cf9dff13091f8b","url":"https://github.com/yasirali0/drift/commit/f1e6f5d218cf795b176c8d3342cf9dff13091f8b","weight":0.19059372569354424}],"data":{"flagged_loc_by_commit":{"926dad5544ef1fee7861d1f045519ceff43cc492":1060,"4fcd532e644738142964c4fe59dede92eb80728d":521,"9626b1f6d068d22d759d846691269d9fac65e6b5":1146,"2147f1059b3ce027bddfedf4efb05d9fd11da5b8":100,"6ef715eb606e430a1fc7ce22eb787ddc5986d7f4":153,"27327b0de0e87331d51cad56d819b916589faa93":354,"76f0a694d41c93103731f306ed69a014d6c71733":78,"719da26ac4dec8f5aca494d2b011cf34b9a69623":96,"f1e6f5d218cf795b176c8d3342cf9dff13091f8b":115},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":5337.0,"index":0.187,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":2.0,"per_kloc:emoji_in_code":0.375,"files:emoji_in_code":1.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":13.0,"findings_high":8.0,"findings_medium":5.0,"findings_low":0.0,"weighted_findings":7.25,"scanned_lines":5337.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/main.ts","line":150,"fingerprint":"javascript.browser.security.insecure-document-method:src/main.ts:150"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `eventsEl.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/main.ts","line":150,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/main.ts:150"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/main.ts","line":226,"fingerprint":"javascript.browser.security.insecure-document-method:src/main.ts:226"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `this.uiEl.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/main.ts","line":226,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/main.ts:226"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/render/InspectorPanel.ts","line":97,"fingerprint":"javascript.browser.security.insecure-document-method:src/render/InspectorPanel.ts:97"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `this.el.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/render/InspectorPanel.ts","line":97,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/render/InspectorPanel.ts:97"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/render/JournalPanel.ts","line":62,"fingerprint":"javascript.browser.security.insecure-document-method:src/render/JournalPanel.ts:62"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `this.el.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"src/render/JournalPanel.ts","line":62,"fingerprint":"javascript.browser.security.insecure-innerhtml:src/render/JournalPanel.ts:62"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"src/main.ts","line":151,"fingerprint":"javascript.lang.security.html-in-template-string:src/main.ts:151"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"src/render/InspectorPanel.ts","line":97,"fingerprint":"javascript.lang.security.html-in-template-string:src/render/InspectorPanel.ts:97"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"src/render/InspectorPanel.ts","line":134,"fingerprint":"javascript.lang.security.html-in-template-string:src/render/InspectorPanel.ts:134"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"src/render/InspectorPanel.ts","line":148,"fingerprint":"javascript.lang.security.html-in-template-string:src/render/InspectorPanel.ts:148"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"src/render/JournalPanel.ts","line":75,"fingerprint":"javascript.lang.security.html-in-template-string:src/render/JournalPanel.ts:75"}],"evidence":[],"data":{"rulesets":["typescript","javascript"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":6.0,"vulnerabilities":20.0,"vulns_critical":0.0,"vulns_high":10.0,"vulns_medium":9.0,"vulns_low":1.0,"vulns_unknown":0.0,"penalty":48.0},"findings":[{"rule_id":"osv/GHSA-px8p-9vwx-vf98","severity":"high","message":"fflate@0.8.2 (npm) is affected by GHSA-px8p-9vwx-vf98","path":"package-lock.json","line":null,"fingerprint":"fflate@0.8.2 (npm):GHSA-px8p-9vwx-vf98"},{"rule_id":"osv/GHSA-28wg-ghj8-5hjv","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-28wg-ghj8-5hjv","path":"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":"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":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-xwg4-73v4-xw9w"},{"rule_id":"osv/GHSA-c2c7-rcm5-vvqj","severity":"high","message":"picomatch@4.0.3 (npm) is affected by GHSA-c2c7-rcm5-vvqj","path":"package-lock.json","line":null,"fingerprint":"picomatch@4.0.3 (npm):GHSA-c2c7-rcm5-vvqj"},{"rule_id":"osv/GHSA-6g55-p6wh-862q","severity":"high","message":"postcss@8.5.8 (npm) is affected by GHSA-6g55-p6wh-862q","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-6g55-p6wh-862q"},{"rule_id":"osv/GHSA-r28c-9q8g-f849","severity":"high","message":"postcss@8.5.8 (npm) is affected by GHSA-r28c-9q8g-f849","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-r28c-9q8g-f849"},{"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":"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@6.4.1 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-p9ff-h696-f583","severity":"high","message":"vite@6.4.1 (npm) is affected by GHSA-p9ff-h696-f583","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-p9ff-h696-f583"},{"rule_id":"osv/GHSA-3v7f-55p6-f55p","severity":"medium","message":"picomatch@4.0.3 (npm) is affected by GHSA-3v7f-55p6-f55p","path":"package-lock.json","line":null,"fingerprint":"picomatch@4.0.3 (npm):GHSA-3v7f-55p6-f55p"},{"rule_id":"osv/GHSA-fxqj-rqcc-2cmp","severity":"medium","message":"postcss@8.5.8 (npm) is affected by GHSA-fxqj-rqcc-2cmp","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-fxqj-rqcc-2cmp"},{"rule_id":"osv/GHSA-qx2v-qp2m-jg93","severity":"medium","message":"postcss@8.5.8 (npm) is affected by GHSA-qx2v-qp2m-jg93","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.8 (npm):GHSA-qx2v-qp2m-jg93"},{"rule_id":"osv/GHSA-4w7w-66w2-5vf9","severity":"medium","message":"vite@6.4.1 (npm) is affected by GHSA-4w7w-66w2-5vf9","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-4w7w-66w2-5vf9"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"vite@6.4.1 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-fx2h-pf6j-xcff","severity":"medium","message":"vite@6.4.1 (npm) is affected by GHSA-fx2h-pf6j-xcff","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-fx2h-pf6j-xcff"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"vite@6.4.1 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-rq7h-c2jc-7f22","severity":"medium","message":"vite@6.4.1 (npm) is affected by GHSA-rq7h-c2jc-7f22","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-rq7h-c2jc-7f22"},{"rule_id":"osv/GHSA-v6wh-96g9-6wx3","severity":"medium","message":"vite@6.4.1 (npm) is affected by GHSA-v6wh-96g9-6wx3","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-v6wh-96g9-6wx3"},{"rule_id":"osv/GHSA-9jrq-w75r-8gcw","severity":"low","message":"vite@6.4.1 (npm) is affected by GHSA-9jrq-w75r-8gcw","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.1 (npm):GHSA-9jrq-w75r-8gcw"}],"evidence":[],"data":{"ecosystems":["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":1.0,"signed_commit_share":0.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":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":241.0,"function_nloc":3765.0,"mean_ccn":3.43,"p90_ccn":8.0,"complex_functions":8.0,"long_functions":2.0,"many_param_functions":1.0,"risky_nloc_share":0.1801},"findings":[],"evidence":[{"kind":"complex-function","description":"update in src/render3d/VegetationMeshes.ts: complexity 39, 121 lines","ref":"src/render3d/VegetationMeshes.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/render3d/VegetationMeshes.ts#L124","weight":0.65},{"kind":"complex-function","description":"check in src/world/EventJournal.ts: complexity 25, 56 lines","ref":"src/world/EventJournal.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/world/EventJournal.ts#L27","weight":0.4166666666666667},{"kind":"complex-function","description":"tick in src/life/Flora.ts: complexity 23, 56 lines","ref":"src/life/Flora.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/life/Flora.ts#L85","weight":0.38333333333333336},{"kind":"complex-function","description":"update in src/audio/AmbientAudio.ts: complexity 22, 41 lines","ref":"src/audio/AmbientAudio.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/audio/AmbientAudio.ts#L233","weight":0.36666666666666664},{"kind":"complex-function","description":"doWander in src/life/Behavior.ts: complexity 22, 96 lines","ref":"src/life/Behavior.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/life/Behavior.ts#L71","weight":0.36666666666666664},{"kind":"complex-function","description":"fastForward in src/persistence/TimeWarp.ts: complexity 18, 84 lines","ref":"src/persistence/TimeWarp.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/persistence/TimeWarp.ts#L14","weight":0.3},{"kind":"complex-function","description":"(anonymous) in src/main.ts: complexity 17, 32 lines","ref":"src/main.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/main.ts#L76","weight":0.2833333333333333},{"kind":"complex-function","description":"getPlantColor in src/render/Colors.ts: complexity 16, 50 lines","ref":"src/render/Colors.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/render/Colors.ts#L17","weight":0.26666666666666666},{"kind":"complex-function","description":"constructor in src/render3d/WaterPlane.ts: complexity 1, 142 lines","ref":"src/render3d/WaterPlane.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/render3d/WaterPlane.ts#L13","weight":0.016666666666666666}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":3863.0,"duplicated_lines":70.0,"duplicated_share":0.0181,"files":33.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src/life/Behavior.ts:394 and src/life/Behavior.ts:418","ref":"src/life/Behavior.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/life/Behavior.ts#L394","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/life/Fauna.ts:53 and src/life/Fauna.ts:110","ref":"src/life/Fauna.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/life/Fauna.ts#L53","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/render3d/SkyLighting.ts:79 and src/render3d/WaterPlane.ts:81","ref":"src/render3d/SkyLighting.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/render3d/SkyLighting.ts#L79","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/world/Geology.ts:48 and src/world/Geology.ts:74","ref":"src/world/Geology.ts","url":"https://github.com/yasirali0/drift/blob/44584a545e3c40c18ba454133cbc5ed1060aa7d6/src/world/Geology.ts#L48","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":17.0,"weighted_findings":5.0,"scanned_lines":5337.0,"category:best-practice":1.0,"category:correctness":16.0},"findings":[{"rule_id":"opengrep/javascript.lang.best-practice.javascript-confirm","severity":"medium","message":"found confirm() call; should this be in production code?","path":"src/main.ts","line":81,"fingerprint":"javascript.lang.best-practice.javascript-confirm:src/main.ts:81"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/main.ts","line":228,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/main.ts:228"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/main.ts","line":230,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/main.ts:230"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/main.ts","line":231,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/main.ts:231"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/main.ts","line":232,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/main.ts:232"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/main.ts","line":233,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/main.ts:233"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/main.ts","line":236,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/main.ts:236"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render/JournalPanel.ts","line":39,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render/JournalPanel.ts:39"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render/JournalPanel.ts","line":39,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render/JournalPanel.ts:39"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/SkyLighting.ts","line":60,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/SkyLighting.ts:60"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/SkyLighting.ts","line":60,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/SkyLighting.ts:60"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/SkyLighting.ts","line":69,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/SkyLighting.ts:69"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/SkyLighting.ts","line":69,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/SkyLighting.ts:69"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/WaterPlane.ts","line":32,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/WaterPlane.ts:32"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/WaterPlane.ts","line":32,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/WaterPlane.ts:32"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/WaterPlane.ts","line":69,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/WaterPlane.ts:69"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"src/render3d/WaterPlane.ts","line":69,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/render3d/WaterPlane.ts:69"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":5337.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":12.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":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":79.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":1.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: tsconfig.json","ref":"tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null}],"flags":[]}