← Legacy view v2 (rp.*)

harry0703/moneyprinterturbo

https://github.com/harry0703/MoneyPrinterTurbo.git · lang: python · LOC: · source: user_submitted

Quality
80.1
Grade A-
Security
100.0
Findings
84
0 critical · 51 high
Status
completed
May 31, 2026 19:52
high: 51 medium: 17 info: 13 low: 3
Top rules by occurrence
RuleSeverityCount
MINED108 self.attribute used but never assigned in __init__ high 25
MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth high 8
MINED106 Phantom test coverage (assertion-free test) high 5
COMP001 [COMP001] High cognitive complexity: Function `load_yfinanc… low 4
MINED111 Bare except continues silently medium 4
MINED050 Stub Only Function info 4
MINED072 Python Pass Only Class info 3
SEC078 Python: requests without timeout high 2
MINED067 Python Requests No Timeout info 2
MINED001 Bare Except Pass high 2
First 84 findings (severity-sorted)
high DKR014 Dockerfile copies the entire context without .dockerignore
Dockerfile:59 · conf 0.92
Dockerfile copies the entire context without .dockerignore
high MINED001 Bare Except Pass CWE-755
app/models/exception.py:27 · conf 1.00
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows everything including KeyboardInterrupt and bugs.
high MINED001 Bare Except Pass CWE-755
app/services/state.py:146 · conf 1.00
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows everything including KeyboardInterrupt and bugs.
high MINED004 Weak Crypto CWE-327
app/services/material.py:176 · conf 1.00
[MINED004] Weak Crypto: MD5/SHA1/DES/RC4 used for security context (not just checksums).
high MINED004 Weak Crypto CWE-327
app/utils/utils.py:208 · conf 1.00
[MINED004] Weak Crypto: MD5/SHA1/DES/RC4 used for security context (not just checksums).
high MINED014 Disabled Tls Verify CWE-295
app/services/material.py:30 · conf 1.00
[MINED014] Disabled Tls Verify: verify=False in requests, rejectUnauthorized:false in node, InsecureSkipVerify:true in Go.
high MINED106 Phantom test coverage (assertion-free test) CWE-1126
test/services/test_llm.py:234 · conf 1.00
[MINED106] Phantom test coverage: test_ollama_default_base_url_uses_localhost_outside_container: Test function `test_ollama_default_base_url_uses_localhost_outside_container` runs code but contains n…
high MINED106 Phantom test coverage (assertion-free test) CWE-1126
test/services/test_llm.py:243 · conf 1.00
[MINED106] Phantom test coverage: test_ollama_default_base_url_uses_host_gateway_inside_container: Test function `test_ollama_default_base_url_uses_host_gateway_inside_container` runs code but contai…
high MINED106 Phantom test coverage (assertion-free test) CWE-1126
test/services/test_llm.py:256 · conf 1.00
[MINED106] Phantom test coverage: test_ollama_default_base_url_falls_back_to_container_gateway: Test function `test_ollama_default_base_url_falls_back_to_container_gateway` runs code but contains no …
high MINED106 Phantom test coverage (assertion-free test) CWE-1126
test/services/test_llm.py:270 · conf 1.00
[MINED106] Phantom test coverage: test_ollama_explicit_base_url_takes_precedence: Test function `test_ollama_explicit_base_url_takes_precedence` runs code but contains no assert / expect / should cal…
high MINED106 Phantom test coverage (assertion-free test) CWE-1126
test/services/test_task.py:48 · conf 1.00
[MINED106] Phantom test coverage: test_task_local_materials: Test function `test_task_local_materials` runs code but contains no assert / expect / should call — it passes regardless of behaviour. Add…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_task.py:39 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_generate_script_forwards_advanced_prompt_options` of class `TestTaskService` reads `self.assertEqual`, but no assignmen…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:37 · conf 1.00
[MINED108] `self.original_app_config` used but never assigned in __init__: Method `setUp` of class `TestSecurityControls` reads `self.original_app_config`, but no assignment to it exists in __init__ …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:41 · conf 1.00
[MINED108] `self.original_app_config` used but never assigned in __init__: Method `tearDown` of class `TestSecurityControls` reads `self.original_app_config`, but no assignment to it exists in __init…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:64 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_task_query_returns_relative_task_url_without_mutating_state` of class `TestSecurityControls` reads `self.assertEqual`, …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:65 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_task_query_returns_relative_task_url_without_mutating_state` of class `TestSecurityControls` reads `self.assertEqual`, …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:79 · conf 1.00
[MINED108] `self.assertRaises` used but never assigned in __init__: Method `test_in_memory_task_manager_rejects_when_queue_is_full` of class `TestSecurityControls` reads `self.assertRaises`, but no a…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:84 · conf 1.00
[MINED108] `self.test_img_path` used but never assigned in __init__: Method `setUp` of class `TestVideoService` reads `self.test_img_path`, but no assignment to it exists in __init__ (and no class-le…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:90 · conf 1.00
[MINED108] `self.test_img_path` used but never assigned in __init__: Method `test_preprocess_video` of class `TestVideoService` reads `self.test_img_path`, but no assignment to it exists in __init__ …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:91 · conf 1.00
[MINED108] `self.test_img_path` used but never assigned in __init__: Method `test_preprocess_video` of class `TestVideoService` reads `self.test_img_path`, but no assignment to it exists in __init__ …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:91 · conf 1.00
[MINED108] `self.fail` used but never assigned in __init__: Method `test_preprocess_video` of class `TestVideoService` reads `self.fail`, but no assignment to it exists in __init__ (and no class-leve…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:95 · conf 1.00
[MINED108] `self.test_img_path` used but never assigned in __init__: Method `test_preprocess_video` of class `TestVideoService` reads `self.test_img_path`, but no assignment to it exists in __init__ …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:108 · conf 1.00
[MINED108] `self.assertIsNotNone` used but never assigned in __init__: Method `test_preprocess_video` of class `TestVideoService` reads `self.assertIsNotNone`, but no assignment to it exists in __ini…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:109 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_preprocess_video` of class `TestVideoService` reads `self.assertEqual`, but no assignment to it exists in __init__ (and…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:110 · conf 1.00
[MINED108] `self.assertTrue` used but never assigned in __init__: Method `test_preprocess_video` of class `TestVideoService` reads `self.assertTrue`, but no assignment to it exists in __init__ (and n…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:131 · conf 1.00
[MINED108] `self.test_img_path` used but never assigned in __init__: Method `test_preprocess_video_rejects_material_outside_local_videos` of class `TestVideoService` reads `self.test_img_path`, but n…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:135 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_preprocess_video_rejects_material_outside_local_videos` of class `TestVideoService` reads `self.assertEqual`, but no as…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:147 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_get_bgm_file_accepts_song_directory_filename` of class `TestVideoService` reads `self.assertEqual`, but no assignment t…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:163 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_get_bgm_file_accepts_project_relative_song_path` of class `TestVideoService` reads `self.assertEqual`, but no assignmen…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:177 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_get_bgm_file_rejects_path_outside_song_directory` of class `TestVideoService` reads `self.assertEqual`, but no assignme…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:182 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_get_ffmpeg_binary_uses_configured_env_path` of class `TestVideoService` reads `self.assertEqual`, but no assignment to …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:196 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_get_ffmpeg_binary_falls_back_to_imageio_ffmpeg` of class `TestVideoService` reads `self.assertEqual`, but no assignment…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:206 · conf 1.00
[MINED108] `self.fail` used but never assigned in __init__: Method `test_open_video_clip_quietly_suppresses_moviepy_stdout` of class `TestVideoService` reads `self.fail`, but no assignment to it exis…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:213 · conf 1.00
[MINED108] `self.assertEqual` used but never assigned in __init__: Method `test_open_video_clip_quietly_suppresses_moviepy_stdout` of class `TestVideoService` reads `self.assertEqual`, but no assignm…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:214 · conf 1.00
[MINED108] `self.assertIsNone` used but never assigned in __init__: Method `test_open_video_clip_quietly_suppresses_moviepy_stdout` of class `TestVideoService` reads `self.assertIsNone`, but no assig…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
test/services/test_video.py:215 · conf 1.00
[MINED108] `self.assertGreater` used but never assigned in __init__: Method `test_open_video_clip_quietly_suppresses_moviepy_stdout` of class `TestVideoService` reads `self.assertGreater`, but no ass…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/llm.py:23 · conf 0.80
[MINED112] FastAPI POST /scripts has no auth: Handler `generate_video_script` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the f…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/llm.py:40 · conf 0.80
[MINED112] FastAPI POST /terms has no auth: Handler `generate_video_terms` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the func…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/video.py:116 · conf 0.80
[MINED112] FastAPI POST /videos has no auth: Handler `create_video` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function bo…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/video.py:123 · conf 0.80
[MINED112] FastAPI POST /subtitle has no auth: Handler `create_subtitle` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the functi…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/video.py:130 · conf 0.80
[MINED112] FastAPI POST /audio has no auth: Handler `create_audio` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function bod…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/video.py:217 · conf 0.80
[MINED112] FastAPI DELETE /tasks/{task_id} has no auth: Handler `delete_video` is registered with router/app.delete(...) but no Depends/Security parameter is declared and no auth marker appears in th…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/video.py:263 · conf 0.80
[MINED112] FastAPI POST /musics has no auth: Handler `upload_bgm_file` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
app/controllers/v1/video.py:315 · conf 0.80
[MINED112] FastAPI POST /video_materials has no auth: Handler `upload_video_material_file` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker app…
high MINED118 Dockerfile FROM not pinned by sha256 digest CWE-829
Dockerfile:2 · conf 0.90
[MINED118] Dockerfile FROM `python:3.11-slim-bullseye` not pinned by digest: `FROM python:3.11-slim-bullseye` resolves the tag at build time. The registry CAN re-push a different image for the same t…
high SEC029 Server-Side Request Forgery (SSRF) — outbound HTTP from user input
app/controllers/manager/redis_manager.py:23 · conf 1.00
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.25…
high SEC029 Server-Side Request Forgery (SSRF) — outbound HTTP from user input
app/services/material.py:74 · conf 1.00
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.25…
high SEC078 Python: requests without timeout
app/services/material.py:74 · conf 1.00
[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsive server, causing thread exhaustion and ReDoS. Ported from bandit B113 (Apache-…
high SEC078 Python: requests without timeout
app/services/upload_post.py:80 · conf 1.00
[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsive server, causing thread exhaustion and ReDoS. Ported from bandit B113 (Apache-…
high SEC128 Async function without await — fire-and-forget Promise (AI mistake)
app/services/state.py:133 · conf 1.00
[SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call invoked without `await` returns an unhandled Promise. The outer function resolves before the inner work comple…
high SEC135 Auth/permission check missing on AI-generated endpoint
app/controllers/v1/llm.py:18 · conf 1.00
[SEC135] Auth/permission check missing on AI-generated endpoint: Mutating HTTP endpoint generated by an AI agent without an auth decorator or middleware. The number-one production-incident pattern we…
medium AUC001 [AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks but does not define .repobility/access.yml or equivalent authorization documentation.
· conf 0.92
[AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks but does not define .repobility/access.yml or equivalent authorization documentation.
medium AUC002 [AUC002] Low visible authorization coverage in route inventory: Only 0.0% of discovered routes show nearby authentication, authorization, middleware, or public-route evidence.
· conf 0.74
[AUC002] Low visible authorization coverage in route inventory: Only 0.0% of discovered routes show nearby authentication, authorization, middleware, or public-route evidence.
medium AUC012 [AUC012] FastAPI interactive docs may be exposed by framework defaults: FastAPI exposes /docs, /redoc, and /openapi.json by default. Public production APIs should explicitly disable those defaults, protect them behind admin authentication, or publish a reviewed OpenAPI spec with declared security requirements.
· conf 0.72
[AUC012] FastAPI interactive docs may be exposed by framework defaults: FastAPI exposes /docs, /redoc, and /openapi.json by default. Public production APIs should explicitly disable those defaults, p…
medium CFG006 [CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts.
· conf 1.00
[CFG006] Missing .gitignore: No .gitignore file. Risk of committing secrets and build artifacts.
medium COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
app/services/material.py:168 · conf 0.95
[COMP001] High cognitive complexity: Function `save_video` has cognitive complexity 16 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested b…
medium COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
app/services/material.py:228 · conf 0.95
[COMP001] High cognitive complexity: Function `download_videos` has cognitive complexity 19 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nes…
medium CORE_NO_CI No CI/CD configuration found
No CI/CD configuration found
medium DKR001 Docker final stage has no non-root USER
Dockerfile:2 · conf 0.82
Docker final stage has no non-root USER
medium DKR007 Docker build context has no .dockerignore
.dockerignore · conf 0.90
Docker build context has no .dockerignore
medium MINED111 Bare except continues silently
app/services/llm.py:490 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium MINED111 Bare except continues silently
app/services/voice.py:1433 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium MINED111 Bare except continues silently
app/utils/utils.py:221 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium MINED111 Bare except continues silently
test/services/test_video.py:311 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium SEC014 SSL Verification Disabled
app/services/material.py:30 · conf 1.00
[SEC014] SSL Verification Disabled: SSL certificate verification is disabled, allowing man-in-the-middle attacks.
medium SEC034 Log Injection / Log Forging — unsanitized user input in log
app/services/material.py:71 · conf 1.00
[SEC034] Log Injection / Log Forging — unsanitized user input in log: User input is logged without sanitizing newlines or control characters. Attackers inject `\n` to forge fake log entries, hide tra…
medium SEC127 AI agent stub — TODO: implement / pass placeholder body
app/controllers/manager/base_manager.py:19 · conf 1.00
[SEC127] AI agent stub — TODO: implement / pass placeholder body: Function body left as TODO/pass/raise NotImplementedError after an AI scaffolding pass. The route appears to exist (and may even pass…
medium WEB003 Public web service has no security.txt
.well-known/security.txt · conf 0.78
Public web service has no security.txt
low AUC005 [AUC005] No authorization-focused tests detected: No test files with common authorization, ownership, 403, admin, or super_admin assertions were found.
· conf 0.76
[AUC005] No authorization-focused tests detected: No test files with common authorization, ownership, 403, admin, or super_admin assertions were found.
low COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
app/config/config.py:65 · conf 0.95
[COMP001] High cognitive complexity: Function `get_container_default_gateway_ip` has cognitive complexity 10 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to…
low SEC132 String concat where the language has interpolation (AI style drift)
main.py:8 · conf 1.00
[SEC132] String concat where the language has interpolation (AI style drift): String built by concatenation where the language has cleaner interpolation (Python f-strings since 3.6, JS template liter…
info COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
· conf 0.20
[COMP001] High cognitive complexity (and 8 more): Same pattern found in 8 additional files. Review if needed.
info MINED043 Http Not Https CWE-319
app/config/config.py:110 · conf 1.00
[MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle credentials or data.
info MINED050 Stub Only Function CWE-1188
· conf 0.20
[MINED050] Stub Only Function (and 1 more): Same pattern found in 1 additional files. Review if needed.
info MINED050 Stub Only Function CWE-1188
app/controllers/manager/base_manager.py:8 · conf 1.00
[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment.
info MINED050 Stub Only Function CWE-1188
app/models/exception.py:28 · conf 1.00
[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment.
info MINED050 Stub Only Function CWE-1188
app/models/schema.py:188 · conf 1.00
[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment.
info MINED065 Cors Wildcard CWE-942CWE-346
app/asgi.py:56 · conf 1.00
[MINED065] Cors Wildcard: Access-Control-Allow-Origin: * exposes the API to any browser origin. Acceptable for public read-only endpoints; dangerous when paired with credentials or write endpoints.
info MINED067 Python Requests No Timeout CWE-400
app/services/material.py:74 · conf 1.00
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever.
info MINED067 Python Requests No Timeout CWE-400
app/services/upload_post.py:80 · conf 1.00
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever.
info MINED072 Python Pass Only Class CWE-1188
app/controllers/manager/base_manager.py:7 · conf 1.00
[MINED072] Python Pass Only Class: class Foo: pass — stub waiting to be filled in.
info MINED072 Python Pass Only Class CWE-1188
app/models/exception.py:27 · conf 1.00
[MINED072] Python Pass Only Class: class Foo: pass — stub waiting to be filled in.
info MINED072 Python Pass Only Class CWE-1188
app/models/schema.py:187 · conf 1.00
[MINED072] Python Pass Only Class: class Foo: pass — stub waiting to be filled in.
info MINED079 Off By One Slice CWE-193
app/services/subtitle.py:174 · conf 1.00
[MINED079] Off By One Slice: range(len(x)+1), arr[i+1:i+n+1], or while i<=len(arr) — off-by-one risk.

Reading from rp.scan + rp.finding + rp.rule (unified schema, R78 series). Legacy data path unchanged. Compare with /scan/73fa1dd3-8519-4431-8a03-a547e973030a/.