{"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-963b15634d7b5202", "name": "Possibly dead Python function: say", "shortDescription": {"text": "Possibly dead Python function: say"}, "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-0478b29f085d7883", "name": "Possibly dead Python function: led", "shortDescription": {"text": "Possibly dead Python function: led"}, "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-8810dfa9634df9c9", "name": "Possibly dead Python function: size_of", "shortDescription": {"text": "Possibly dead Python function: size_of"}, "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-608400c866eee2f3", "name": "Possibly dead Python function: budget_build", "shortDescription": {"text": "Possibly dead Python function: budget_build"}, "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-2551fbeffb9a625c", "name": "Possibly dead Python function: ai_review_code", "shortDescription": {"text": "Possibly dead Python function: ai_review_code"}, "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-84b38d11217b427d", "name": "Possibly dead Python function: factory", "shortDescription": {"text": "Possibly dead Python function: factory"}, "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-9c05b86bfa8c54af", "name": "Possibly dead Python function: ai_chat_start", "shortDescription": {"text": "Possibly dead Python function: ai_chat_start"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-746ccec055dd5b0c", "name": "Possibly dead Python function: ai_chat_poll", "shortDescription": {"text": "Possibly dead Python function: ai_chat_poll"}, "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-d310a57a0ace33df", "name": "Possibly dead Python function: pick_photo", "shortDescription": {"text": "Possibly dead Python function: pick_photo"}, "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-4b1b69f8594049d7", "name": "Possibly dead Python function: voice_command", "shortDescription": {"text": "Possibly dead Python function: voice_command"}, "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-a22a143a4931f3cb", "name": "Possibly dead Python function: visit_Import", "shortDescription": {"text": "Possibly dead Python function: visit_Import"}, "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-b6177ac6f13e904d", "name": "Possibly dead Python function: visit_ImportFrom", "shortDescription": {"text": "Possibly dead Python function: visit_ImportFrom"}, "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-8ac1bb3506f394f2", "name": "Possibly dead Python function: visit_Attribute", "shortDescription": {"text": "Possibly dead Python function: visit_Attribute"}, "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-ea9604d5a459a19f", "name": "Possibly dead Python function: visit_Name", "shortDescription": {"text": "Possibly dead Python function: visit_Name"}, "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-4da6465f17caa675", "name": "Possibly dead Python function: visit_arg", "shortDescription": {"text": "Possibly dead Python function: visit_arg"}, "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-3a4c8ca9c5fcbefc", "name": "Stray `console.log` in TS/JS \u2014 qa_resize_probe.js:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 qa_resize_probe.js:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53ceed4497cb3028", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/bundle.js:2880", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/bundle.js:2880"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aedf0c4ae823120d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/Editor.jsx:148", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/Editor.jsx:148"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3225f911f0f7006b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/app.jsx:1239", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/app.jsx:1239"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-50231aee0b73aceb", "name": "Insecure pattern 'node_child_process' in qa_resize_probe.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in qa_resize_probe.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f4b91a516218b8e", "name": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/bundle.js:2880", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/bundle.js:2880"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-222219c1eeb05a90", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/bundle.js:2298", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/bundle.js:2298"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-337793b3fc0d38f2", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/Viewport3D.jsx:53", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/Viewport3D.jsx:53"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6dd8cb0162f8edea", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/index.html:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/index.html:56"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df53ac11a8a2333b", "name": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/Editor.jsx:148", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/Editor.jsx:148"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-330efdb590db997d", "name": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/app.jsx:1239", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/app.jsx:1239"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0c7f5cf221a5512", "name": "Insecure pattern 'exec_used' in src/robolearn/runtime/executor.py:91", "shortDescription": {"text": "Insecure pattern 'exec_used' in src/robolearn/runtime/executor.py:91"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "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-46c644c6227e4d4a", "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-1838a141491ce38c", "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-39df04383af0c198", "name": "Very large file: src/robolearn/assets/web/bundle.js (6898 lines)", "shortDescription": {"text": "Very large file: src/robolearn/assets/web/bundle.js (6898 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-a903ade1756cf24b", "name": "Very large file: src/robolearn/assets/web/app.jsx (1922 lines)", "shortDescription": {"text": "Very large file: src/robolearn/assets/web/app.jsx (1922 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-bfe673ef1db89361", "name": "Very large file: src/robolearn/web/app.py (1469 lines)", "shortDescription": {"text": "Very large file: src/robolearn/web/app.py (1469 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 72 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 24 placeholder/mock markers across 12 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a1b8524bc944c3c", "name": "Legacy-named symbol `test_theme_settings_with_theme_returns_copy` in tests/unit/test_ui_main_window.py:52", "shortDescription": {"text": "Legacy-named symbol `test_theme_settings_with_theme_returns_copy` in tests/unit/test_ui_main_window.py:52"}, "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-ba1dfb22e516a0e8", "name": "Commented-code block (7 lines) in tests/unit/test_store.py:15", "shortDescription": {"text": "Commented-code block (7 lines) in tests/unit/test_store.py:15"}, "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-b7b8ef5389cdcbf1", "name": "Legacy-named symbol `test_events_returns_a_copy` in tests/unit/test_tracer.py:57", "shortDescription": {"text": "Legacy-named symbol `test_events_returns_a_copy` in tests/unit/test_tracer.py:57"}, "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-afcd804c0e27a012", "name": "Commented-code block (5 lines) in tests/fixtures/render_bundle.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/fixtures/render_bundle.cjs: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-3b0f2b3a029bd424", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/build_exe.py:70", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/build_exe.py:70"}, "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-4f007ea621c75b49", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/make_ai_model.py:45", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/make_ai_model.py:45"}, "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-2ff6048d2f56eb6c", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/train_ai.py:150", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/train_ai.py:150"}, "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-676e471cc713497b", "name": "Commented-code block (7 lines) in src/robolearn/assets/web/Viewport.jsx:16", "shortDescription": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/Viewport.jsx:16"}, "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-4cf4a4a4adad3b16", "name": "Commented-code block (7 lines) in src/robolearn/assets/web/bundle.js:167", "shortDescription": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/bundle.js:167"}, "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-f8553426146828b3", "name": "Commented-code block (7 lines) in src/robolearn/assets/web/tweaks-panel.jsx:16", "shortDescription": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/tweaks-panel.jsx:16"}, "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-d60ce9a1bb33f9d4", "name": "Commented-code block (7 lines) in src/robolearn/assets/web/terrains.jsx:100", "shortDescription": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/terrains.jsx:100"}, "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-1e2d0b2bfecdfb0d", "name": "Commented-code block (5 lines) in src/robolearn/assets/web/interpreter.js:39", "shortDescription": {"text": "Commented-code block (5 lines) in src/robolearn/assets/web/interpreter.js:39"}, "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-e631f4bc51e34ceb", "name": "Commented-code block (7 lines) in src/robolearn/assets/web/app.jsx:669", "shortDescription": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/app.jsx:669"}, "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-861b2ecb4bb2a34c", "name": "Commented-code block (7 lines) in src/robolearn/memory/store.py:409", "shortDescription": {"text": "Commented-code block (7 lines) in src/robolearn/memory/store.py:409"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/robolearn/ai/ollama_client.py:generate, src/robolearn/ai/ollama_client.py:generate_stream\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/robolearn/ui/charts.py:redraw, src/robolearn/ui/charts.py:redraw, src/robolearn/ui/charts.py:redraw, src/robolearn/ui/charts.py:redraw\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/22035"}, "properties": {"repository": "vaibhav4046/robolearn", "repoUrl": "https://github.com/vaibhav4046/robolearn", "branch": "main"}, "results": [{"ruleId": "scanner-963b15634d7b5202", "level": "note", "message": {"text": "Possibly dead Python function: say"}, "properties": {"repobilityId": "fddeed96ec478e9f", "scanner": "scanner-primary", "fingerprint": "963b15634d7b5202", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/rover_api.py:283"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0478b29f085d7883", "level": "note", "message": {"text": "Possibly dead Python function: led"}, "properties": {"repobilityId": "c0b683f2ad8cac19", "scanner": "scanner-primary", "fingerprint": "0478b29f085d7883", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/rover_api.py:293"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8810dfa9634df9c9", "level": "note", "message": {"text": "Possibly dead Python function: size_of"}, "properties": {"repobilityId": "89d215d3a1c5b22a", "scanner": "scanner-primary", "fingerprint": "8810dfa9634df9c9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:377"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-608400c866eee2f3", "level": "note", "message": {"text": "Possibly dead Python function: budget_build"}, "properties": {"repobilityId": "757969652fe4710c", "scanner": "scanner-primary", "fingerprint": "608400c866eee2f3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:423"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2551fbeffb9a625c", "level": "note", "message": {"text": "Possibly dead Python function: ai_review_code"}, "properties": {"repobilityId": "5a4460e343ba7769", "scanner": "scanner-primary", "fingerprint": "2551fbeffb9a625c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:646"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84b38d11217b427d", "level": "note", "message": {"text": "Possibly dead Python function: factory"}, "properties": {"repobilityId": "c7b447ec83f467a6", "scanner": "scanner-primary", "fingerprint": "84b38d11217b427d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:703"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c05b86bfa8c54af", "level": "note", "message": {"text": "Possibly dead Python function: ai_chat_start"}, "properties": {"repobilityId": "e624db890862f992", "scanner": "scanner-primary", "fingerprint": "9c05b86bfa8c54af", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:955"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-746ccec055dd5b0c", "level": "note", "message": {"text": "Possibly dead Python function: ai_chat_poll"}, "properties": {"repobilityId": "9875832e4c079ad2", "scanner": "scanner-primary", "fingerprint": "746ccec055dd5b0c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:1045"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d310a57a0ace33df", "level": "note", "message": {"text": "Possibly dead Python function: pick_photo"}, "properties": {"repobilityId": "9e6e2bbab1df7336", "scanner": "scanner-primary", "fingerprint": "d310a57a0ace33df", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:1074"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4b1b69f8594049d7", "level": "note", "message": {"text": "Possibly dead Python function: voice_command"}, "properties": {"repobilityId": "da7ded14449ea71d", "scanner": "scanner-primary", "fingerprint": "4b1b69f8594049d7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/web/app.py:1147"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a22a143a4931f3cb", "level": "note", "message": {"text": "Possibly dead Python function: visit_Import"}, "properties": {"repobilityId": "66cd6a2eba488b69", "scanner": "scanner-primary", "fingerprint": "a22a143a4931f3cb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/runtime/sandbox.py:66"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b6177ac6f13e904d", "level": "note", "message": {"text": "Possibly dead Python function: visit_ImportFrom"}, "properties": {"repobilityId": "9943a88b95a56d70", "scanner": "scanner-primary", "fingerprint": "b6177ac6f13e904d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/runtime/sandbox.py:71"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ac1bb3506f394f2", "level": "note", "message": {"text": "Possibly dead Python function: visit_Attribute"}, "properties": {"repobilityId": "91b4d72b3a087b4d", "scanner": "scanner-primary", "fingerprint": "8ac1bb3506f394f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/runtime/sandbox.py:78"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea9604d5a459a19f", "level": "note", "message": {"text": "Possibly dead Python function: visit_Name"}, "properties": {"repobilityId": "c16c7f6e311e5eb3", "scanner": "scanner-primary", "fingerprint": "ea9604d5a459a19f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/runtime/sandbox.py:85"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4da6465f17caa675", "level": "note", "message": {"text": "Possibly dead Python function: visit_arg"}, "properties": {"repobilityId": "421d6b40605eed89", "scanner": "scanner-primary", "fingerprint": "4da6465f17caa675", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/runtime/sandbox.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a4c8ca9c5fcbefc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 qa_resize_probe.js:84"}, "properties": {"repobilityId": "8cd79823e78246a2", "scanner": "scanner-primary", "fingerprint": "3a4c8ca9c5fcbefc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53ceed4497cb3028", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/bundle.js:2880"}, "properties": {"repobilityId": "ac36884e351ae0ea", "scanner": "scanner-primary", "fingerprint": "53ceed4497cb3028", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-aedf0c4ae823120d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/Editor.jsx:148"}, "properties": {"repobilityId": "9535e9484437ba90", "scanner": "scanner-primary", "fingerprint": "aedf0c4ae823120d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3225f911f0f7006b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/robolearn/assets/web/app.jsx:1239"}, "properties": {"repobilityId": "0f31019563e80dde", "scanner": "scanner-primary", "fingerprint": "3225f911f0f7006b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-50231aee0b73aceb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in qa_resize_probe.js:3"}, "properties": {"repobilityId": "d02b051f3257f1b7", "scanner": "scanner-primary", "fingerprint": "50231aee0b73aceb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qa_resize_probe.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-3f4b91a516218b8e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/bundle.js:2880"}, "properties": {"repobilityId": "c216125691094c5b", "scanner": "scanner-primary", "fingerprint": "3f4b91a516218b8e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/assets/web/bundle.js"}, "region": {"startLine": 2880}}}]}, {"ruleId": "scanner-222219c1eeb05a90", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/bundle.js:2298"}, "properties": {"repobilityId": "ff76c83d0c150b24", "scanner": "scanner-primary", "fingerprint": "222219c1eeb05a90", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/assets/web/bundle.js"}, "region": {"startLine": 2298}}}]}, {"ruleId": "scanner-337793b3fc0d38f2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/Viewport3D.jsx:53"}, "properties": {"repobilityId": "684be4e291f5160c", "scanner": "scanner-primary", "fingerprint": "337793b3fc0d38f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/assets/web/Viewport3D.jsx"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-6dd8cb0162f8edea", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/robolearn/assets/web/index.html:56"}, "properties": {"repobilityId": "3b154a094b4c5be6", "scanner": "scanner-primary", "fingerprint": "6dd8cb0162f8edea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/assets/web/index.html"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-df53ac11a8a2333b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/Editor.jsx:148"}, "properties": {"repobilityId": "694cdd5ca06d3624", "scanner": "scanner-primary", "fingerprint": "df53ac11a8a2333b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/assets/web/Editor.jsx"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-330efdb590db997d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/robolearn/assets/web/app.jsx:1239"}, "properties": {"repobilityId": "f4729ade0a3cf56f", "scanner": "scanner-primary", "fingerprint": "330efdb590db997d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/assets/web/app.jsx"}, "region": {"startLine": 1239}}}]}, {"ruleId": "scanner-e0c7f5cf221a5512", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in src/robolearn/runtime/executor.py:91"}, "properties": {"repobilityId": "8ead5e6871eef892", "scanner": "scanner-primary", "fingerprint": "e0c7f5cf221a5512", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/robolearn/runtime/executor.py"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2644034c718fb80d", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0ad86557a2848db6", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5ab0c5bd71e63ad8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b0f359fc82dc1097", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0dc584a111ffc00", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-39df04383af0c198", "level": "note", "message": {"text": "Very large file: src/robolearn/assets/web/bundle.js (6898 lines)"}, "properties": {"repobilityId": "9f11c68660d625de", "scanner": "scanner-primary", "fingerprint": "39df04383af0c198", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a903ade1756cf24b", "level": "note", "message": {"text": "Very large file: src/robolearn/assets/web/app.jsx (1922 lines)"}, "properties": {"repobilityId": "8899dfbb06cdff8a", "scanner": "scanner-primary", "fingerprint": "a903ade1756cf24b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bfe673ef1db89361", "level": "note", "message": {"text": "Very large file: src/robolearn/web/app.py (1469 lines)"}, "properties": {"repobilityId": "a31c3443dd26277a", "scanner": "scanner-primary", "fingerprint": "bfe673ef1db89361", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ab64762a6bbf2edd", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "13b41626b606b694", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "aea467c89d165f01", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "e02bf44252b64bf6", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "d5224070e6ff9966", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-6a1b8524bc944c3c", "level": "note", "message": {"text": "Legacy-named symbol `test_theme_settings_with_theme_returns_copy` in tests/unit/test_ui_main_window.py:52"}, "properties": {"repobilityId": "593465025d97c231", "scanner": "scanner-primary", "fingerprint": "6a1b8524bc944c3c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ba1dfb22e516a0e8", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/unit/test_store.py:15"}, "properties": {"repobilityId": "f4eaf68ff80bc335", "scanner": "scanner-primary", "fingerprint": "ba1dfb22e516a0e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7b8ef5389cdcbf1", "level": "note", "message": {"text": "Legacy-named symbol `test_events_returns_a_copy` in tests/unit/test_tracer.py:57"}, "properties": {"repobilityId": "0ba13e2ef623fa41", "scanner": "scanner-primary", "fingerprint": "b7b8ef5389cdcbf1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-afcd804c0e27a012", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/fixtures/render_bundle.cjs:1"}, "properties": {"repobilityId": "7743ff8b50fc620d", "scanner": "scanner-primary", "fingerprint": "afcd804c0e27a012", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b0f2b3a029bd424", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/build_exe.py:70"}, "properties": {"repobilityId": "420196d0f1e0f66a", "scanner": "scanner-primary", "fingerprint": "3b0f2b3a029bd424", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f007ea621c75b49", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/make_ai_model.py:45"}, "properties": {"repobilityId": "69beea583e1c53e0", "scanner": "scanner-primary", "fingerprint": "4f007ea621c75b49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ff6048d2f56eb6c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/train_ai.py:150"}, "properties": {"repobilityId": "8a737f2870825a35", "scanner": "scanner-primary", "fingerprint": "2ff6048d2f56eb6c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-676e471cc713497b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/Viewport.jsx:16"}, "properties": {"repobilityId": "a902e5421473a78e", "scanner": "scanner-primary", "fingerprint": "676e471cc713497b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cf4a4a4adad3b16", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/bundle.js:167"}, "properties": {"repobilityId": "4d7bc315764c8227", "scanner": "scanner-primary", "fingerprint": "4cf4a4a4adad3b16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8553426146828b3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/tweaks-panel.jsx:16"}, "properties": {"repobilityId": "e8d68b63d5658d59", "scanner": "scanner-primary", "fingerprint": "f8553426146828b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d60ce9a1bb33f9d4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/terrains.jsx:100"}, "properties": {"repobilityId": "9a6a591b325f6057", "scanner": "scanner-primary", "fingerprint": "d60ce9a1bb33f9d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e2d0b2bfecdfb0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/robolearn/assets/web/interpreter.js:39"}, "properties": {"repobilityId": "9334e91980337bca", "scanner": "scanner-primary", "fingerprint": "1e2d0b2bfecdfb0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e631f4bc51e34ceb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/robolearn/assets/web/app.jsx:669"}, "properties": {"repobilityId": "8eb286f83686b450", "scanner": "scanner-primary", "fingerprint": "e631f4bc51e34ceb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-861b2ecb4bb2a34c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/robolearn/memory/store.py:409"}, "properties": {"repobilityId": "fec58211849d9786", "scanner": "scanner-primary", "fingerprint": "861b2ecb4bb2a34c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ade7276bc2d40dc4", "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": "aae597192cec9232", "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": "1dec6ac79eedd3eb", "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": "ef40a348d91620d8", "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": "373c13fc4561826e", "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": "f2cec0dae30e87a3", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "0c8c78e425b92705", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "9e00f34f912f667e", "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": "cac67806db5752e6", "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": "a9d92d43697142e4", "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": "6009a358f37f53e4", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}