{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.796741Z","repo":{"ref":{"host":"github.com","owner":"kaushik-arunachalam","name":"EV-Charging-Port-Locator"},"default_branch":"main","clone_url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator.git","html_url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator","description":null,"stars":1,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":570,"primary_language":"TypeScript","license_spdx":null,"created_at":"2026-07-04T15:53:44Z","pushed_at":"2026-09-14T14:09:32Z","security_policy_url":null,"distribution":{"owner_created_at":"2025-01-02T12:38:10Z","owner_type":"User","release_assets":[]}},"commit_sha":"53032679af93803f3a6b0cf10d2d87a4bb66d9e4","profile":{"lines_by_language":{"TypeScript":1004},"files_by_category":{"source":20,"config":7,"binary":6,"docs":5,"other":1,"generated":1},"source_lines":1004,"test_lines":0},"pillars":{"ai_provenance":{"score":100.0,"confidence":0.7,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":1.0,"suspected_share":0.0,"estimated_share":1.0,"ai_artifacts":4.0,"flagged_work_units":0.0,"flagged_releases":null,"style_index":1.992},"summary":"Explicit AI attribution on 100% of first-party code added; an estimated 100% including velocity signals."},"quality":{"score":60.4,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":100.0,"duplication":100.0,"lint":68.8,"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; 0% of function code in complex or long functions; 0% duplicated lines. Weakest area: testing."},"security":{"score":65.8,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":91.7,"dependencies":30.1,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 33 known vulnerabilities in 10 dependencies. 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":17.0,"checked":17.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":2.0,"attributed_commits":2.0,"attributed_commit_share":1.0,"effective_loc":1004.0,"attributed_loc":1004.0,"attributed_loc_share":1.0,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 2 attributed commits, 1,004 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"53032679af93803f3a6b0cf10d2d87a4bb66d9e4","url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator/commit/53032679af93803f3a6b0cf10d2d87a4bb66d9e4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"f612351b0d31d1c94f5ab5da9b2ee9fc4bd0182f","url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator/commit/f612351b0d31d1c94f5ab5da9b2ee9fc4bd0182f","weight":0.9}],"data":{"attributed_loc_by_commit":{"f612351b0d31d1c94f5ab5da9b2ee9fc4bd0182f":1004,"53032679af93803f3a6b0cf10d2d87a4bb66d9e4":0},"tools":{"claude-code":{"name":"Claude Code","commits":2,"loc":1004,"first_seen":1789353511,"last_seen":1789353909}},"monthly":{"2026-09":{"loc":1004,"attributed_loc":1004}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":4.0,"workflow_agents":0.0,"tools_configured":2.0,"earliest_adoption":1789353511.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":".claude/launch.json (claude-code configuration)","ref":".claude/launch.json","url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator/blob/53032679af93803f3a6b0cf10d2d87a4bb66d9e4/.claude/launch.json","weight":0.5},{"kind":"ai-artifact","description":".claude/run-web.cmd (claude-code configuration)","ref":".claude/run-web.cmd","url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator/blob/53032679af93803f3a6b0cf10d2d87a4bb66d9e4/.claude/run-web.cmd","weight":0.5},{"kind":"ai-artifact","description":"mobile/CLAUDE.md (claude-code configuration)","ref":"mobile/CLAUDE.md","url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator/blob/53032679af93803f3a6b0cf10d2d87a4bb66d9e4/mobile/CLAUDE.md","weight":0.5},{"kind":"ai-artifact","description":"mobile/AGENTS.md (generic-agent configuration)","ref":"mobile/AGENTS.md","url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator/blob/53032679af93803f3a6b0cf10d2d87a4bb66d9e4/mobile/AGENTS.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":".claude/launch.json","added_at":1789353511},{"tool":"claude-code","path":".claude/run-web.cmd","added_at":1789353511},{"tool":"claude-code","path":"mobile/CLAUDE.md","added_at":1789353511},{"tool":"generic-agent","path":"mobile/AGENTS.md","added_at":1789353511}],"workflows":[],"tools":["claude-code","generic-agent"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":1.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":1004.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":251.0,"median_loc_per_hour":251.0,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":1004.0,"index":1.992,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":1.0,"per_kloc:placeholder":0.996,"files:placeholder":1.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:placeholder","description":"placeholder or demo-only phrasing: // distances/availability are mocked for demo purposes.","ref":"mobile/src/data/mockStations.ts:4","url":"https://github.com/kaushik-arunachalam/EV-Charging-Port-Locator/blob/53032679af93803f3a6b0cf10d2d87a4bb66d9e4/mobile/src/data/mockStations.ts#L4","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":1.0,"findings_high":0.0,"findings_medium":1.0,"findings_low":0.0,"weighted_findings":0.25,"scanned_lines":1004.0,"parse_errors":1.0},"findings":[{"rule_id":"opengrep/javascript.browser.security.insufficient-postmessage-origin-validation","severity":"medium","message":"No validation of origin is done by the addEventListener API. It may be possible to exploit this flaw to perform Cross Origin attacks such as Cross-Site Scripting(XSS). [confidence low]","path":"mobile/src/screens/MapScreen.web.tsx","line":24,"fingerprint":"javascript.browser.security.insufficient-postmessage-origin-validation:mobile/src/screens/MapScreen.web.tsx:24"}],"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":10.0,"vulnerabilities":33.0,"vulns_critical":1.0,"vulns_high":14.0,"vulns_medium":12.0,"vulns_low":6.0,"vulns_unknown":0.0,"penalty":72.0},"findings":[{"rule_id":"osv/GHSA-pqg4-j6r4-53mv","severity":"critical","message":"shell-quote@1.10.0 (npm) is affected by GHSA-pqg4-j6r4-53mv","path":"mobile/package-lock.json","line":null,"fingerprint":"shell-quote@1.10.0 (npm):GHSA-pqg4-j6r4-53mv"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@5.0.9 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"mobile/package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.9 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@5.0.9 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"mobile/package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.9 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-qr28-fpjm-wq7f","severity":"high","message":"decode-uri-component@0.2.2 (npm) is affected by GHSA-qr28-fpjm-wq7f","path":"mobile/package-lock.json","line":null,"fingerprint":"decode-uri-component@0.2.2 (npm):GHSA-qr28-fpjm-wq7f"},{"rule_id":"osv/GHSA-5x38-2vff-x55p","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-5x38-2vff-x55p","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-5x38-2vff-x55p"},{"rule_id":"osv/GHSA-6qrw-m8cv-hcxf","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-6qrw-m8cv-hcxf","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-6qrw-m8cv-hcxf"},{"rule_id":"osv/GHSA-7wch-p9px-956x","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-7wch-p9px-956x","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-7wch-p9px-956x"},{"rule_id":"osv/GHSA-86w9-cpqp-85rv","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-86w9-cpqp-85rv","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-86w9-cpqp-85rv"},{"rule_id":"osv/GHSA-8hrf-8g6f-7xwp","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-8hrf-8g6f-7xwp","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-8hrf-8g6f-7xwp"},{"rule_id":"osv/GHSA-hqq3-7jhf-c5jx","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-hqq3-7jhf-c5jx","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-hqq3-7jhf-c5jx"},{"rule_id":"osv/GHSA-jc66-7q78-782g","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-jc66-7q78-782g","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-jc66-7q78-782g"},{"rule_id":"osv/GHSA-rhr8-3pm8-cq29","severity":"high","message":"node-forge@1.4.0 (npm) is affected by GHSA-rhr8-3pm8-cq29","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-rhr8-3pm8-cq29"},{"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":"mobile/package-lock.json","line":null,"fingerprint":"source-map-js@1.2.1 (npm):GHSA-68fv-2mgg-jv7q"},{"rule_id":"osv/GHSA-w5hq-g745-h8pq","severity":"high","message":"uuid@7.0.3 (npm) is affected by GHSA-w5hq-g745-h8pq","path":"mobile/package-lock.json","line":null,"fingerprint":"uuid@7.0.3 (npm):GHSA-w5hq-g745-h8pq"},{"rule_id":"osv/GHSA-mrhx-c7xc-m3w5","severity":"high","message":"zod@3.25.76 (npm) is affected by GHSA-mrhx-c7xc-m3w5","path":"mobile/package-lock.json","line":null,"fingerprint":"zod@3.25.76 (npm):GHSA-mrhx-c7xc-m3w5"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@5.0.9 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"mobile/package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.9 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-vcc3-ghjq-m6fr","severity":"medium","message":"decode-uri-component@0.2.2 (npm) is affected by GHSA-vcc3-ghjq-m6fr","path":"mobile/package-lock.json","line":null,"fingerprint":"decode-uri-component@0.2.2 (npm):GHSA-vcc3-ghjq-m6fr"},{"rule_id":"osv/GHSA-gcqx-w48m-w2h4","severity":"medium","message":"deepmerge@4.3.1 (npm) is affected by GHSA-gcqx-w48m-w2h4","path":"mobile/package-lock.json","line":null,"fingerprint":"deepmerge@4.3.1 (npm):GHSA-gcqx-w48m-w2h4"},{"rule_id":"osv/GHSA-3g3m-2fjr-6pw4","severity":"medium","message":"glob@13.0.6 (npm) is affected by GHSA-3g3m-2fjr-6pw4","path":"mobile/package-lock.json","line":null,"fingerprint":"glob@13.0.6 (npm):GHSA-3g3m-2fjr-6pw4"},{"rule_id":"osv/GHSA-g3hv-75wg-m249","severity":"medium","message":"minimatch@10.2.6 (npm) is affected by GHSA-g3hv-75wg-m249","path":"mobile/package-lock.json","line":null,"fingerprint":"minimatch@10.2.6 (npm):GHSA-g3hv-75wg-m249"},{"rule_id":"osv/GHSA-525v-9gp9-w22h","severity":"medium","message":"node-forge@1.4.0 (npm) is affected by GHSA-525v-9gp9-w22h","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-525v-9gp9-w22h"},{"rule_id":"osv/GHSA-5cwg-6vw7-rj6p","severity":"medium","message":"node-forge@1.4.0 (npm) is affected by GHSA-5cwg-6vw7-rj6p","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-5cwg-6vw7-rj6p"},{"rule_id":"osv/GHSA-6cv4-p8m7-4r25","severity":"medium","message":"node-forge@1.4.0 (npm) is affected by GHSA-6cv4-p8m7-4r25","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-6cv4-p8m7-4r25"},{"rule_id":"osv/GHSA-6wvx-3r32-xmcg","severity":"medium","message":"node-forge@1.4.0 (npm) is affected by GHSA-6wvx-3r32-xmcg","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-6wvx-3r32-xmcg"},{"rule_id":"osv/GHSA-h46v-rmh6-fq4f","severity":"medium","message":"node-forge@1.4.0 (npm) is affected by GHSA-h46v-rmh6-fq4f","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-h46v-rmh6-fq4f"},{"rule_id":"osv/GHSA-j8rw-jp99-435v","severity":"medium","message":"node-forge@1.4.0 (npm) is affected by GHSA-j8rw-jp99-435v","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-j8rw-jp99-435v"},{"rule_id":"osv/GHSA-w4xr-hqv8-ch44","severity":"medium","message":"node-forge@1.4.0 (npm) is affected by GHSA-w4xr-hqv8-ch44","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-w4xr-hqv8-ch44"},{"rule_id":"osv/GHSA-2vgq-wchc-25w7","severity":"low","message":"node-forge@1.4.0 (npm) is affected by GHSA-2vgq-wchc-25w7","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-2vgq-wchc-25w7"},{"rule_id":"osv/GHSA-4487-j8r4-4g2f","severity":"low","message":"node-forge@1.4.0 (npm) is affected by GHSA-4487-j8r4-4g2f","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-4487-j8r4-4g2f"},{"rule_id":"osv/GHSA-4642-5mcj-2rqw","severity":"low","message":"node-forge@1.4.0 (npm) is affected by GHSA-4642-5mcj-2rqw","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-4642-5mcj-2rqw"},{"rule_id":"osv/GHSA-6889-vf6x-f3g5","severity":"low","message":"node-forge@1.4.0 (npm) is affected by GHSA-6889-vf6x-f3g5","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-6889-vf6x-f3g5"},{"rule_id":"osv/GHSA-9wg5-mj3p-v49q","severity":"low","message":"node-forge@1.4.0 (npm) is affected by GHSA-9wg5-mj3p-v49q","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-9wg5-mj3p-v49q"},{"rule_id":"osv/GHSA-h6cr-wjv9-3cpp","severity":"low","message":"node-forge@1.4.0 (npm) is affected by GHSA-h6cr-wjv9-3cpp","path":"mobile/package-lock.json","line":null,"fingerprint":"node-forge@1.4.0 (npm):GHSA-h6cr-wjv9-3cpp"}],"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":38.0,"function_nloc":381.0,"mean_ccn":1.58,"p90_ccn":2.0,"complex_functions":0.0,"long_functions":0.0,"many_param_functions":0.0,"risky_nloc_share":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":711.0,"duplicated_lines":0.0,"duplicated_share":0.0,"files":20.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":6.0,"weighted_findings":1.5,"scanned_lines":1004.0,"category:correctness":6.0},"findings":[{"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":"mobile/src/map/mapHtml.ts","line":30,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:mobile/src/map/mapHtml.ts:30"},{"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":"mobile/src/map/mapHtml.ts","line":38,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:mobile/src/map/mapHtml.ts:38"},{"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":"mobile/src/map/mapHtml.ts","line":38,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:mobile/src/map/mapHtml.ts:38"},{"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":"mobile/src/map/mapHtml.ts","line":61,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:mobile/src/map/mapHtml.ts:61"},{"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":"mobile/src/map/mapHtml.ts","line":66,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:mobile/src/map/mapHtml.ts:66"},{"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":"mobile/src/map/mapHtml.ts","line":72,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:mobile/src/map/mapHtml.ts:72"}],"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":1004.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":1.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":42.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":2.0,"escapes_per_kloc":1.992},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: mobile/tsconfig.json","ref":"mobile/tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":1004.0,"other_lines":0.0,"files_blamed":20.0,"blame_failures":0.0,"quality:ai_findings":6.0,"quality:ai_per_kloc":5.976,"quality:other_findings":0.0,"security:ai_findings":1.0,"security:ai_per_kloc":0.996,"security:other_findings":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":["unreviewed-ai-risk"]}