{"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-2cb4ca643415f8c3", "name": "Possibly dead Python function: filter", "shortDescription": {"text": "Possibly dead Python function: filter"}, "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-01ed355fbd5b6088", "name": "Possibly dead Python function: iter_gmail_messages", "shortDescription": {"text": "Possibly dead Python function: iter_gmail_messages"}, "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-379ec51b8e290c4b", "name": "Possibly dead Python function: iter_drive_files", "shortDescription": {"text": "Possibly dead Python function: iter_drive_files"}, "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-205333e9da7baa39", "name": "Possibly dead Python function: download_drive_file_by_id", "shortDescription": {"text": "Possibly dead Python function: download_drive_file_by_id"}, "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-afaddf4a1c275de2", "name": "Possibly dead Python function: update_drive_file", "shortDescription": {"text": "Possibly dead Python function: update_drive_file"}, "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-b331b1a2489da10b", "name": "Possibly dead Python function: load_saved_key", "shortDescription": {"text": "Possibly dead Python function: load_saved_key"}, "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-3bb5cb6b759db096", "name": "Possibly dead Python function: save_key", "shortDescription": {"text": "Possibly dead Python function: save_key"}, "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-da9d321d421e227f", "name": "Possibly dead Python function: delete_key", "shortDescription": {"text": "Possibly dead Python function: delete_key"}, "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-fe38a1b44df84d37", "name": "Possibly dead Python function: load_personal_token", "shortDescription": {"text": "Possibly dead Python function: load_personal_token"}, "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-8b4661dcc78d404b", "name": "Possibly dead Python function: delete_personal_token", "shortDescription": {"text": "Possibly dead Python function: delete_personal_token"}, "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-d1733d3eec2675d4", "name": "Possibly dead Python function: lookup_data_subject", "shortDescription": {"text": "Possibly dead Python function: lookup_data_subject"}, "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-9005a2ead715450c", "name": "Possibly dead Python function: set_disposition", "shortDescription": {"text": "Possibly dead Python function: set_disposition"}, "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-aa7a7f82698e951d", "name": "Possibly dead Python function: iter_all_items", "shortDescription": {"text": "Possibly dead Python function: iter_all_items"}, "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-59af5e2b76c2bbed", "name": "Possibly dead Python function: scans_list", "shortDescription": {"text": "Possibly dead Python function: scans_list"}, "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-3add3aef7264f414", "name": "Possibly dead Python function: log_deletion", "shortDescription": {"text": "Possibly dead Python function: log_deletion"}, "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-74f6a919096377f7", "name": "Possibly dead Python function: delete_item_record", "shortDescription": {"text": "Possibly dead Python function: delete_item_record"}, "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-a86c1fb433158f6d", "name": "Possibly dead Python function: log_audit_event", "shortDescription": {"text": "Possibly dead Python function: log_audit_event"}, "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-a1d4de89a524d70d", "name": "Possibly dead Python function: save_schedule_config", "shortDescription": {"text": "Possibly dead Python function: save_schedule_config"}, "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-93ad95cc338d0a6a", "name": "Possibly dead Python function: start_flask", "shortDescription": {"text": "Possibly dead Python function: start_flask"}, "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-4c8c4f85203f2e7d", "name": "Possible secret in file_scanner.py", "shortDescription": {"text": "Possible secret in file_scanner.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b15ff02c6fb0216a", "name": "Very large file: gdpr_scanner.py (2334 lines)", "shortDescription": {"text": "Very large file: gdpr_scanner.py (2334 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-571a6f32bd6cb9b6", "name": "Very large file: scan_engine.py (1297 lines)", "shortDescription": {"text": "Very large file: scan_engine.py (1297 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-f8dff58ff8c28564", "name": "Very large file: document_scanner.py (2788 lines)", "shortDescription": {"text": "Very large file: document_scanner.py (2788 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-9a9205718a0933be", "name": "Very large file: m365_connector.py (1201 lines)", "shortDescription": {"text": "Very large file: m365_connector.py (1201 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 15 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 349 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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 ci, tests. 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-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33358901e2d53a9b", "name": "Legacy-named symbol `directory_v1` in google_connector.py:195", "shortDescription": {"text": "Legacy-named symbol `directory_v1` in google_connector.py:195"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abacd0ac7784a1ed", "name": "Network/subprocess call without timeout or try/except \u2014 build_gdpr.py:642", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 build_gdpr.py:642"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1d142d1a79d6da1", "name": "Commented-code block (6 lines) in gdpr_scanner.py:68", "shortDescription": {"text": "Commented-code block (6 lines) in gdpr_scanner.py:68"}, "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-bc11704faf7b1a17", "name": "Commented-code block (9 lines) in document_scanner.py:511", "shortDescription": {"text": "Commented-code block (9 lines) in document_scanner.py:511"}, "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-dc3eadf7aca2ebeb", "name": "Commented-code block (5 lines) in cpr_detector.py:74", "shortDescription": {"text": "Commented-code block (5 lines) in cpr_detector.py:74"}, "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-59d95357356fea9c", "name": "Commented-code block (7 lines) in m365_connector.py:1171", "shortDescription": {"text": "Commented-code block (7 lines) in m365_connector.py:1171"}, "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-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:\ngoogle_connector.py:is_authenticated, google_connector.py:is_authenticated\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-ec2c87500f9b3094", "name": "Flask mutation route `interface_pin_verify` without `@login_required` \u2014 gdpr_scanner.py:424", "shortDescription": {"text": "Flask mutation route `interface_pin_verify` without `@login_required` \u2014 gdpr_scanner.py:424"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c76bde26e0c146ed", "name": "Flask mutation route `interface_logout` without `@login_required` \u2014 gdpr_scanner.py:440", "shortDescription": {"text": "Flask mutation route `interface_logout` without `@login_required` \u2014 gdpr_scanner.py:440"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/29734"}, "properties": {"repository": "StyxX65/GDPRScanner", "repoUrl": "https://github.com/StyxX65/GDPRScanner", "branch": "main"}, "results": [{"ruleId": "scanner-2cb4ca643415f8c3", "level": "note", "message": {"text": "Possibly dead Python function: filter"}, "properties": {"repobilityId": "7da968b6f6ed2422", "scanner": "scanner-primary", "fingerprint": "2cb4ca643415f8c3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:45"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-01ed355fbd5b6088", "level": "note", "message": {"text": "Possibly dead Python function: iter_gmail_messages"}, "properties": {"repobilityId": "ce17961564a35532", "scanner": "scanner-primary", "fingerprint": "01ed355fbd5b6088", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:739"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-379ec51b8e290c4b", "level": "note", "message": {"text": "Possibly dead Python function: iter_drive_files"}, "properties": {"repobilityId": "f350bb5c677d3899", "scanner": "scanner-primary", "fingerprint": "379ec51b8e290c4b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:755"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-205333e9da7baa39", "level": "note", "message": {"text": "Possibly dead Python function: download_drive_file_by_id"}, "properties": {"repobilityId": "cea9b8f4cb60fc72", "scanner": "scanner-primary", "fingerprint": "205333e9da7baa39", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:801"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-afaddf4a1c275de2", "level": "note", "message": {"text": "Possibly dead Python function: update_drive_file"}, "properties": {"repobilityId": "206f0d3af6191930", "scanner": "scanner-primary", "fingerprint": "afaddf4a1c275de2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:807"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b331b1a2489da10b", "level": "note", "message": {"text": "Possibly dead Python function: load_saved_key"}, "properties": {"repobilityId": "acb8db398b8953fb", "scanner": "scanner-primary", "fingerprint": "b331b1a2489da10b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:313"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3bb5cb6b759db096", "level": "note", "message": {"text": "Possibly dead Python function: save_key"}, "properties": {"repobilityId": "76a936a84d3f61e8", "scanner": "scanner-primary", "fingerprint": "3bb5cb6b759db096", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:323"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-da9d321d421e227f", "level": "note", "message": {"text": "Possibly dead Python function: delete_key"}, "properties": {"repobilityId": "7e310b784ae4a1c1", "scanner": "scanner-primary", "fingerprint": "da9d321d421e227f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:332"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe38a1b44df84d37", "level": "note", "message": {"text": "Possibly dead Python function: load_personal_token"}, "properties": {"repobilityId": "866c11dc4588c5d6", "scanner": "scanner-primary", "fingerprint": "fe38a1b44df84d37", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:899"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8b4661dcc78d404b", "level": "note", "message": {"text": "Possibly dead Python function: delete_personal_token"}, "properties": {"repobilityId": "a243cd311f4ab5a3", "scanner": "scanner-primary", "fingerprint": "8b4661dcc78d404b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "google_connector.py:909"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d1733d3eec2675d4", "level": "note", "message": {"text": "Possibly dead Python function: lookup_data_subject"}, "properties": {"repobilityId": "21bae0ca63c74e92", "scanner": "scanner-primary", "fingerprint": "d1733d3eec2675d4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_db.py:597"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9005a2ead715450c", "level": "note", "message": {"text": "Possibly dead Python function: set_disposition"}, "properties": {"repobilityId": "02e93133c0395cf3", "scanner": "scanner-primary", "fingerprint": "9005a2ead715450c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_db.py:655"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa7a7f82698e951d", "level": "note", "message": {"text": "Possibly dead Python function: iter_all_items"}, "properties": {"repobilityId": "239acc5f80e670ca", "scanner": "scanner-primary", "fingerprint": "aa7a7f82698e951d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_db.py:721"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-59af5e2b76c2bbed", "level": "note", "message": {"text": "Possibly dead Python function: scans_list"}, "properties": {"repobilityId": "56c4866ec18da56b", "scanner": "scanner-primary", "fingerprint": "59af5e2b76c2bbed", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_db.py:735"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3add3aef7264f414", "level": "note", "message": {"text": "Possibly dead Python function: log_deletion"}, "properties": {"repobilityId": "f310141c3eb713e1", "scanner": "scanner-primary", "fingerprint": "3add3aef7264f414", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_db.py:752"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74f6a919096377f7", "level": "note", "message": {"text": "Possibly dead Python function: delete_item_record"}, "properties": {"repobilityId": "b76943901ad4d5fa", "scanner": "scanner-primary", "fingerprint": "74f6a919096377f7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_db.py:851"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a86c1fb433158f6d", "level": "note", "message": {"text": "Possibly dead Python function: log_audit_event"}, "properties": {"repobilityId": "f8786f9b14c8b969", "scanner": "scanner-primary", "fingerprint": "a86c1fb433158f6d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_db.py:1099"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a1d4de89a524d70d", "level": "note", "message": {"text": "Possibly dead Python function: save_schedule_config"}, "properties": {"repobilityId": "43a9a6cd4d03e7f1", "scanner": "scanner-primary", "fingerprint": "a1d4de89a524d70d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scan_scheduler.py:109"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-93ad95cc338d0a6a", "level": "note", "message": {"text": "Possibly dead Python function: start_flask"}, "properties": {"repobilityId": "1a3cce609afc7120", "scanner": "scanner-primary", "fingerprint": "93ad95cc338d0a6a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "m365_launcher.py:219"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c8c4f85203f2e7d", "level": "error", "message": {"text": "Possible secret in file_scanner.py"}, "properties": {"repobilityId": "13e40a3b69315eb2", "scanner": "scanner-primary", "fingerprint": "4c8c4f85203f2e7d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "file_scanner.py"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-b15ff02c6fb0216a", "level": "note", "message": {"text": "Very large file: gdpr_scanner.py (2334 lines)"}, "properties": {"repobilityId": "9946536202e29904", "scanner": "scanner-primary", "fingerprint": "b15ff02c6fb0216a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-571a6f32bd6cb9b6", "level": "note", "message": {"text": "Very large file: scan_engine.py (1297 lines)"}, "properties": {"repobilityId": "123c2b26ffe0328b", "scanner": "scanner-primary", "fingerprint": "571a6f32bd6cb9b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f8dff58ff8c28564", "level": "note", "message": {"text": "Very large file: document_scanner.py (2788 lines)"}, "properties": {"repobilityId": "2265c82526694e37", "scanner": "scanner-primary", "fingerprint": "f8dff58ff8c28564", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9a9205718a0933be", "level": "note", "message": {"text": "Very large file: m365_connector.py (1201 lines)"}, "properties": {"repobilityId": "afb519eb44c67fce", "scanner": "scanner-primary", "fingerprint": "9a9205718a0933be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c4b693bc91842641", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "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": "95fa1dded573ad96", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "cb3dea899831ca5b", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "f5138e4f5179a598", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-33358901e2d53a9b", "level": "note", "message": {"text": "Legacy-named symbol `directory_v1` in google_connector.py:195"}, "properties": {"repobilityId": "2ea339c3a4821154", "scanner": "scanner-primary", "fingerprint": "33358901e2d53a9b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-abacd0ac7784a1ed", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 build_gdpr.py:642"}, "properties": {"repobilityId": "fa960d12f91eb492", "scanner": "scanner-primary", "fingerprint": "abacd0ac7784a1ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e1d142d1a79d6da1", "level": "none", "message": {"text": "Commented-code block (6 lines) in gdpr_scanner.py:68"}, "properties": {"repobilityId": "f6bb38d51f79d559", "scanner": "scanner-primary", "fingerprint": "e1d142d1a79d6da1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc11704faf7b1a17", "level": "none", "message": {"text": "Commented-code block (9 lines) in document_scanner.py:511"}, "properties": {"repobilityId": "fad7d08e64439e07", "scanner": "scanner-primary", "fingerprint": "bc11704faf7b1a17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc3eadf7aca2ebeb", "level": "none", "message": {"text": "Commented-code block (5 lines) in cpr_detector.py:74"}, "properties": {"repobilityId": "beb07426de35a6f3", "scanner": "scanner-primary", "fingerprint": "dc3eadf7aca2ebeb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59d95357356fea9c", "level": "none", "message": {"text": "Commented-code block (7 lines) in m365_connector.py:1171"}, "properties": {"repobilityId": "9bb073dc768662b7", "scanner": "scanner-primary", "fingerprint": "59d95357356fea9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "544220e396c17132", "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": "63ae7171fe7739f9", "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": "a8c202658790ee5f", "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": "0f120ab23f9c82d8", "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": "14b18c528df01ffd", "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": "3792d3160f4790e3", "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": "a987c7702fda73d3", "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": "ff9f8acc0cd64006", "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": "52fe3c0f5f57544d", "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": "4f6dc3f16187d73a", "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": "378b002c456c7beb", "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": "80de52694ba7163d", "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": "9705cc55d2ee021a", "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": "5f86cfb85f342678", "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": "681742f483ccfbdb", "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": "37066db02e81c306", "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": "02b1fc0be9736552", "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": "acc21540f2b65d6b", "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": "f656fee80cc2902c", "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": "50a481156f84e02f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-ec2c87500f9b3094", "level": "error", "message": {"text": "Flask mutation route `interface_pin_verify` without `@login_required` \u2014 gdpr_scanner.py:424"}, "properties": {"repobilityId": "32909ff40169050a", "scanner": "scanner-primary", "fingerprint": "ec2c87500f9b3094", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_scanner.py"}, "region": {"startLine": 424}}}]}, {"ruleId": "scanner-c76bde26e0c146ed", "level": "error", "message": {"text": "Flask mutation route `interface_logout` without `@login_required` \u2014 gdpr_scanner.py:440"}, "properties": {"repobilityId": "5a51b57c97113716", "scanner": "scanner-primary", "fingerprint": "c76bde26e0c146ed", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gdpr_scanner.py"}, "region": {"startLine": 440}}}]}]}]}