{"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": "scanner-037d4f7ef1f1012a", "name": "Possibly dead Python function: cleanup_expired_homeworks", "shortDescription": {"text": "Possibly dead Python function: cleanup_expired_homeworks"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f52cdc9af8cdc877", "name": "Possibly dead Python function: cleanup_scheduler_dedup", "shortDescription": {"text": "Possibly dead Python function: cleanup_scheduler_dedup"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c56fdc59c2c988e4", "name": "Possibly dead Python function: delete_student_credential", "shortDescription": {"text": "Possibly dead Python function: delete_student_credential"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3918c41a0b76599", "name": "Possibly dead Python function: is_homework_confirmed", "shortDescription": {"text": "Possibly dead Python function: is_homework_confirmed"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d841478da6c482e", "name": "Possibly dead Python function: increment_play_count", "shortDescription": {"text": "Possibly dead Python function: increment_play_count"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e95171372c8e7b82", "name": "Possibly dead Python function: approve_referral_student", "shortDescription": {"text": "Possibly dead Python function: approve_referral_student"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7574441a0711a366", "name": "Possibly dead Python function: reject_referral_student", "shortDescription": {"text": "Possibly dead Python function: reject_referral_student"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b780d3e938dcf2ad", "name": "Possibly dead Python function: available_tracks", "shortDescription": {"text": "Possibly dead Python function: available_tracks"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3430097f56a4d9a", "name": "Possibly dead Python function: check_class_reminders", "shortDescription": {"text": "Possibly dead Python function: check_class_reminders"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-786961fe72891c37", "name": "Possibly dead Python function: check_davomat_notify", "shortDescription": {"text": "Possibly dead Python function: check_davomat_notify"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73166847d97db6da", "name": "Possibly dead Python function: check_homework_prompt", "shortDescription": {"text": "Possibly dead Python function: check_homework_prompt"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee8c430b1634bef2", "name": "Possibly dead Python function: send_lesson_topic_prompt", "shortDescription": {"text": "Possibly dead Python function: send_lesson_topic_prompt"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7fa2be783b0fdf1", "name": "Possibly dead Python function: expire_homeworks_at_class_start", "shortDescription": {"text": "Possibly dead Python function: expire_homeworks_at_class_start"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fe3d47a536a177c", "name": "Possibly dead Python function: send_homework_deadline_reminders", "shortDescription": {"text": "Possibly dead Python function: send_homework_deadline_reminders"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15f8538ae611e2c7", "name": "Possibly dead Python function: send_student_homework_reminders", "shortDescription": {"text": "Possibly dead Python function: send_student_homework_reminders"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-171efe4d637ef780", "name": "Possibly dead Python function: send_lesson_auto_summary", "shortDescription": {"text": "Possibly dead Python function: send_lesson_auto_summary"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-430bd3966e84bd92", "name": "Possibly dead Python function: run_sqlite_backup_job", "shortDescription": {"text": "Possibly dead Python function: run_sqlite_backup_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-060972ee7008d22d", "name": "Possibly dead Python function: send_daily_leaderboard", "shortDescription": {"text": "Possibly dead Python function: send_daily_leaderboard"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a2ab542ac737d6d", "name": "Possibly dead Python function: check_inactive_students", "shortDescription": {"text": "Possibly dead Python function: check_inactive_students"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2fe96adbfecd947", "name": "Possibly dead Python function: send_streak_reminders", "shortDescription": {"text": "Possibly dead Python function: send_streak_reminders"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fda0e58595bc2355", "name": "Possibly dead Python function: send_weekly_streak_bonus", "shortDescription": {"text": "Possibly dead Python function: send_weekly_streak_bonus"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b3c634e8551e5c9", "name": "Possibly dead Python function: format", "shortDescription": {"text": "Possibly dead Python function: format"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f50400fafa139fc", "name": "Stray `console.log` in TS/JS \u2014 e2e-tests/webapp.spec.js:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e-tests/webapp.spec.js:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de3c1f217d72a063", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc20ea9f180cc25f", "name": "Insecure pattern 'direct_innerhtml_assignment' in webapp/admin-mini.html:470", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/admin-mini.html:470"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f56be1dad18e9df", "name": "Insecure pattern 'local_storage_auth_token' in webapp/admin-mini.html:431", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in webapp/admin-mini.html:431"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62e59ec852001718", "name": "Insecure pattern 'direct_innerhtml_assignment' in webapp/student.html:2874", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/student.html:2874"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-66282da413896d59", "name": "Insecure pattern 'insert_adjacent_html' in webapp/student.html:5157", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in webapp/student.html:5157"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-279814f0fbdfc319", "name": "Insecure pattern 'direct_innerhtml_assignment' in webapp/guide.html:522", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/guide.html:522"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a5a5ceb9978205f", "name": "Insecure pattern 'direct_innerhtml_assignment' in webapp/admin.html:1017", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/admin.html:1017"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa17cfd5e37e2117", "name": "Insecure pattern 'direct_innerhtml_assignment' in webapp/curator.html:1500", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/curator.html:1500"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d2469b0b04dcb77", "name": "Insecure pattern 'dangerous_innerhtml' in webapp/games.html:1146", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in webapp/games.html:1146"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ffb81db5f4eb9f5", "name": "Insecure pattern 'direct_innerhtml_assignment' in webapp/games.html:647", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/games.html:647"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ec7d506174b2252", "name": "Very large file: database.py (2804 lines)", "shortDescription": {"text": "Very large file: database.py (2804 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2691c46d109fdc39", "name": "Very large file: scheduler.py (1955 lines)", "shortDescription": {"text": "Very large file: scheduler.py (1955 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d380cd9905efd2d6", "name": "Very large file: routes/admin_routes.py (1875 lines)", "shortDescription": {"text": "Very large file: routes/admin_routes.py (1875 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07b38a73946ed431", "name": "Commented-code block (5 lines) in config.py:45", "shortDescription": {"text": "Commented-code block (5 lines) in config.py:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-302894d5a59f7efa", "name": "Commented-code block (6 lines) in scheduler.py:522", "shortDescription": {"text": "Commented-code block (6 lines) in scheduler.py:522"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02d4f58bf5b970ab", "name": "36 env vars used in code but missing from .env.example", "shortDescription": {"text": "36 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AI_HOMEWORK_DAILY_LIMIT`, `AI_HOMEWORK_ENABLED`, `AI_HOMEWORK_TRIGGERS`, `AI_MAX_FILE_CHARS`, `AI_MAX_IMAGES`, `AI_MAX_IMAGE_MB`, `AI_MAX_LINK_BYTES`, `AI_MAX_TOKENS` + 28 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscheduler.py:send_daily_reminders, scheduler.py:send_lesson_topic_prompt, scheduler.py:send_daily_leaderboard\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscheduler.py:check_homework_prompt, scheduler.py:expire_homeworks_at_class_start\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-122053f21232d80c", "name": "Near-duplicate function bodies in 14 places", "shortDescription": {"text": "Near-duplicate function bodies in 14 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nroutes/student_routes.py:api_me, routes/student_routes.py:api_tomorrow, routes/student_routes.py:api_homework, routes/student_routes.py:api_hw_history\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee53e8e0c58609d8", "name": "Near-duplicate function bodies in 15 places", "shortDescription": {"text": "Near-duplicate function bodies in 15 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nroutes/admin_routes.py:api_admin_toggle_group, routes/admin_routes.py:api_admin_broadcast, routes/admin_routes.py:api_admin_reminder_set, routes/admin_routes.py:api_admin_message_student\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nhandlers/admin_extras.py:student_hw_history, handlers/student.py:student_view_homework, handlers/school.py:student_view_schedule, handlers/school.py:student_ask_start\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20793"}, "properties": {"repository": "SUNNATBEE/eslatma", "repoUrl": "https://github.com/SUNNATBEE/eslatma", "branch": "main"}, "results": [{"ruleId": "scanner-037d4f7ef1f1012a", "level": "note", "message": {"text": "Possibly dead Python function: cleanup_expired_homeworks"}, "properties": {"repobilityId": "ed7c8a42c3db0573", "scanner": "scanner-primary", "fingerprint": "037d4f7ef1f1012a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:1186"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f52cdc9af8cdc877", "level": "note", "message": {"text": "Possibly dead Python function: cleanup_scheduler_dedup"}, "properties": {"repobilityId": "52cf115c9480b413", "scanner": "scanner-primary", "fingerprint": "f52cdc9af8cdc877", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:1517"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c56fdc59c2c988e4", "level": "note", "message": {"text": "Possibly dead Python function: delete_student_credential"}, "properties": {"repobilityId": "e199f266f03cfff2", "scanner": "scanner-primary", "fingerprint": "c56fdc59c2c988e4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:1586"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c3918c41a0b76599", "level": "note", "message": {"text": "Possibly dead Python function: is_homework_confirmed"}, "properties": {"repobilityId": "075d2b1686d71210", "scanner": "scanner-primary", "fingerprint": "c3918c41a0b76599", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:1854"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d841478da6c482e", "level": "note", "message": {"text": "Possibly dead Python function: increment_play_count"}, "properties": {"repobilityId": "f28e9fcf3951fcf0", "scanner": "scanner-primary", "fingerprint": "5d841478da6c482e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:2292"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e95171372c8e7b82", "level": "note", "message": {"text": "Possibly dead Python function: approve_referral_student"}, "properties": {"repobilityId": "a17b5999e9d16a6e", "scanner": "scanner-primary", "fingerprint": "e95171372c8e7b82", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:2331"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7574441a0711a366", "level": "note", "message": {"text": "Possibly dead Python function: reject_referral_student"}, "properties": {"repobilityId": "b3a094ba7c9b99d5", "scanner": "scanner-primary", "fingerprint": "7574441a0711a366", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:2343"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b780d3e938dcf2ad", "level": "note", "message": {"text": "Possibly dead Python function: available_tracks"}, "properties": {"repobilityId": "62a7a7caaf757298", "scanner": "scanner-primary", "fingerprint": "b780d3e938dcf2ad", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "curriculum.py:148"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b3430097f56a4d9a", "level": "note", "message": {"text": "Possibly dead Python function: check_class_reminders"}, "properties": {"repobilityId": "e1cd281d50546e82", "scanner": "scanner-primary", "fingerprint": "b3430097f56a4d9a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:474"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-786961fe72891c37", "level": "note", "message": {"text": "Possibly dead Python function: check_davomat_notify"}, "properties": {"repobilityId": "1efc5e9ca84bded5", "scanner": "scanner-primary", "fingerprint": "786961fe72891c37", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:631"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-73166847d97db6da", "level": "note", "message": {"text": "Possibly dead Python function: check_homework_prompt"}, "properties": {"repobilityId": "ac9505318fb0419c", "scanner": "scanner-primary", "fingerprint": "73166847d97db6da", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:715"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ee8c430b1634bef2", "level": "note", "message": {"text": "Possibly dead Python function: send_lesson_topic_prompt"}, "properties": {"repobilityId": "52ca524cdc0a244a", "scanner": "scanner-primary", "fingerprint": "ee8c430b1634bef2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:791"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b7fa2be783b0fdf1", "level": "note", "message": {"text": "Possibly dead Python function: expire_homeworks_at_class_start"}, "properties": {"repobilityId": "44d07ec0062585bc", "scanner": "scanner-primary", "fingerprint": "b7fa2be783b0fdf1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:863"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6fe3d47a536a177c", "level": "note", "message": {"text": "Possibly dead Python function: send_homework_deadline_reminders"}, "properties": {"repobilityId": "37de419d1cdd852f", "scanner": "scanner-primary", "fingerprint": "6fe3d47a536a177c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:939"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-15f8538ae611e2c7", "level": "note", "message": {"text": "Possibly dead Python function: send_student_homework_reminders"}, "properties": {"repobilityId": "7800ac3760e1eab3", "scanner": "scanner-primary", "fingerprint": "15f8538ae611e2c7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:982"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-171efe4d637ef780", "level": "note", "message": {"text": "Possibly dead Python function: send_lesson_auto_summary"}, "properties": {"repobilityId": "c10bab22525019af", "scanner": "scanner-primary", "fingerprint": "171efe4d637ef780", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:1166"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-430bd3966e84bd92", "level": "note", "message": {"text": "Possibly dead Python function: run_sqlite_backup_job"}, "properties": {"repobilityId": "633817f592161787", "scanner": "scanner-primary", "fingerprint": "430bd3966e84bd92", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:1229"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-060972ee7008d22d", "level": "note", "message": {"text": "Possibly dead Python function: send_daily_leaderboard"}, "properties": {"repobilityId": "86a703e5d75a6948", "scanner": "scanner-primary", "fingerprint": "060972ee7008d22d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:1258"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a2ab542ac737d6d", "level": "note", "message": {"text": "Possibly dead Python function: check_inactive_students"}, "properties": {"repobilityId": "4c788725651a8ee8", "scanner": "scanner-primary", "fingerprint": "4a2ab542ac737d6d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:1422"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f2fe96adbfecd947", "level": "note", "message": {"text": "Possibly dead Python function: send_streak_reminders"}, "properties": {"repobilityId": "8c7fc00f5874c714", "scanner": "scanner-primary", "fingerprint": "f2fe96adbfecd947", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:1459"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fda0e58595bc2355", "level": "note", "message": {"text": "Possibly dead Python function: send_weekly_streak_bonus"}, "properties": {"repobilityId": "cfe626a5b53434f8", "scanner": "scanner-primary", "fingerprint": "fda0e58595bc2355", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scheduler.py:1498"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9b3c634e8551e5c9", "level": "note", "message": {"text": "Possibly dead Python function: format"}, "properties": {"repobilityId": "46a918df7787d491", "scanner": "scanner-primary", "fingerprint": "9b3c634e8551e5c9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py:75"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-2f50400fafa139fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e-tests/webapp.spec.js:102"}, "properties": {"repobilityId": "f170ba963af32896", "scanner": "scanner-primary", "fingerprint": "2f50400fafa139fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-de3c1f217d72a063", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "4f6247cfffd99c7c", "scanner": "scanner-primary", "fingerprint": "de3c1f217d72a063", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-dc20ea9f180cc25f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/admin-mini.html:470"}, "properties": {"repobilityId": "ee8873f150a777b8", "scanner": "scanner-primary", "fingerprint": "dc20ea9f180cc25f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/admin-mini.html"}, "region": {"startLine": 470}}}]}, {"ruleId": "scanner-7f56be1dad18e9df", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in webapp/admin-mini.html:431"}, "properties": {"repobilityId": "af120b9242225388", "scanner": "scanner-primary", "fingerprint": "7f56be1dad18e9df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/admin-mini.html"}, "region": {"startLine": 431}}}]}, {"ruleId": "scanner-62e59ec852001718", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/student.html:2874"}, "properties": {"repobilityId": "cea63c152c34ffb5", "scanner": "scanner-primary", "fingerprint": "62e59ec852001718", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/student.html"}, "region": {"startLine": 2874}}}]}, {"ruleId": "scanner-66282da413896d59", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in webapp/student.html:5157"}, "properties": {"repobilityId": "f7ae48bb67a51c0c", "scanner": "scanner-primary", "fingerprint": "66282da413896d59", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/student.html"}, "region": {"startLine": 5157}}}]}, {"ruleId": "scanner-279814f0fbdfc319", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/guide.html:522"}, "properties": {"repobilityId": "9c921064d9d5583d", "scanner": "scanner-primary", "fingerprint": "279814f0fbdfc319", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/guide.html"}, "region": {"startLine": 522}}}]}, {"ruleId": "scanner-5a5a5ceb9978205f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/admin.html:1017"}, "properties": {"repobilityId": "0e0676062a9f4c4e", "scanner": "scanner-primary", "fingerprint": "5a5a5ceb9978205f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/admin.html"}, "region": {"startLine": 1017}}}]}, {"ruleId": "scanner-aa17cfd5e37e2117", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/curator.html:1500"}, "properties": {"repobilityId": "991c1f3bbfaf15c2", "scanner": "scanner-primary", "fingerprint": "aa17cfd5e37e2117", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/curator.html"}, "region": {"startLine": 1500}}}]}, {"ruleId": "scanner-6d2469b0b04dcb77", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in webapp/games.html:1146"}, "properties": {"repobilityId": "eb2be3846a5c28ff", "scanner": "scanner-primary", "fingerprint": "6d2469b0b04dcb77", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/games.html"}, "region": {"startLine": 1146}}}]}, {"ruleId": "scanner-7ffb81db5f4eb9f5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webapp/games.html:647"}, "properties": {"repobilityId": "f240197a6f3b483f", "scanner": "scanner-primary", "fingerprint": "7ffb81db5f4eb9f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webapp/games.html"}, "region": {"startLine": 647}}}]}, {"ruleId": "scanner-7ec7d506174b2252", "level": "note", "message": {"text": "Very large file: database.py (2804 lines)"}, "properties": {"repobilityId": "29692af050e0a876", "scanner": "scanner-primary", "fingerprint": "7ec7d506174b2252", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2691c46d109fdc39", "level": "note", "message": {"text": "Very large file: scheduler.py (1955 lines)"}, "properties": {"repobilityId": "094fa28570f75570", "scanner": "scanner-primary", "fingerprint": "2691c46d109fdc39", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d380cd9905efd2d6", "level": "note", "message": {"text": "Very large file: routes/admin_routes.py (1875 lines)"}, "properties": {"repobilityId": "dcac8627a96446d6", "scanner": "scanner-primary", "fingerprint": "d380cd9905efd2d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "b62fe640bea6b3fb", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "114abaea68fd1aa6", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "14845ff16647ed53", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "42abcb06e8a566c4", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "cbdf02bef8862a37", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-07b38a73946ed431", "level": "none", "message": {"text": "Commented-code block (5 lines) in config.py:45"}, "properties": {"repobilityId": "ef624f286668f1d0", "scanner": "scanner-primary", "fingerprint": "07b38a73946ed431", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-302894d5a59f7efa", "level": "none", "message": {"text": "Commented-code block (6 lines) in scheduler.py:522"}, "properties": {"repobilityId": "5a63412250a185af", "scanner": "scanner-primary", "fingerprint": "302894d5a59f7efa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02d4f58bf5b970ab", "level": "note", "message": {"text": "36 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "8842434a0f433d2d", "scanner": "scanner-primary", "fingerprint": "02d4f58bf5b970ab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "938d694df29498ec", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "fad31ab281e8bb12", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1a10e99a80ac75d6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "019d0a25ef163cac", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-122053f21232d80c", "level": "note", "message": {"text": "Near-duplicate function bodies in 14 places"}, "properties": {"repobilityId": "c471673fad0f66ab", "scanner": "scanner-primary", "fingerprint": "122053f21232d80c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b3487fb2cab93227", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "5003786a3512dbc2", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a78951efed17e2f9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-ee53e8e0c58609d8", "level": "note", "message": {"text": "Near-duplicate function bodies in 15 places"}, "properties": {"repobilityId": "264b7e9665a26744", "scanner": "scanner-primary", "fingerprint": "ee53e8e0c58609d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "d1274993977b8c7e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b2c494b221dd67cf", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "f472fb0e19d3274e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "dd8838f50f41713d", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "22c77f05d894676d", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "5995c8b01145cd5a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "e8a181f53edfc371", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "75607d9c2badc744", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "dc32157a59ea7c6a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}