{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "DKR007", "name": "Docker build context has no .dockerignore", "shortDescription": {"text": "Docker build context has no .dockerignore"}, "fullDescription": {"text": "Without .dockerignore, build context can include source history, local env files, dependencies, and generated artifacts."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "medium", "confidence": 0.9, "cwe": "", "owasp": ""}}, {"id": "DKR001", "name": "Docker final stage has no non-root USER", "shortDescription": {"text": "Docker final stage has no non-root USER"}, "fullDescription": {"text": "Docker images run as root unless the image or Dockerfile switches to a non-root user."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "medium", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "CFG006", "name": "[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts.", "shortDescription": {"text": "[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts."}, "fullDescription": {"text": "Add a .gitignore appropriate for your language/framework."}, "properties": {"scanner": "repobility-threat-engine", "category": "practices", "severity": "medium", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "MINED111", "name": "Bare except continues silently", "shortDescription": {"text": "Bare except continues silently"}, "fullDescription": {"text": "Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "medium", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "CORE_LARGE_FILES", "name": "Average file size is 638 lines (recommend <300)", "shortDescription": {"text": "Average file size is 638 lines (recommend <300)"}, "fullDescription": {"text": "Refactor large files by extracting related functions into separate modules. Target files with 300+ lines first. Use the Single Responsibility Principle \u2014 each module should have one clear purpose."}, "properties": {"scanner": "repobility-core", "category": "quality", "severity": "medium", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_CI", "name": "No CI/CD configuration found", "shortDescription": {"text": "No CI/CD configuration found"}, "fullDescription": {"text": "Add a CI/CD pipeline: create .github/workflows/ci.yml for GitHub Actions with steps to lint, test, and build on every push and pull request."}, "properties": {"scanner": "repobility-core", "category": "practices", "severity": "medium", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "MINED049", "name": "[MINED049] Print Pii: Logging password/token/email/ssn directly to stdout.", "shortDescription": {"text": "[MINED049] Print Pii: Logging password/token/email/ssn directly to stdout."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-532 / A09:2021 for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "SEC020", "name": "[SEC020] Secret Printed to Logs: Debug or diagnostic code appears to print a credential-bearing value. This is a frequen", "shortDescription": {"text": "[SEC020] Secret Printed to Logs: Debug or diagnostic code appears to print a credential-bearing value. This is a frequent AI-assisted coding failure: the helper exposes the exact value needed for troubleshooting."}, "fullDescription": {"text": "Log only redacted, hashed, or last-four-style metadata. Rotate any secret that may have reached logs."}, "properties": {"scanner": "repobility-threat-engine", "category": "credential_exposure", "severity": "info", "confidence": 0.15, "cwe": "", "owasp": ""}}, {"id": "MINED053", "name": "[MINED053] Placeholder Default Username: foo@bar.com / john.doe@example.com / admin/admin / changeme \u2014 typical AI placeh", "shortDescription": {"text": "[MINED053] Placeholder Default Username: foo@bar.com / john.doe@example.com / admin/admin / changeme \u2014 typical AI placeholder credentials."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-1392,CWE-798 /  for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "DKR014", "name": "Dockerfile copies the entire context without .dockerignore", "shortDescription": {"text": "Dockerfile copies the entire context without .dockerignore"}, "fullDescription": {"text": "COPY . or ADD . sends the full build context to Docker. Without .dockerignore this can include secrets, git history, and local artifacts."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "high", "confidence": 0.92, "cwe": "", "owasp": ""}}, {"id": "MINED118", "name": "Dockerfile FROM `python:3.11-slim` not pinned by digest", "shortDescription": {"text": "Dockerfile FROM `python:3.11-slim` not pinned by digest"}, "fullDescription": {"text": "`FROM python:3.11-slim` resolves the tag at build time. The registry CAN re-push a different image for the same tag, so every build is potentially different. Production images should pin to `image@sha256:...` for reproducibility + supply-chain integrity."}, "properties": {"scanner": "repobility-supply-chain", "category": "dependency", "severity": "high", "confidence": 0.9, "cwe": "", "owasp": ""}}, {"id": "MINED108", "name": "`self._send_smtp` used but never assigned in __init__", "shortDescription": {"text": "`self._send_smtp` used but never assigned in __init__"}, "fullDescription": {"text": "Method `send_email` of class `PhishingEmailSender` reads `self._send_smtp`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "MINED107", "name": "Missing import: `email` used but not imported", "shortDescription": {"text": "Missing import: `email` used but not imported"}, "fullDescription": {"text": "The file uses `email.something(...)` but never imports `email`. This raises NameError at runtime the first time the line executes."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "critical", "confidence": 1.0, "cwe": "", "owasp": ""}}]}}, "automationDetails": {"id": "repobility/593"}, "properties": {"repository": "yassineaourarh/phishguard-ai", "repoUrl": "https://github.com/yassineaourarh/phishguard-ai.git", "branch": "main"}, "results": [{"ruleId": "DKR007", "level": "warning", "message": {"text": "Docker build context has no .dockerignore"}, "properties": {"repobilityId": 43164, "scanner": "repobility-docker", "fingerprint": "c98378cf8c37e4866e89d6ca06a24b7e8c44654aa34e6e4bf1367c4a4c0c5b44", "category": "docker", "severity": "medium", "confidence": 0.9, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Dockerfile exists but repository root has no .dockerignore.", "evidence": {"rule_id": "DKR007", "scanner": "repobility-docker", "references": ["https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"], "correlation_key": "fp|c98378cf8c37e4866e89d6ca06a24b7e8c44654aa34e6e4bf1367c4a4c0c5b44"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".dockerignore"}, "region": {"startLine": 1}}}]}, {"ruleId": "DKR001", "level": "warning", "message": {"text": "Docker final stage has no non-root USER"}, "properties": {"repobilityId": 43163, "scanner": "repobility-docker", "fingerprint": "33a0700307fec6dd1b5a5b444d0bf37638020b02b69a9403ab5f2cbaa0deb29f", "category": "docker", "severity": "medium", "confidence": 0.82, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "No USER directive was found in the final runtime stage.", "evidence": {"rule_id": "DKR001", "scanner": "repobility-docker", "final_base": "python:3.11-slim", "references": ["https://docs.docker.com/develop/develop-images/dockerfile_best-practices/", "https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html", "https://github.com/hadolint/hadolint"], "correlation_key": "fp|33a0700307fec6dd1b5a5b444d0bf37638020b02b69a9403ab5f2cbaa0deb29f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "CFG006", "level": "warning", "message": {"text": "[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts."}, "properties": {"repobilityId": 43161, "scanner": "repobility-threat-engine", "fingerprint": "c65fc71ce58c37a0e07837c0fe294108b731c43ef16027a2f0971c757bbe9a16", "category": "practices", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "No .gitignore file found in repository root", "evidence": {"reason": "No .gitignore file found in repository root", "rule_id": "CFG006", "scanner": "repobility-threat-engine", "confidence": 1.0, "correlation_key": "repo|practices|cfg006"}}}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43156, "scanner": "repobility-ast-engine", "fingerprint": "b13fb90370d42a15a0d841487871dcc648b39762a6ca4a4120e0b679e3d297f2", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|b13fb90370d42a15a0d841487871dcc648b39762a6ca4a4120e0b679e3d297f2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "setup_colab.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43155, "scanner": "repobility-ast-engine", "fingerprint": "5e14d0b11b91c93d3784eaa439c665255676c037e888c99900746c55eeb8cdb9", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|5e14d0b11b91c93d3784eaa439c665255676c037e888c99900746c55eeb8cdb9"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "setup_colab.py"}, "region": {"startLine": 319}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43154, "scanner": "repobility-ast-engine", "fingerprint": "6928235b42d8473695810048893237258359632111d8a93d618be2605bdf8e31", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|6928235b42d8473695810048893237258359632111d8a93d618be2605bdf8e31"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "setup_colab.py"}, "region": {"startLine": 144}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43153, "scanner": "repobility-ast-engine", "fingerprint": "1bcaf0bafd440004294c900d646ca82e76bc40ab8e7229fbc8a96bae40db3bbf", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|1bcaf0bafd440004294c900d646ca82e76bc40ab8e7229fbc8a96bae40db3bbf"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent.py"}, "region": {"startLine": 434}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43152, "scanner": "repobility-ast-engine", "fingerprint": "94adc6efb0c4bcf30bacfd52f1181f5bc555c1b1e33837631c42a423bd335f02", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|94adc6efb0c4bcf30bacfd52f1181f5bc555c1b1e33837631c42a423bd335f02"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent.py"}, "region": {"startLine": 159}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43151, "scanner": "repobility-ast-engine", "fingerprint": "23c10716f1fd2883a83e5ba43eefa21f50b3b5dc2c112fbe04aa8fac09b25724", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|23c10716f1fd2883a83e5ba43eefa21f50b3b5dc2c112fbe04aa8fac09b25724"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent.py"}, "region": {"startLine": 617}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43150, "scanner": "repobility-ast-engine", "fingerprint": "b0f924bb934a7cbe7852ab33e953845b04a167b44af022932cce62b41a36a79a", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|b0f924bb934a7cbe7852ab33e953845b04a167b44af022932cce62b41a36a79a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 452}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43149, "scanner": "repobility-ast-engine", "fingerprint": "990162ad493cdd9a3afbabc1f1471a99f13b7218c189a8b33179581234c66343", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|990162ad493cdd9a3afbabc1f1471a99f13b7218c189a8b33179581234c66343"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 398}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43148, "scanner": "repobility-ast-engine", "fingerprint": "72eb32f5fc48faff0dc6aa7412e470cc5bd8b556cb2f29cd4189caf56e402e25", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|72eb32f5fc48faff0dc6aa7412e470cc5bd8b556cb2f29cd4189caf56e402e25"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 337}}}]}, {"ruleId": "MINED111", "level": "warning", "message": {"text": "Bare except continues silently"}, "properties": {"repobilityId": 43139, "scanner": "repobility-ast-engine", "fingerprint": "22b838d18737ba27b407240d658c7e10277aac59cf8faf0079a3bba1836c0ac6", "category": "quality", "severity": "medium", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "bare-except-without-pass", "owasp": null, "cwe_ids": [], "languages": ["python"], "observations_count": 21610}, "scanner": "repobility-ast-engine", "correlation_key": "fp|22b838d18737ba27b407240d658c7e10277aac59cf8faf0079a3bba1836c0ac6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 145}}}]}, {"ruleId": "CORE_LARGE_FILES", "level": "warning", "message": {"text": "Average file size is 638 lines (recommend <300)"}, "properties": {"repobilityId": 43120, "scanner": "repobility-core", "fingerprint": "71e74c1384ce8cd010f04e7a317dc3d77344169effdfcb55b0bad544847ca45b", "category": "quality", "severity": "medium", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_LARGE_FILES", "scanner": "repobility-core", "correlation_key": "fp|71e74c1384ce8cd010f04e7a317dc3d77344169effdfcb55b0bad544847ca45b"}}}, {"ruleId": "CORE_NO_CI", "level": "warning", "message": {"text": "No CI/CD configuration found"}, "properties": {"repobilityId": 43119, "scanner": "repobility-core", "fingerprint": "ca5da3551af97272c4f099fc472740148135a15816b81b90bd862e8f91ec66ce", "category": "practices", "severity": "medium", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_CI", "scanner": "repobility-core", "correlation_key": "repo|practices|core_no_ci"}}}, {"ruleId": "MINED049", "level": "none", "message": {"text": "[MINED049] Print Pii: Logging password/token/email/ssn directly to stdout."}, "properties": {"repobilityId": 43160, "scanner": "repobility-threat-engine", "fingerprint": "011578283b36d32899c7514811cce616ef20ed221dbb022ed5843848aa795e20", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "print-pii", "owasp": "A09:2021", "cwe_ids": ["CWE-532"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348015+00:00", "triaged_in_corpus": 12, "observations_count": 676566, "ai_coder_pattern_id": 26}, "scanner": "repobility-threat-engine", "correlation_key": "fp|011578283b36d32899c7514811cce616ef20ed221dbb022ed5843848aa795e20"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "setup_colab.py"}, "region": {"startLine": 143}}}]}, {"ruleId": "SEC020", "level": "none", "message": {"text": "[SEC020] Secret Printed to Logs: Debug or diagnostic code appears to print a credential-bearing value. This is a frequent AI-assisted coding failure: the helper exposes the exact value needed for troubleshooting."}, "properties": {"repobilityId": 43159, "scanner": "repobility-threat-engine", "fingerprint": "05d06df492b5f9aa86933e6d229e807e96695225efab036dffa3d62676bea177", "category": "credential_exposure", "severity": "info", "confidence": 0.15, "triageState": "false_positive", "verdict": "likely_fp", "isResolved": true, "reason": "Log message mentions credential-related metadata but does not print a credential-bearing value", "evidence": {"match": "print(\"\u2705 Cl\u00e9 API r\u00e9cup\u00e9r\u00e9e depuis Colab secrets!\")", "reason": "Log message mentions credential-related metadata but does not print a credential-bearing value", "rule_id": "SEC020", "scanner": "repobility-threat-engine", "confidence": 0.15, "correlation_key": "secret|setup_colab.py|14|print cl api r cup r e depuis colab secrets"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "setup_colab.py"}, "region": {"startLine": 143}}}]}, {"ruleId": "MINED053", "level": "none", "message": {"text": "[MINED053] Placeholder Default Username: foo@bar.com / john.doe@example.com / admin/admin / changeme \u2014 typical AI placeholder credentials."}, "properties": {"repobilityId": 43158, "scanner": "repobility-threat-engine", "fingerprint": "7577582343b32b04f5d8ee07e5fe2386962accf6e539631c229722306cf00ff3", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "placeholder-default-username", "owasp": null, "cwe_ids": ["CWE-1392", "CWE-798"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348025+00:00", "triaged_in_corpus": 10, "observations_count": 456953, "ai_coder_pattern_id": 44}, "scanner": "repobility-threat-engine", "correlation_key": "fp|7577582343b32b04f5d8ee07e5fe2386962accf6e539631c229722306cf00ff3"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "config.py"}, "region": {"startLine": 129}}}]}, {"ruleId": "DKR014", "level": "error", "message": {"text": "Dockerfile copies the entire context without .dockerignore"}, "properties": {"repobilityId": 43162, "scanner": "repobility-docker", "fingerprint": "27e7f836d193341b568f10d1d2275f65a92e1c5e1ca7e9427cbe7cc38d1474f5", "category": "docker", "severity": "high", "confidence": 0.92, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Broad context copy and missing .dockerignore were found together.", "evidence": {"rule_id": "DKR014", "scanner": "repobility-docker", "references": ["https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"], "correlation_key": "fp|27e7f836d193341b568f10d1d2275f65a92e1c5e1ca7e9427cbe7cc38d1474f5"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 16}}}]}, {"ruleId": "MINED118", "level": "error", "message": {"text": "Dockerfile FROM `python:3.11-slim` not pinned by digest"}, "properties": {"repobilityId": 43157, "scanner": "repobility-supply-chain", "fingerprint": "314f029c89fa500a2d320bafd20281e55fb884f69db96fdc3ea74dc6d4630e0d", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "docker-from-unpinned", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["dockerfile"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|314f029c89fa500a2d320bafd20281e55fb884f69db96fdc3ea74dc6d4630e0d"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self._send_smtp` used but never assigned in __init__"}, "properties": {"repobilityId": 43147, "scanner": "repobility-ast-engine", "fingerprint": "bbe56301efe5eaa8ee35efe007a10f475809fc60f1ea777708b0203748486e60", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|bbe56301efe5eaa8ee35efe007a10f475809fc60f1ea777708b0203748486e60"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 531}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self._log_outbox` used but never assigned in __init__"}, "properties": {"repobilityId": 43146, "scanner": "repobility-ast-engine", "fingerprint": "ccdab931dd15158408a9ba00f2b3ad85f8eac93c8980b709ac92637bf2b069eb", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|ccdab931dd15158408a9ba00f2b3ad85f8eac93c8980b709ac92637bf2b069eb"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 524}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self._add_footer` used but never assigned in __init__"}, "properties": {"repobilityId": 43145, "scanner": "repobility-ast-engine", "fingerprint": "45188f58c146b8882288b97119ca2151c9d1e5658779cc93269d8dafd814e34d", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|45188f58c146b8882288b97119ca2151c9d1e5658779cc93269d8dafd814e34d"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 496}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.validate_content` used but never assigned in __init__"}, "properties": {"repobilityId": 43144, "scanner": "repobility-ast-engine", "fingerprint": "ae209770f7d28ab9f19d6fa1139cff0d7cd77a6dde6f9bc8368ef8660066eb94", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|ae209770f7d28ab9f19d6fa1139cff0d7cd77a6dde6f9bc8368ef8660066eb94"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 239}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.validate_recipient` used but never assigned in __init__"}, "properties": {"repobilityId": 43143, "scanner": "repobility-ast-engine", "fingerprint": "b8557c586941b557929b1049beb815a2fee5cbaa14d5fa338b710ecdb25b62a6", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|b8557c586941b557929b1049beb815a2fee5cbaa14d5fa338b710ecdb25b62a6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 234}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self._load_allowlist` used but never assigned in __init__"}, "properties": {"repobilityId": 43142, "scanner": "repobility-ast-engine", "fingerprint": "9f495b5ca48515ce10ba14dc027012eb6486912c013bfbc06f6dbb21f29fa597", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|9f495b5ca48515ce10ba14dc027012eb6486912c013bfbc06f6dbb21f29fa597"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 171}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self._load_allowlist` used but never assigned in __init__"}, "properties": {"repobilityId": 43141, "scanner": "repobility-ast-engine", "fingerprint": "39e87e5e4b0ac5a3e239375fabba7d5e84f332daa75e4ca7c0090290da32219e", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|39e87e5e4b0ac5a3e239375fabba7d5e84f332daa75e4ca7c0090290da32219e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 150}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.wfile` used but never assigned in __init__"}, "properties": {"repobilityId": 43138, "scanner": "repobility-ast-engine", "fingerprint": "5183922a4ee547431a0fccebde3699328d74f26a255e22d48a520b4667d45004", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|5183922a4ee547431a0fccebde3699328d74f26a255e22d48a520b4667d45004"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 440}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.end_headers` used but never assigned in __init__"}, "properties": {"repobilityId": 43137, "scanner": "repobility-ast-engine", "fingerprint": "7b0ec35912fed4e18c3aae3089611622aadafee131bd4acc0ebefadc35619e5a", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|7b0ec35912fed4e18c3aae3089611622aadafee131bd4acc0ebefadc35619e5a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 425}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_header` used but never assigned in __init__"}, "properties": {"repobilityId": 43136, "scanner": "repobility-ast-engine", "fingerprint": "2a4a9d8f02c07380c2dea5418eb112a28071424eb87b25d59297b0e802ca0a61", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|2a4a9d8f02c07380c2dea5418eb112a28071424eb87b25d59297b0e802ca0a61"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 424}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_response` used but never assigned in __init__"}, "properties": {"repobilityId": 43135, "scanner": "repobility-ast-engine", "fingerprint": "bcd1c5b1d22e645c5658ec6230ebe7541aa52c796531257d5155cb1cee33f07d", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|bcd1c5b1d22e645c5658ec6230ebe7541aa52c796531257d5155cb1cee33f07d"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 423}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.wfile` used but never assigned in __init__"}, "properties": {"repobilityId": 43134, "scanner": "repobility-ast-engine", "fingerprint": "9de1f91657322a2b916d1079053ce4535f64e42cb4e1bf52d7600d7b9c469673", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|9de1f91657322a2b916d1079053ce4535f64e42cb4e1bf52d7600d7b9c469673"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 419}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.end_headers` used but never assigned in __init__"}, "properties": {"repobilityId": 43133, "scanner": "repobility-ast-engine", "fingerprint": "3d68e8e7e49c7e049658d29fdeec42cf88ed5ceecef2d0d187dbf4062d9449e4", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|3d68e8e7e49c7e049658d29fdeec42cf88ed5ceecef2d0d187dbf4062d9449e4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 399}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_header` used but never assigned in __init__"}, "properties": {"repobilityId": 43132, "scanner": "repobility-ast-engine", "fingerprint": "30eab1c14c9cc99dbec727f2ca843dee022fac1e7b3866eedfc0a49b25f3bc76", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|30eab1c14c9cc99dbec727f2ca843dee022fac1e7b3866eedfc0a49b25f3bc76"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 398}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_response` used but never assigned in __init__"}, "properties": {"repobilityId": 43131, "scanner": "repobility-ast-engine", "fingerprint": "0f22c6557ad81b119adc4467733828c8987b5d87013d10eeca0a8b192c77d237", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|0f22c6557ad81b119adc4467733828c8987b5d87013d10eeca0a8b192c77d237"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 397}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.wfile` used but never assigned in __init__"}, "properties": {"repobilityId": 43130, "scanner": "repobility-ast-engine", "fingerprint": "8deddd3761057a281b5ce1bd39d55b80f5ced5446afe346fd1d3956b33b948d4", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|8deddd3761057a281b5ce1bd39d55b80f5ced5446afe346fd1d3956b33b948d4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 393}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.end_headers` used but never assigned in __init__"}, "properties": {"repobilityId": 43129, "scanner": "repobility-ast-engine", "fingerprint": "6a171df994fba1f9019bc6a6aab4ceed78c644cbb642380a61ebd2629cf369dd", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|6a171df994fba1f9019bc6a6aab4ceed78c644cbb642380a61ebd2629cf369dd"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 392}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_header` used but never assigned in __init__"}, "properties": {"repobilityId": 43128, "scanner": "repobility-ast-engine", "fingerprint": "51e6b260de3f394deddabfbf91824fea4a8be201a77904ccdd18b5f2b3509768", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|51e6b260de3f394deddabfbf91824fea4a8be201a77904ccdd18b5f2b3509768"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 391}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_header` used but never assigned in __init__"}, "properties": {"repobilityId": 43127, "scanner": "repobility-ast-engine", "fingerprint": "1388e7d1eb7d6b4de87845c41702eb6d577472bd91905f70f089fc20b43e37d2", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|1388e7d1eb7d6b4de87845c41702eb6d577472bd91905f70f089fc20b43e37d2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 390}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_response` used but never assigned in __init__"}, "properties": {"repobilityId": 43126, "scanner": "repobility-ast-engine", "fingerprint": "24e5f05ceb404fd69fbe629bc7d89eef057ef782437d94f2ca41ac57de832477", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|24e5f05ceb404fd69fbe629bc7d89eef057ef782437d94f2ca41ac57de832477"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 389}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.wfile` used but never assigned in __init__"}, "properties": {"repobilityId": 43125, "scanner": "repobility-ast-engine", "fingerprint": "c950ae89eac2c64e26d1cce326586dcfbf71c5e6ae75a1871d9f6a37a5ddcab6", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|c950ae89eac2c64e26d1cce326586dcfbf71c5e6ae75a1871d9f6a37a5ddcab6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 447}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.end_headers` used but never assigned in __init__"}, "properties": {"repobilityId": 43124, "scanner": "repobility-ast-engine", "fingerprint": "85d4e016691ba42fbeedde4fd3c9103bb2132225391672f032f3db3cd2cbe7c6", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|85d4e016691ba42fbeedde4fd3c9103bb2132225391672f032f3db3cd2cbe7c6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 446}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_header` used but never assigned in __init__"}, "properties": {"repobilityId": 43123, "scanner": "repobility-ast-engine", "fingerprint": "22f9ff2b7ebc356bcc80e6c95eb5f3225e3b5fd54ed36cd9edde03846f7b6b03", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|22f9ff2b7ebc356bcc80e6c95eb5f3225e3b5fd54ed36cd9edde03846f7b6b03"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 445}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.send_response` used but never assigned in __init__"}, "properties": {"repobilityId": 43122, "scanner": "repobility-ast-engine", "fingerprint": "20bcf320a5a70e488ca1c318e14415bdc054ee7308f6e462532d715f4e939d88", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|20bcf320a5a70e488ca1c318e14415bdc054ee7308f6e462532d715f4e939d88"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 444}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.path` used but never assigned in __init__"}, "properties": {"repobilityId": 43121, "scanner": "repobility-ast-engine", "fingerprint": "2e647710bc0563b4266f2d267bbfede90e76dc3612ca2ba1dd9bcc06ab73bc60", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|2e647710bc0563b4266f2d267bbfede90e76dc3612ca2ba1dd9bcc06ab73bc60"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tracking_server.py"}, "region": {"startLine": 376}}}]}, {"ruleId": "MINED107", "level": "error", "message": {"text": "Missing import: `email` used but not imported"}, "properties": {"repobilityId": 43140, "scanner": "repobility-ast-engine", "fingerprint": "aeb6d38750344f954f67f6fe3a51c2ad8640c4b9b0e9c68ab2db29661228ea7c", "category": "quality", "severity": "critical", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "missing-import-python", "owasp": "A06:2021", "cwe_ids": ["CWE-1075"], "languages": ["python"], "observations_count": 2192}, "scanner": "repobility-ast-engine", "correlation_key": "fp|aeb6d38750344f954f67f6fe3a51c2ad8640c4b9b0e9c68ab2db29661228ea7c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "email_sender.py"}, "region": {"startLine": 234}}}]}]}]}