{"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-d07895a649957bd3", "name": "Possibly dead Python function: enrich", "shortDescription": {"text": "Possibly dead Python function: enrich"}, "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-6958c35676d02846", "name": "Possibly dead Python function: scrape_ngca", "shortDescription": {"text": "Possibly dead Python function: scrape_ngca"}, "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-7982f7e4a5d0c330", "name": "Possibly dead Python function: scrape_hepworth", "shortDescription": {"text": "Possibly dead Python function: scrape_hepworth"}, "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-eab2386cfcbc50c8", "name": "Possibly dead Python function: scrape_mima", "shortDescription": {"text": "Possibly dead Python function: scrape_mima"}, "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-f00c2b3fa4c618ac", "name": "Possibly dead Python function: scrape_site_gallery", "shortDescription": {"text": "Possibly dead Python function: scrape_site_gallery"}, "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-2b498dfff511da3a", "name": "Possibly dead Python function: scrape_grundy", "shortDescription": {"text": "Possibly dead Python function: scrape_grundy"}, "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-006d732f42e540d3", "name": "Possibly dead Python function: scrape_salts_mill", "shortDescription": {"text": "Possibly dead Python function: scrape_salts_mill"}, "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-aa90d72156f93dda", "name": "Possibly dead Python function: scrape_iwm_north", "shortDescription": {"text": "Possibly dead Python function: scrape_iwm_north"}, "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-58bef114c665858c", "name": "Possibly dead Python function: scrape_humber_street", "shortDescription": {"text": "Possibly dead Python function: scrape_humber_street"}, "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-b99f974663fadc70", "name": "Possibly dead Python function: scrape_harris_preston", "shortDescription": {"text": "Possibly dead Python function: scrape_harris_preston"}, "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-4677da1bcb89678c", "name": "Possibly dead Python function: scrape_nsmm", "shortDescription": {"text": "Possibly dead Python function: scrape_nsmm"}, "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-0ec3b62431c7260a", "name": "Possibly dead Python function: scrape_castlefield", "shortDescription": {"text": "Possibly dead Python function: scrape_castlefield"}, "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-ed89909678b944fd", "name": "Possibly dead Python function: scrape_fact", "shortDescription": {"text": "Possibly dead Python function: scrape_fact"}, "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-f628837b10ba11e8", "name": "Possibly dead Python function: scrape_bowes", "shortDescription": {"text": "Possibly dead Python function: scrape_bowes"}, "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-0e242539f4eb677a", "name": "Possibly dead Python function: scrape_baltic", "shortDescription": {"text": "Possibly dead Python function: scrape_baltic"}, "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-4826c9c82c898ea7", "name": "Possibly dead Python function: scrape_home", "shortDescription": {"text": "Possibly dead Python function: scrape_home"}, "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-66341d5453dc55af", "name": "Possibly dead Python function: scrape_impressions", "shortDescription": {"text": "Possibly dead Python function: scrape_impressions"}, "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-9136eec0e1117871", "name": "Possibly dead Python function: scrape_leeds_art_gallery", "shortDescription": {"text": "Possibly dead Python function: scrape_leeds_art_gallery"}, "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-331f14a1a542b0f1", "name": "Possibly dead Python function: scrape_cooper_gallery", "shortDescription": {"text": "Possibly dead Python function: scrape_cooper_gallery"}, "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-18586b73d6a886e6", "name": "Possibly dead Python function: scrape_tullie_house", "shortDescription": {"text": "Possibly dead Python function: scrape_tullie_house"}, "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-4ca7f0395bd23655", "name": "Possibly dead Python function: scrape_manchester_art_gallery", "shortDescription": {"text": "Possibly dead Python function: scrape_manchester_art_gallery"}, "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-0f5ec94833401287", "name": "Possibly dead Python function: scrape_open_eye", "shortDescription": {"text": "Possibly dead Python function: scrape_open_eye"}, "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-09febca95bfdc7ac", "name": "Possibly dead Python function: scrape_sunderland_museum", "shortDescription": {"text": "Possibly dead Python function: scrape_sunderland_museum"}, "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-0ab49987fd5f3bf1", "name": "Possibly dead Python function: scrape_ysp", "shortDescription": {"text": "Possibly dead Python function: scrape_ysp"}, "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-26b042ad9716dce4", "name": "Possibly dead Python function: scrape_abbot_hall", "shortDescription": {"text": "Possibly dead Python function: scrape_abbot_hall"}, "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-0a539b51f60d1847", "name": "Possibly dead Python function: scrape_lowry", "shortDescription": {"text": "Possibly dead Python function: scrape_lowry"}, "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-a74ea26001b9510e", "name": "Possibly dead Python function: scrape_walker_art_gallery", "shortDescription": {"text": "Possibly dead Python function: scrape_walker_art_gallery"}, "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-5b3a3d93299ae17d", "name": "Possibly dead Python function: scrape_lady_lever", "shortDescription": {"text": "Possibly dead Python function: scrape_lady_lever"}, "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-14ebe7b24071a764", "name": "Possibly dead Python function: scrape_sudley_house", "shortDescription": {"text": "Possibly dead Python function: scrape_sudley_house"}, "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-bff6329c0ddde104", "name": "Possibly dead Python function: scrape_world_museum", "shortDescription": {"text": "Possibly dead Python function: scrape_world_museum"}, "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-a206127088a1cf99", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07e71adaf0327d43", "name": "Insecure pattern 'subprocess_shell_true' in tools/scraper_autofix_bot.py:321", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in tools/scraper_autofix_bot.py:321"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-205a6592e8ae81bc", "name": "Insecure pattern 'tls_verify_false' in tokyo/cinema_modules/kino_cinema_module.py:28", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in tokyo/cinema_modules/kino_cinema_module.py:28"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffa5bf25bc28dea6", "name": "Insecure pattern 'tls_verify_false' in tokyo/cinema_modules/cine_switch_ginza_module.py:68", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in tokyo/cinema_modules/cine_switch_ginza_module.py:68"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1917f152fe0e06ac", "name": "Insecure pattern 'tls_verify_false' in taipei/cinema_modules/zhongli_arts_cinema_module.py:29", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in taipei/cinema_modules/zhongli_arts_cinema_module.py:29"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a593605e4d47626", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-583c1113533b489f", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba21e500ab0269fa", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7f2a592622a729a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15a85b1efd1dcc25", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9a1ab65292c2c163", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce33f61720d217fd", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6fe8169ce02fe478", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af301eade072c3b2", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb89c327a0e6c4d8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd626757e15a5627", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92d4fcec7e2a8f5e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20cb371a405b61f4", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7210590377f5332a", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60e6d2d4c2dadfd8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-201cacecbd79a9c4", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc2e3f3db1568f67", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-101fc8e63fbcce4c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9af6a7a7f736e101", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9fd80a0ed6621c8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ffa42a5438c18f9", "name": "Very large file: tokyo/main_scraper.py (2710 lines)", "shortDescription": {"text": "Very large file: tokyo/main_scraper.py (2710 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-51f74c3eaf0b1aaa", "name": "Very large file: taipei/main_scraper.py (1300 lines)", "shortDescription": {"text": "Very large file: taipei/main_scraper.py (1300 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": "2 test file(s) for 189 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1447 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-9258651e5512f970", "name": "Commented-code block (7 lines) in north/venue_modules/whitworth_module.py:4", "shortDescription": {"text": "Commented-code block (7 lines) in north/venue_modules/whitworth_module.py:4"}, "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-617830c4f3abf7ad", "name": "Commented-code block (6 lines) in north/venue_modules/york_art_gallery_module.py:3", "shortDescription": {"text": "Commented-code block (6 lines) in north/venue_modules/york_art_gallery_module.py:3"}, "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-70554eefb9cd9acf", "name": "Commented-code block (5 lines) in north/venue_modules/_twam.py:2", "shortDescription": {"text": "Commented-code block (5 lines) in north/venue_modules/_twam.py:2"}, "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-6584c0fb47f9cfa0", "name": "Commented-code block (5 lines) in north/venue_modules/manchester_art_gallery_module.py:2", "shortDescription": {"text": "Commented-code block (5 lines) in north/venue_modules/manchester_art_gallery_module.py:2"}, "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-4fb7fcffde2b45bb", "name": "Commented-code block (7 lines) in north/venue_modules/bluecoat_module.py:1", "shortDescription": {"text": "Commented-code block (7 lines) in north/venue_modules/bluecoat_module.py:1"}, "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-51514c6182788c6c", "name": "Commented-code block (6 lines) in north/venue_modules/sheffield_museums_module.py:3", "shortDescription": {"text": "Commented-code block (6 lines) in north/venue_modules/sheffield_museums_module.py:3"}, "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-463ed83c0c9624a4", "name": "Network/subprocess call without timeout or try/except \u2014 tools/scraper_autofix_bot.py:26", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/scraper_autofix_bot.py:26"}, "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-5b66c2422cc81ff8", "name": "Network/subprocess call without timeout or try/except \u2014 tools/cinema_health_monitor.py:85", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/cinema_health_monitor.py:85"}, "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-ebe2071025bd4825", "name": "Network/subprocess call without timeout or try/except \u2014 london/generate_post2.py:346", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 london/generate_post2.py:346"}, "fullDescription": {"text": "`requests.get(...)` 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-3fce364037553bb5", "name": "Network/subprocess call without timeout or try/except \u2014 london/upload_to_instagram.py:129", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 london/upload_to_instagram.py:129"}, "fullDescription": {"text": "`requests.post(...)` 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-d08c30d784414021", "name": "Commented-code block (5 lines) in london/cinema_modules/backyard_cinema_module.py:6", "shortDescription": {"text": "Commented-code block (5 lines) in london/cinema_modules/backyard_cinema_module.py:6"}, "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-d4fc690e88ee1a14", "name": "Commented-code block (5 lines) in london/cinema_modules/regent_street_module.py:6", "shortDescription": {"text": "Commented-code block (5 lines) in london/cinema_modules/regent_street_module.py:6"}, "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-cddc3c5fadce2c28", "name": "Commented-code block (7 lines) in london/cinema_modules/olympic_studios_module.py:68", "shortDescription": {"text": "Commented-code block (7 lines) in london/cinema_modules/olympic_studios_module.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-b4f312a5439f23d6", "name": "Network/subprocess call without timeout or try/except \u2014 manchester/generate_post2.py:345", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 manchester/generate_post2.py:345"}, "fullDescription": {"text": "`requests.get(...)` 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-84a06fa3a8ee2aee", "name": "Network/subprocess call without timeout or try/except \u2014 manchester/upload_to_instagram.py:121", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 manchester/upload_to_instagram.py:121"}, "fullDescription": {"text": "`requests.post(...)` 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-c9467f7fd18e57d8", "name": "Network/subprocess call without timeout or try/except \u2014 tokyo/hero_experiments.py:257", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/hero_experiments.py:257"}, "fullDescription": {"text": "`requests.get(...)` 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-0cd1771daa7adab1", "name": "Network/subprocess call without timeout or try/except \u2014 tokyo/generate_post2.py:550", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/generate_post2.py:550"}, "fullDescription": {"text": "`requests.get(...)` 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-ca70b842ee707c53", "name": "Network/subprocess call without timeout or try/except \u2014 tokyo/upload_to_instagram.py:49", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/upload_to_instagram.py:49"}, "fullDescription": {"text": "`requests.post(...)` 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-f33f1902d26333a1", "name": "Legacy-named symbol `_merge_eiga_with_legacy` in tokyo/main_scraper.py:941", "shortDescription": {"text": "Legacy-named symbol `_merge_eiga_with_legacy` in tokyo/main_scraper.py:941"}, "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-ba8e70b8117fe183", "name": "Commented-code block (8 lines) in tokyo/cinema_modules/bluestudio_module.py:1", "shortDescription": {"text": "Commented-code block (8 lines) in tokyo/cinema_modules/bluestudio_module.py:1"}, "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-bf3a5e48c1bfb1dc", "name": "Commented-code block (6 lines) in tokyo/cinema_modules/kino_cinema_module.py:108", "shortDescription": {"text": "Commented-code block (6 lines) in tokyo/cinema_modules/kino_cinema_module.py:108"}, "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-054a74d9773fc238", "name": "Network/subprocess call without timeout or try/except \u2014 tokyo/cinema_modules/generate_post3.py:426", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/cinema_modules/generate_post3.py:426"}, "fullDescription": {"text": "`requests.get(...)` 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-0027e313ade46c8f", "name": "Near-duplicate function bodies in 7 places", "shortDescription": {"text": "Near-duplicate function bodies in 7 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nnorth/venue_modules/site_gallery_module.py:scrape_site_gallery, north/venue_modules/grundy_module.py:scrape_grundy, north/venue_modules/humber_street_module.py:scrape_humber_street, north/venue_modules/cooper_gallery_module.py:scrape_cooper_gallery\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nnorth/venue_modules/iwm_north_module.py:scrape_iwm_north, north/venue_modules/fact_module.py:scrape_fact, north/venue_modules/baltic_module.py:scrape_baltic, north/venue_modules/lowry_module.py:scrape_lowry\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:\nnorth/venue_modules/nsmm_module.py:scrape_nsmm, north/venue_modules/nottingham_contemporary_module.py:scrape_nottingham_contemporary\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-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:\nlondon/generate_post2.py:format_date_for_caption, manchester/generate_post2.py:format_date_for_caption, tokyo/generate_post2.py:format_date_for_caption\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/26710"}, "properties": {"repository": "jakobng/cinema-scrapers", "repoUrl": "https://github.com/jakobng/cinema-scrapers", "branch": "main"}, "results": [{"ruleId": "scanner-d07895a649957bd3", "level": "note", "message": {"text": "Possibly dead Python function: enrich"}, "properties": {"repobilityId": "59d6a595aa25355f", "scanner": "scanner-primary", "fingerprint": "d07895a649957bd3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/main_scraper.py:265"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6958c35676d02846", "level": "note", "message": {"text": "Possibly dead Python function: scrape_ngca"}, "properties": {"repobilityId": "fa111cfd38b97f5e", "scanner": "scanner-primary", "fingerprint": "6958c35676d02846", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/ngca_module.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7982f7e4a5d0c330", "level": "note", "message": {"text": "Possibly dead Python function: scrape_hepworth"}, "properties": {"repobilityId": "6a87459158fe29e8", "scanner": "scanner-primary", "fingerprint": "7982f7e4a5d0c330", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/hepworth_module.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eab2386cfcbc50c8", "level": "note", "message": {"text": "Possibly dead Python function: scrape_mima"}, "properties": {"repobilityId": "631e0a96c6d18dad", "scanner": "scanner-primary", "fingerprint": "eab2386cfcbc50c8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/mima_module.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f00c2b3fa4c618ac", "level": "note", "message": {"text": "Possibly dead Python function: scrape_site_gallery"}, "properties": {"repobilityId": "b63772854c6f1c39", "scanner": "scanner-primary", "fingerprint": "f00c2b3fa4c618ac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/site_gallery_module.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2b498dfff511da3a", "level": "note", "message": {"text": "Possibly dead Python function: scrape_grundy"}, "properties": {"repobilityId": "eef14215900682a7", "scanner": "scanner-primary", "fingerprint": "2b498dfff511da3a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/grundy_module.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-006d732f42e540d3", "level": "note", "message": {"text": "Possibly dead Python function: scrape_salts_mill"}, "properties": {"repobilityId": "199763d10584c870", "scanner": "scanner-primary", "fingerprint": "006d732f42e540d3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/salts_mill_module.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa90d72156f93dda", "level": "note", "message": {"text": "Possibly dead Python function: scrape_iwm_north"}, "properties": {"repobilityId": "44205f344c0ae34e", "scanner": "scanner-primary", "fingerprint": "aa90d72156f93dda", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/iwm_north_module.py:14"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-58bef114c665858c", "level": "note", "message": {"text": "Possibly dead Python function: scrape_humber_street"}, "properties": {"repobilityId": "3f4007ddc4925a1d", "scanner": "scanner-primary", "fingerprint": "58bef114c665858c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/humber_street_module.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b99f974663fadc70", "level": "note", "message": {"text": "Possibly dead Python function: scrape_harris_preston"}, "properties": {"repobilityId": "f57b42fa342cbcc3", "scanner": "scanner-primary", "fingerprint": "b99f974663fadc70", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/harris_preston_module.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4677da1bcb89678c", "level": "note", "message": {"text": "Possibly dead Python function: scrape_nsmm"}, "properties": {"repobilityId": "3a8bbd5b6b56af3d", "scanner": "scanner-primary", "fingerprint": "4677da1bcb89678c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/nsmm_module.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ec3b62431c7260a", "level": "note", "message": {"text": "Possibly dead Python function: scrape_castlefield"}, "properties": {"repobilityId": "ad0b0ee953e7d42d", "scanner": "scanner-primary", "fingerprint": "0ec3b62431c7260a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/castlefield_module.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ed89909678b944fd", "level": "note", "message": {"text": "Possibly dead Python function: scrape_fact"}, "properties": {"repobilityId": "0837e9f32e83403e", "scanner": "scanner-primary", "fingerprint": "ed89909678b944fd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/fact_module.py:78"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f628837b10ba11e8", "level": "note", "message": {"text": "Possibly dead Python function: scrape_bowes"}, "properties": {"repobilityId": "1216ef29eb66e49c", "scanner": "scanner-primary", "fingerprint": "f628837b10ba11e8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/bowes_module.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e242539f4eb677a", "level": "note", "message": {"text": "Possibly dead Python function: scrape_baltic"}, "properties": {"repobilityId": "f57974fef6bd5e4f", "scanner": "scanner-primary", "fingerprint": "0e242539f4eb677a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/baltic_module.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4826c9c82c898ea7", "level": "note", "message": {"text": "Possibly dead Python function: scrape_home"}, "properties": {"repobilityId": "b9f97093ea50d705", "scanner": "scanner-primary", "fingerprint": "4826c9c82c898ea7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/home_manchester_module.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-66341d5453dc55af", "level": "note", "message": {"text": "Possibly dead Python function: scrape_impressions"}, "properties": {"repobilityId": "a8247a7d091f0989", "scanner": "scanner-primary", "fingerprint": "66341d5453dc55af", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/impressions_module.py:18"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9136eec0e1117871", "level": "note", "message": {"text": "Possibly dead Python function: scrape_leeds_art_gallery"}, "properties": {"repobilityId": "9bc91a8060b6265c", "scanner": "scanner-primary", "fingerprint": "9136eec0e1117871", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/leeds_art_gallery_module.py:18"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-331f14a1a542b0f1", "level": "note", "message": {"text": "Possibly dead Python function: scrape_cooper_gallery"}, "properties": {"repobilityId": "5b272aceede528a7", "scanner": "scanner-primary", "fingerprint": "331f14a1a542b0f1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/cooper_gallery_module.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18586b73d6a886e6", "level": "note", "message": {"text": "Possibly dead Python function: scrape_tullie_house"}, "properties": {"repobilityId": "a119c87fba2d2994", "scanner": "scanner-primary", "fingerprint": "18586b73d6a886e6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/tullie_house_module.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4ca7f0395bd23655", "level": "note", "message": {"text": "Possibly dead Python function: scrape_manchester_art_gallery"}, "properties": {"repobilityId": "ca82f46b20109b68", "scanner": "scanner-primary", "fingerprint": "4ca7f0395bd23655", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/manchester_art_gallery_module.py:255"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f5ec94833401287", "level": "note", "message": {"text": "Possibly dead Python function: scrape_open_eye"}, "properties": {"repobilityId": "13031b4cbd2e91fb", "scanner": "scanner-primary", "fingerprint": "0f5ec94833401287", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/open_eye_module.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-09febca95bfdc7ac", "level": "note", "message": {"text": "Possibly dead Python function: scrape_sunderland_museum"}, "properties": {"repobilityId": "42e86923b1fddea7", "scanner": "scanner-primary", "fingerprint": "09febca95bfdc7ac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/sunderland_museum_module.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ab49987fd5f3bf1", "level": "note", "message": {"text": "Possibly dead Python function: scrape_ysp"}, "properties": {"repobilityId": "9f1a6e354e01c3d0", "scanner": "scanner-primary", "fingerprint": "0ab49987fd5f3bf1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/ysp_module.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26b042ad9716dce4", "level": "note", "message": {"text": "Possibly dead Python function: scrape_abbot_hall"}, "properties": {"repobilityId": "fab07a20e2dc938c", "scanner": "scanner-primary", "fingerprint": "26b042ad9716dce4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/abbot_hall_module.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a539b51f60d1847", "level": "note", "message": {"text": "Possibly dead Python function: scrape_lowry"}, "properties": {"repobilityId": "05e7e4ea6c895b4f", "scanner": "scanner-primary", "fingerprint": "0a539b51f60d1847", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/lowry_module.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a74ea26001b9510e", "level": "note", "message": {"text": "Possibly dead Python function: scrape_walker_art_gallery"}, "properties": {"repobilityId": "251dbfaad2e3e1d7", "scanner": "scanner-primary", "fingerprint": "a74ea26001b9510e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/liverpool_museums_module.py:85"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5b3a3d93299ae17d", "level": "note", "message": {"text": "Possibly dead Python function: scrape_lady_lever"}, "properties": {"repobilityId": "16c2a1605347a15d", "scanner": "scanner-primary", "fingerprint": "5b3a3d93299ae17d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/liverpool_museums_module.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-14ebe7b24071a764", "level": "note", "message": {"text": "Possibly dead Python function: scrape_sudley_house"}, "properties": {"repobilityId": "4aab996fc761fd97", "scanner": "scanner-primary", "fingerprint": "14ebe7b24071a764", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/liverpool_museums_module.py:93"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bff6329c0ddde104", "level": "note", "message": {"text": "Possibly dead Python function: scrape_world_museum"}, "properties": {"repobilityId": "c5b64e46a6a662e7", "scanner": "scanner-primary", "fingerprint": "bff6329c0ddde104", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "north/venue_modules/liverpool_museums_module.py:97"}, "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-a206127088a1cf99", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "a206127088a1cf99", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tokyo-scrape-and-post.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07e71adaf0327d43", "level": "error", "message": {"text": "Insecure pattern 'subprocess_shell_true' in tools/scraper_autofix_bot.py:321"}, "properties": {"repobilityId": "441edd8ed2f48d63", "scanner": "scanner-primary", "fingerprint": "07e71adaf0327d43", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/scraper_autofix_bot.py"}, "region": {"startLine": 321}}}]}, {"ruleId": "scanner-205a6592e8ae81bc", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in tokyo/cinema_modules/kino_cinema_module.py:28"}, "properties": {"repobilityId": "488dfa4cddb7273e", "scanner": "scanner-primary", "fingerprint": "205a6592e8ae81bc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tokyo/cinema_modules/kino_cinema_module.py"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-ffa5bf25bc28dea6", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in tokyo/cinema_modules/cine_switch_ginza_module.py:68"}, "properties": {"repobilityId": "944ab09858be8dec", "scanner": "scanner-primary", "fingerprint": "ffa5bf25bc28dea6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tokyo/cinema_modules/cine_switch_ginza_module.py"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-1917f152fe0e06ac", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in taipei/cinema_modules/zhongli_arts_cinema_module.py:29"}, "properties": {"repobilityId": "80a5ba2d03e87475", "scanner": "scanner-primary", "fingerprint": "1917f152fe0e06ac", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "taipei/cinema_modules/zhongli_arts_cinema_module.py"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-3a593605e4d47626", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9a4178af7d351708", "scanner": "scanner-primary", "fingerprint": "3a593605e4d47626", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/north-exhibitions-scrape.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-3a593605e4d47626", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "919cabe0a5ac5cdf", "scanner": "scanner-primary", "fingerprint": "3a593605e4d47626", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/north-exhibitions-scrape.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-583c1113533b489f", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "1223849f4f493da3", "scanner": "scanner-primary", "fingerprint": "583c1113533b489f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/north-exhibitions-scrape.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ba21e500ab0269fa", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ffc1f01299e6e406", "scanner": "scanner-primary", "fingerprint": "ba21e500ab0269fa", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-smtp-alert.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-f7f2a592622a729a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "741c7ac6b5084475", "scanner": "scanner-primary", "fingerprint": "f7f2a592622a729a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/manchester-export.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-f7f2a592622a729a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1781cd931f03000c", "scanner": "scanner-primary", "fingerprint": "f7f2a592622a729a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/manchester-export.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-15a85b1efd1dcc25", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b567302b4dffc99d", "scanner": "scanner-primary", "fingerprint": "15a85b1efd1dcc25", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/manchester-export.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a1ab65292c2c163", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c0f99cd0446845cc", "scanner": "scanner-primary", "fingerprint": "9a1ab65292c2c163", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-cinema-post-v3.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-9a1ab65292c2c163", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2d8cbc9e21fce98c", "scanner": "scanner-primary", "fingerprint": "9a1ab65292c2c163", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-cinema-post-v3.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-ce33f61720d217fd", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "66b6228b7d023d39", "scanner": "scanner-primary", "fingerprint": "ce33f61720d217fd", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-cinema-post-v3.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6fe8169ce02fe478", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "46262011103ec87b", "scanner": "scanner-primary", "fingerprint": "6fe8169ce02fe478", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/london-scrape-and-post.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-6fe8169ce02fe478", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1df0b75c0640cbb9", "scanner": "scanner-primary", "fingerprint": "6fe8169ce02fe478", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/london-scrape-and-post.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-af301eade072c3b2", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "06ef32688f9120a2", "scanner": "scanner-primary", "fingerprint": "af301eade072c3b2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/london-scrape-and-post.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb89c327a0e6c4d8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "52a61c46c515f714", "scanner": "scanner-primary", "fingerprint": "bb89c327a0e6c4d8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-cinema-post.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-bb89c327a0e6c4d8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6666a7936af0735d", "scanner": "scanner-primary", "fingerprint": "bb89c327a0e6c4d8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-cinema-post.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-cd626757e15a5627", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "0c66eb6b496026f0", "scanner": "scanner-primary", "fingerprint": "cd626757e15a5627", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-cinema-post.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92d4fcec7e2a8f5e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a8b0771a756025ff", "scanner": "scanner-primary", "fingerprint": "92d4fcec7e2a8f5e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cinema-health-monitor.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-92d4fcec7e2a8f5e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "355accfa963ca899", "scanner": "scanner-primary", "fingerprint": "92d4fcec7e2a8f5e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cinema-health-monitor.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-20cb371a405b61f4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a1acae568d07df1a", "scanner": "scanner-primary", "fingerprint": "20cb371a405b61f4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/manchester-scrape-daily.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-20cb371a405b61f4", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "445383db175004a5", "scanner": "scanner-primary", "fingerprint": "20cb371a405b61f4", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/manchester-scrape-daily.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-7210590377f5332a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "56ae10c1412c1276", "scanner": "scanner-primary", "fingerprint": "7210590377f5332a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/manchester-scrape-daily.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-60e6d2d4c2dadfd8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "45e062c2359ef2bc", "scanner": "scanner-primary", "fingerprint": "60e6d2d4c2dadfd8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/taipei-scrape.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-60e6d2d4c2dadfd8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c13a1523662454f3", "scanner": "scanner-primary", "fingerprint": "60e6d2d4c2dadfd8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/taipei-scrape.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-60e6d2d4c2dadfd8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c525772967f1c041", "scanner": "scanner-primary", "fingerprint": "60e6d2d4c2dadfd8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/taipei-scrape.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-201cacecbd79a9c4", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "53d4830e5a76153d", "scanner": "scanner-primary", "fingerprint": "201cacecbd79a9c4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/taipei-scrape.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc2e3f3db1568f67", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c91d10684a1e5f47", "scanner": "scanner-primary", "fingerprint": "fc2e3f3db1568f67", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tokyo-outreach-email.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-fc2e3f3db1568f67", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8c4c5f9809c3a735", "scanner": "scanner-primary", "fingerprint": "fc2e3f3db1568f67", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tokyo-outreach-email.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-101fc8e63fbcce4c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4ebfa7d391967fad", "scanner": "scanner-primary", "fingerprint": "101fc8e63fbcce4c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tokyo-scrape-and-post.yml"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-101fc8e63fbcce4c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e8d8ecb686c5078d", "scanner": "scanner-primary", "fingerprint": "101fc8e63fbcce4c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tokyo-scrape-and-post.yml"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-9af6a7a7f736e101", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "35ea121ad8c97a24", "scanner": "scanner-primary", "fingerprint": "9af6a7a7f736e101", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tokyo-scrape-and-post.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f9fd80a0ed6621c8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "08fb0c606fa03aa8", "scanner": "scanner-primary", "fingerprint": "f9fd80a0ed6621c8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-instagram-tokens.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-f9fd80a0ed6621c8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "524fd085f332d431", "scanner": "scanner-primary", "fingerprint": "f9fd80a0ed6621c8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-instagram-tokens.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-3ffa42a5438c18f9", "level": "note", "message": {"text": "Very large file: tokyo/main_scraper.py (2710 lines)"}, "properties": {"repobilityId": "8b688eeb4dee5d61", "scanner": "scanner-primary", "fingerprint": "3ffa42a5438c18f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-51f74c3eaf0b1aaa", "level": "note", "message": {"text": "Very large file: taipei/main_scraper.py (1300 lines)"}, "properties": {"repobilityId": "198d4d6b95c9353e", "scanner": "scanner-primary", "fingerprint": "51f74c3eaf0b1aaa", "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-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d1c7203913d31e62", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "94bfc4c3de6984ae", "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": "2cec42b534e42a6e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-9258651e5512f970", "level": "none", "message": {"text": "Commented-code block (7 lines) in north/venue_modules/whitworth_module.py:4"}, "properties": {"repobilityId": "815eabbf389e71bd", "scanner": "scanner-primary", "fingerprint": "9258651e5512f970", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-617830c4f3abf7ad", "level": "none", "message": {"text": "Commented-code block (6 lines) in north/venue_modules/york_art_gallery_module.py:3"}, "properties": {"repobilityId": "b9e4019fa43468ee", "scanner": "scanner-primary", "fingerprint": "617830c4f3abf7ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70554eefb9cd9acf", "level": "none", "message": {"text": "Commented-code block (5 lines) in north/venue_modules/_twam.py:2"}, "properties": {"repobilityId": "ce97985d88469bfd", "scanner": "scanner-primary", "fingerprint": "70554eefb9cd9acf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6584c0fb47f9cfa0", "level": "none", "message": {"text": "Commented-code block (5 lines) in north/venue_modules/manchester_art_gallery_module.py:2"}, "properties": {"repobilityId": "8a7650c0ff66d03c", "scanner": "scanner-primary", "fingerprint": "6584c0fb47f9cfa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fb7fcffde2b45bb", "level": "none", "message": {"text": "Commented-code block (7 lines) in north/venue_modules/bluecoat_module.py:1"}, "properties": {"repobilityId": "4a67b6dbe929b632", "scanner": "scanner-primary", "fingerprint": "4fb7fcffde2b45bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51514c6182788c6c", "level": "none", "message": {"text": "Commented-code block (6 lines) in north/venue_modules/sheffield_museums_module.py:3"}, "properties": {"repobilityId": "fc583a44d92a4902", "scanner": "scanner-primary", "fingerprint": "51514c6182788c6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-463ed83c0c9624a4", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/scraper_autofix_bot.py:26"}, "properties": {"repobilityId": "23406deffa9a02bd", "scanner": "scanner-primary", "fingerprint": "463ed83c0c9624a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b66c2422cc81ff8", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/cinema_health_monitor.py:85"}, "properties": {"repobilityId": "f5197218338af160", "scanner": "scanner-primary", "fingerprint": "5b66c2422cc81ff8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ebe2071025bd4825", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 london/generate_post2.py:346"}, "properties": {"repobilityId": "d1cda3eaf203e638", "scanner": "scanner-primary", "fingerprint": "ebe2071025bd4825", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3fce364037553bb5", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 london/upload_to_instagram.py:129"}, "properties": {"repobilityId": "dcb2ccde86528514", "scanner": "scanner-primary", "fingerprint": "3fce364037553bb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d08c30d784414021", "level": "none", "message": {"text": "Commented-code block (5 lines) in london/cinema_modules/backyard_cinema_module.py:6"}, "properties": {"repobilityId": "1b6e259044ae1e77", "scanner": "scanner-primary", "fingerprint": "d08c30d784414021", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4fc690e88ee1a14", "level": "none", "message": {"text": "Commented-code block (5 lines) in london/cinema_modules/regent_street_module.py:6"}, "properties": {"repobilityId": "66b9d31d9bde5a15", "scanner": "scanner-primary", "fingerprint": "d4fc690e88ee1a14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cddc3c5fadce2c28", "level": "none", "message": {"text": "Commented-code block (7 lines) in london/cinema_modules/olympic_studios_module.py:68"}, "properties": {"repobilityId": "21775380308922d7", "scanner": "scanner-primary", "fingerprint": "cddc3c5fadce2c28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4f312a5439f23d6", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 manchester/generate_post2.py:345"}, "properties": {"repobilityId": "a88182c47405d5b3", "scanner": "scanner-primary", "fingerprint": "b4f312a5439f23d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84a06fa3a8ee2aee", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 manchester/upload_to_instagram.py:121"}, "properties": {"repobilityId": "c76f3b9f42170f99", "scanner": "scanner-primary", "fingerprint": "84a06fa3a8ee2aee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9467f7fd18e57d8", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/hero_experiments.py:257"}, "properties": {"repobilityId": "95d79457376fb75c", "scanner": "scanner-primary", "fingerprint": "c9467f7fd18e57d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0cd1771daa7adab1", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/generate_post2.py:550"}, "properties": {"repobilityId": "1acf2464b68fba22", "scanner": "scanner-primary", "fingerprint": "0cd1771daa7adab1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca70b842ee707c53", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/upload_to_instagram.py:49"}, "properties": {"repobilityId": "dd702fff35b617ed", "scanner": "scanner-primary", "fingerprint": "ca70b842ee707c53", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f33f1902d26333a1", "level": "note", "message": {"text": "Legacy-named symbol `_merge_eiga_with_legacy` in tokyo/main_scraper.py:941"}, "properties": {"repobilityId": "17f8143d8ba6a01e", "scanner": "scanner-primary", "fingerprint": "f33f1902d26333a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ba8e70b8117fe183", "level": "none", "message": {"text": "Commented-code block (8 lines) in tokyo/cinema_modules/bluestudio_module.py:1"}, "properties": {"repobilityId": "6e8af86854fcc406", "scanner": "scanner-primary", "fingerprint": "ba8e70b8117fe183", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf3a5e48c1bfb1dc", "level": "none", "message": {"text": "Commented-code block (6 lines) in tokyo/cinema_modules/kino_cinema_module.py:108"}, "properties": {"repobilityId": "f0b00a0e9e4d609b", "scanner": "scanner-primary", "fingerprint": "bf3a5e48c1bfb1dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-054a74d9773fc238", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tokyo/cinema_modules/generate_post3.py:426"}, "properties": {"repobilityId": "551f9ae429eba48f", "scanner": "scanner-primary", "fingerprint": "054a74d9773fc238", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "addd1782f88c57da", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "e3b9a05916473c1f", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "a5f6714bba5aef37", "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": "9bc15c050ad6b2d6", "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": "f86f5cba3b9d7933", "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": "70fbd637bdeebaf1", "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": "1a46b5266b126007", "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": "761ef3785fa296ee", "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": "0854fab560370968", "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": "f4f8be81d29ffa27", "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": "5fbc7c6de94d3727", "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": "ead749479ccb5a13", "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": "5fa529496002d0b5", "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": "6119953c73320cf3", "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": "ea00d39cef86af15", "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": "5db7cba8135b3bd3", "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": "10d9afff6a77b474", "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": "4e3bd1b7fb26aa4c", "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": "47087ce06024b8d9", "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": "f447e1b4839ac360", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}