{"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-88294efe95bb4cec", "name": "Possibly dead Python function: buffer_probe", "shortDescription": {"text": "Possibly dead Python function: buffer_probe"}, "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-854bd39068657df4", "name": "Possibly dead Python function: watchdog_check", "shortDescription": {"text": "Possibly dead Python function: watchdog_check"}, "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-250f4cf023e49045", "name": "Possibly dead Python function: tee_probe", "shortDescription": {"text": "Possibly dead Python function: tee_probe"}, "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-7adb36f534b0cfce", "name": "Possibly dead Python function: read_stdin", "shortDescription": {"text": "Possibly dead Python function: read_stdin"}, "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-7c7db18032a2abf7", "name": "Stray `console.log` in TS/JS \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:20"}, "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-605c6a63246d5450", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:9", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:9"}, "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-100c5546e660432b", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/DemoApp.jsx:260", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/DemoApp.jsx:260"}, "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-35a1697a371436f4", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useWebSocket.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useWebSocket.js:67"}, "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-c04de60efe8d04ce", "name": "Stray `console.log` in TS/JS \u2014 demo-server/test-azimuth.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 demo-server/test-azimuth.js:49"}, "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-abff1c6d1219823b", "name": "Stray `console.log` in TS/JS \u2014 demo-server/server.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 demo-server/server.js:61"}, "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-e9bd6bfdc5ff0f01", "name": "Stray `console.log` in TS/JS \u2014 demo-server/index.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 demo-server/index.js:33"}, "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-a5a56d01e0bd60bc", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-ffmpeg.js:140", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-ffmpeg.js:140"}, "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-b4b5d62ba554713a", "name": "Stray `console.log` in TS/JS \u2014 scripts/enrich-klv-azimuth.js:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-klv-azimuth.js:63"}, "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-71cb39f3e5448a3d", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-from-file.js:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-from-file.js:142"}, "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-6c09af2cea70c752", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-demo.js:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-demo.js:182"}, "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-fb4697fe471b928a", "name": "Stray `console.log` in TS/JS \u2014 simulator/index.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 simulator/index.js:35"}, "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-96a05c674d2c8c6c", "name": "Stray `console.log` in TS/JS \u2014 backend/src/index.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/index.js:56"}, "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-a401d4d6b91ccf69", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/udp-duplicator.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/udp-duplicator.js:45"}, "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-38ff34ba224b1e63", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/gstreamer-webrtc.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/gstreamer-webrtc.js:34"}, "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-6be2e67f52a5a48f", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/webrtc-gateway.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/webrtc-gateway.js:59"}, "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-3e78d33c9255aee0", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/webrtc-gateway-c.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/webrtc-gateway-c.js:54"}, "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-c15f96276ff5ab58", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/udp-klv-splitter.js:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/udp-klv-splitter.js:92"}, "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-105f51fa08cf55e0", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/framesync.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/framesync.js:57"}, "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-72dee8d328db8ed1", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/ffmpeg.js:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/ffmpeg.js:98"}, "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-c148324165a99ba7", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/framebuffer.js:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/framebuffer.js:63"}, "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-f250d5b6cb3dbfed", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/orchestrator.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/orchestrator.js:40"}, "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-8320a60c8d337eff", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/dist-demo/assets/main-BpWxQI4V.js:9", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/dist-demo/assets/main-BpWxQI4V.js:9"}, "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-84a9e25ed7b7342b", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dist-demo/assets/main-BpWxQI4V.js:8", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dist-demo/assets/main-BpWxQI4V.js:8"}, "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-f0e9702558f0dd2a", "name": "Insecure pattern 'node_child_process' in demo-server/index.js:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in demo-server/index.js:9"}, "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-070eed69c2b4b298", "name": "Insecure pattern 'node_child_process' in scripts/extract-klv-ffmpeg.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/extract-klv-ffmpeg.js:5"}, "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-fc8bff214362d214", "name": "Insecure pattern 'node_child_process' in simulator/index.js:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in simulator/index.js:11"}, "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-f6bc1fc831ea9da0", "name": "Insecure pattern 'node_child_process' in backend/src/index.js:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/index.js:14"}, "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-0c465a12c97efd34", "name": "Insecure pattern 'cors_wildcard' in backend/src/index.js:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in backend/src/index.js:34"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ce52bb60d8ff601", "name": "Insecure pattern 'node_child_process' in backend/src/services/gstreamer-webrtc.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/gstreamer-webrtc.js:6"}, "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-28424d22d9075cac", "name": "Insecure pattern 'node_child_process' in backend/src/services/webrtc-gateway.js:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/webrtc-gateway.js:11"}, "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-68fe83911c626232", "name": "Insecure pattern 'node_child_process' in backend/src/services/webrtc-gateway-c.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/webrtc-gateway-c.js:6"}, "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-2e5c44d59c4499b6", "name": "Insecure pattern 'node_child_process' in backend/src/services/framesync.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/framesync.js:6"}, "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-51f950d044259ae7", "name": "Insecure pattern 'node_child_process' in backend/src/services/ffmpeg.js:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/ffmpeg.js:4"}, "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-f46a6657b60293c9", "name": "Insecure pattern 'node_child_process' in backend/src/services/framebuffer.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/framebuffer.js:6"}, "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-784be22a1546639a", "name": "Insecure pattern 'node_child_process' in backend/src/services/orchestrator.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in backend/src/services/orchestrator.js:5"}, "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-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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 37 source file(s) (ratio 0.03). 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 195 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "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-826240056a316eeb", "name": "Legacy-named symbol `unstable_legacy` in frontend/dist-demo/assets/main-BpWxQI4V.js:8", "shortDescription": {"text": "Legacy-named symbol `unstable_legacy` in frontend/dist-demo/assets/main-BpWxQI4V.js:8"}, "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-3e16823697de7d72", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:1"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eeefb74c06872dca", "name": "Commented-code block (5 lines) in demo-server/server.js:27", "shortDescription": {"text": "Commented-code block (5 lines) in demo-server/server.js:27"}, "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-50736437af015657", "name": "Commented-code block (5 lines) in backend/src/services/framebuffer.js:109", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/framebuffer.js:109"}, "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-d47e7de6d561a70c", "name": "Unused endpoint: USE /demo", "shortDescription": {"text": "Unused endpoint: USE /demo"}, "fullDescription": {"text": "`demo-server/server.js` declares `USE /demo` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-963710f42a2c8219", "name": "Unused endpoint: GET /api/status", "shortDescription": {"text": "Unused endpoint: GET /api/status"}, "fullDescription": {"text": "`demo-server/server.js` declares `GET /api/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec12d6b810bad36e", "name": "Unused endpoint: GET /api/simulator/files", "shortDescription": {"text": "Unused endpoint: GET /api/simulator/files"}, "fullDescription": {"text": "`demo-server/index.js` declares `GET /api/simulator/files` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d55fc220eb56adbc", "name": "Unused endpoint: POST /api/simulator/start", "shortDescription": {"text": "Unused endpoint: POST /api/simulator/start"}, "fullDescription": {"text": "`demo-server/index.js` declares `POST /api/simulator/start` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f9ea376f1029e5f", "name": "Unused endpoint: POST /api/simulator/stop", "shortDescription": {"text": "Unused endpoint: POST /api/simulator/stop"}, "fullDescription": {"text": "`demo-server/index.js` declares `POST /api/simulator/stop` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-269bdc4ddb9f9f66", "name": "Unused endpoint: POST /api/stream/udp", "shortDescription": {"text": "Unused endpoint: POST /api/stream/udp"}, "fullDescription": {"text": "`demo-server/index.js` declares `POST /api/stream/udp` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc11fac4f0bd0b4c", "name": "Unused endpoint: USE /hls", "shortDescription": {"text": "Unused endpoint: USE /hls"}, "fullDescription": {"text": "`backend/src/index.js` declares `USE /hls` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30bf8a348c0660c7", "name": "Unused endpoint: POST /api/stream/file", "shortDescription": {"text": "Unused endpoint: POST /api/stream/file"}, "fullDescription": {"text": "`backend/src/index.js` declares `POST /api/stream/file` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f910e21b8a4c0453", "name": "Unused endpoint: POST /api/stream/stop", "shortDescription": {"text": "Unused endpoint: POST /api/stream/stop"}, "fullDescription": {"text": "`backend/src/index.js` declares `POST /api/stream/stop` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6179efa3802213b7", "name": "Unused endpoint: GET /api/simulator/status", "shortDescription": {"text": "Unused endpoint: GET /api/simulator/status"}, "fullDescription": {"text": "`backend/src/index.js` declares `GET /api/simulator/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20288"}, "properties": {"repository": "stephanebhiri/KLV_Display", "repoUrl": "https://github.com/stephanebhiri/KLV_Display", "branch": "main"}, "results": [{"ruleId": "scanner-88294efe95bb4cec", "level": "note", "message": {"text": "Possibly dead Python function: buffer_probe"}, "properties": {"repobilityId": "63e799907809756b", "scanner": "scanner-primary", "fingerprint": "88294efe95bb4cec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/gstreamer/resilient_pipeline.py:141"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-854bd39068657df4", "level": "note", "message": {"text": "Possibly dead Python function: watchdog_check"}, "properties": {"repobilityId": "9e1e24ac341536f7", "scanner": "scanner-primary", "fingerprint": "854bd39068657df4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/gstreamer/resilient_pipeline.py:157"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-250f4cf023e49045", "level": "note", "message": {"text": "Possibly dead Python function: tee_probe"}, "properties": {"repobilityId": "1c762a15cce72bd2", "scanner": "scanner-primary", "fingerprint": "250f4cf023e49045", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/gstreamer/webrtc_pipeline.py:493"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7adb36f534b0cfce", "level": "note", "message": {"text": "Possibly dead Python function: read_stdin"}, "properties": {"repobilityId": "643ebb06e7e4abf4", "scanner": "scanner-primary", "fingerprint": "7adb36f534b0cfce", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/gstreamer/demo_streamer.py:205"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c7db18032a2abf7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:20"}, "properties": {"repobilityId": "2e8865f244909bb9", "scanner": "scanner-primary", "fingerprint": "7c7db18032a2abf7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-605c6a63246d5450", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:9"}, "properties": {"repobilityId": "f7d81ae602afd79b", "scanner": "scanner-primary", "fingerprint": "605c6a63246d5450", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-100c5546e660432b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/DemoApp.jsx:260"}, "properties": {"repobilityId": "c66c91a01b683e53", "scanner": "scanner-primary", "fingerprint": "100c5546e660432b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35a1697a371436f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/hooks/useWebSocket.js:67"}, "properties": {"repobilityId": "01d6321887ab0520", "scanner": "scanner-primary", "fingerprint": "35a1697a371436f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c04de60efe8d04ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 demo-server/test-azimuth.js:49"}, "properties": {"repobilityId": "3cd52ab79b2579f2", "scanner": "scanner-primary", "fingerprint": "c04de60efe8d04ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abff1c6d1219823b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 demo-server/server.js:61"}, "properties": {"repobilityId": "dc1e1e30d8de2662", "scanner": "scanner-primary", "fingerprint": "abff1c6d1219823b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9bd6bfdc5ff0f01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 demo-server/index.js:33"}, "properties": {"repobilityId": "c5781fa8404acfa4", "scanner": "scanner-primary", "fingerprint": "e9bd6bfdc5ff0f01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5a56d01e0bd60bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-ffmpeg.js:140"}, "properties": {"repobilityId": "7f4e8de7c1f1d4f0", "scanner": "scanner-primary", "fingerprint": "a5a56d01e0bd60bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4b5d62ba554713a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-klv-azimuth.js:63"}, "properties": {"repobilityId": "cff3403d95ab1cd0", "scanner": "scanner-primary", "fingerprint": "b4b5d62ba554713a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-71cb39f3e5448a3d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-from-file.js:142"}, "properties": {"repobilityId": "dc0ac44d0033934e", "scanner": "scanner-primary", "fingerprint": "71cb39f3e5448a3d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c09af2cea70c752", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-klv-demo.js:182"}, "properties": {"repobilityId": "c7d2dc51ea17ea22", "scanner": "scanner-primary", "fingerprint": "6c09af2cea70c752", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb4697fe471b928a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 simulator/index.js:35"}, "properties": {"repobilityId": "cbffd62d28af428d", "scanner": "scanner-primary", "fingerprint": "fb4697fe471b928a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96a05c674d2c8c6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/index.js:56"}, "properties": {"repobilityId": "03d5d680343d7d14", "scanner": "scanner-primary", "fingerprint": "96a05c674d2c8c6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a401d4d6b91ccf69", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/udp-duplicator.js:45"}, "properties": {"repobilityId": "5deebccdd27d5fb3", "scanner": "scanner-primary", "fingerprint": "a401d4d6b91ccf69", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38ff34ba224b1e63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/gstreamer-webrtc.js:34"}, "properties": {"repobilityId": "174f4b44d0291ab1", "scanner": "scanner-primary", "fingerprint": "38ff34ba224b1e63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6be2e67f52a5a48f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/webrtc-gateway.js:59"}, "properties": {"repobilityId": "916ff84c8033819a", "scanner": "scanner-primary", "fingerprint": "6be2e67f52a5a48f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e78d33c9255aee0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/webrtc-gateway-c.js:54"}, "properties": {"repobilityId": "6dfddc02547a6184", "scanner": "scanner-primary", "fingerprint": "3e78d33c9255aee0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c15f96276ff5ab58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/udp-klv-splitter.js:92"}, "properties": {"repobilityId": "2ca65f2000befff6", "scanner": "scanner-primary", "fingerprint": "c15f96276ff5ab58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-105f51fa08cf55e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/framesync.js:57"}, "properties": {"repobilityId": "02fdeeca1aac1af6", "scanner": "scanner-primary", "fingerprint": "105f51fa08cf55e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72dee8d328db8ed1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/ffmpeg.js:98"}, "properties": {"repobilityId": "4aa72c2d2325230b", "scanner": "scanner-primary", "fingerprint": "72dee8d328db8ed1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c148324165a99ba7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/framebuffer.js:63"}, "properties": {"repobilityId": "59df0d40dd1cd618", "scanner": "scanner-primary", "fingerprint": "c148324165a99ba7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f250d5b6cb3dbfed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/orchestrator.js:40"}, "properties": {"repobilityId": "b419a57e0f780f74", "scanner": "scanner-primary", "fingerprint": "f250d5b6cb3dbfed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8320a60c8d337eff", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/dist-demo/assets/main-BpWxQI4V.js:9"}, "properties": {"repobilityId": "b32574d23739c354", "scanner": "scanner-primary", "fingerprint": "8320a60c8d337eff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/dist-demo/assets/main-BpWxQI4V.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-84a9e25ed7b7342b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dist-demo/assets/main-BpWxQI4V.js:8"}, "properties": {"repobilityId": "81a82fa73420d705", "scanner": "scanner-primary", "fingerprint": "84a9e25ed7b7342b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/dist-demo/assets/main-BpWxQI4V.js"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-f0e9702558f0dd2a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in demo-server/index.js:9"}, "properties": {"repobilityId": "2022049b2f564604", "scanner": "scanner-primary", "fingerprint": "f0e9702558f0dd2a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo-server/index.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-070eed69c2b4b298", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/extract-klv-ffmpeg.js:5"}, "properties": {"repobilityId": "3215b5324d9d316d", "scanner": "scanner-primary", "fingerprint": "070eed69c2b4b298", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/extract-klv-ffmpeg.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-fc8bff214362d214", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in simulator/index.js:11"}, "properties": {"repobilityId": "7930874a2f059fd5", "scanner": "scanner-primary", "fingerprint": "fc8bff214362d214", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "simulator/index.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-f6bc1fc831ea9da0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/index.js:14"}, "properties": {"repobilityId": "9f1a3145a5fd59af", "scanner": "scanner-primary", "fingerprint": "f6bc1fc831ea9da0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/index.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-0c465a12c97efd34", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in backend/src/index.js:34"}, "properties": {"repobilityId": "6dc1d23eac019019", "scanner": "scanner-primary", "fingerprint": "0c465a12c97efd34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/index.js"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-5ce52bb60d8ff601", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/gstreamer-webrtc.js:6"}, "properties": {"repobilityId": "34dc7294bc2316af", "scanner": "scanner-primary", "fingerprint": "5ce52bb60d8ff601", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/gstreamer-webrtc.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-28424d22d9075cac", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/webrtc-gateway.js:11"}, "properties": {"repobilityId": "454472cdfcd37805", "scanner": "scanner-primary", "fingerprint": "28424d22d9075cac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/webrtc-gateway.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-68fe83911c626232", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/webrtc-gateway-c.js:6"}, "properties": {"repobilityId": "d698d8675050e7dc", "scanner": "scanner-primary", "fingerprint": "68fe83911c626232", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/webrtc-gateway-c.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-2e5c44d59c4499b6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/framesync.js:6"}, "properties": {"repobilityId": "1d7854e8aa153183", "scanner": "scanner-primary", "fingerprint": "2e5c44d59c4499b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/framesync.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-51f950d044259ae7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/ffmpeg.js:4"}, "properties": {"repobilityId": "45ca365c4d5df862", "scanner": "scanner-primary", "fingerprint": "51f950d044259ae7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/ffmpeg.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-f46a6657b60293c9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/framebuffer.js:6"}, "properties": {"repobilityId": "4a7668c75b9aefec", "scanner": "scanner-primary", "fingerprint": "f46a6657b60293c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/framebuffer.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-784be22a1546639a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in backend/src/services/orchestrator.js:5"}, "properties": {"repobilityId": "e808334526d3e87f", "scanner": "scanner-primary", "fingerprint": "784be22a1546639a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/orchestrator.js"}, "region": {"startLine": 5}}}]}, {"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-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"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": "ba2afb05ee96e5a7", "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": "9c6f5dc4ce0412b1", "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": "69ebb10a1ad9dd91", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "60e92b8fb9a9a35e", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "0821884b87f6d691", "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": "403193850ed3327b", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-826240056a316eeb", "level": "note", "message": {"text": "Legacy-named symbol `unstable_legacy` in frontend/dist-demo/assets/main-BpWxQI4V.js:8"}, "properties": {"repobilityId": "c1004f933449bb7c", "scanner": "scanner-primary", "fingerprint": "826240056a316eeb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3e16823697de7d72", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dist-demo/assets/main-BpWxQI4V.js:1"}, "properties": {"repobilityId": "1a98b94de48551f1", "scanner": "scanner-primary", "fingerprint": "3e16823697de7d72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eeefb74c06872dca", "level": "none", "message": {"text": "Commented-code block (5 lines) in demo-server/server.js:27"}, "properties": {"repobilityId": "a77ccf0fa4456464", "scanner": "scanner-primary", "fingerprint": "eeefb74c06872dca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50736437af015657", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/framebuffer.js:109"}, "properties": {"repobilityId": "81d2b9d62791c1ee", "scanner": "scanner-primary", "fingerprint": "50736437af015657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d47e7de6d561a70c", "level": "note", "message": {"text": "Unused endpoint: USE /demo"}, "properties": {"repobilityId": "176d38d5797bf6ba", "scanner": "scanner-primary", "fingerprint": "d47e7de6d561a70c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-963710f42a2c8219", "level": "note", "message": {"text": "Unused endpoint: GET /api/status"}, "properties": {"repobilityId": "76a6757163e2a24f", "scanner": "scanner-primary", "fingerprint": "963710f42a2c8219", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec12d6b810bad36e", "level": "note", "message": {"text": "Unused endpoint: GET /api/simulator/files"}, "properties": {"repobilityId": "026cabaed6c360d1", "scanner": "scanner-primary", "fingerprint": "ec12d6b810bad36e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d55fc220eb56adbc", "level": "note", "message": {"text": "Unused endpoint: POST /api/simulator/start"}, "properties": {"repobilityId": "5e2fda4003b14d05", "scanner": "scanner-primary", "fingerprint": "d55fc220eb56adbc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f9ea376f1029e5f", "level": "note", "message": {"text": "Unused endpoint: POST /api/simulator/stop"}, "properties": {"repobilityId": "24840969322ee076", "scanner": "scanner-primary", "fingerprint": "7f9ea376f1029e5f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-269bdc4ddb9f9f66", "level": "note", "message": {"text": "Unused endpoint: POST /api/stream/udp"}, "properties": {"repobilityId": "fb81ab822e3bb0f0", "scanner": "scanner-primary", "fingerprint": "269bdc4ddb9f9f66", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc11fac4f0bd0b4c", "level": "note", "message": {"text": "Unused endpoint: USE /hls"}, "properties": {"repobilityId": "2cc0e7c6721afe86", "scanner": "scanner-primary", "fingerprint": "bc11fac4f0bd0b4c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-30bf8a348c0660c7", "level": "note", "message": {"text": "Unused endpoint: POST /api/stream/file"}, "properties": {"repobilityId": "474bf5d5a3099c28", "scanner": "scanner-primary", "fingerprint": "30bf8a348c0660c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f910e21b8a4c0453", "level": "note", "message": {"text": "Unused endpoint: POST /api/stream/stop"}, "properties": {"repobilityId": "04258ae3b95341e9", "scanner": "scanner-primary", "fingerprint": "f910e21b8a4c0453", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6179efa3802213b7", "level": "note", "message": {"text": "Unused endpoint: GET /api/simulator/status"}, "properties": {"repobilityId": "178827b3d5d0a47d", "scanner": "scanner-primary", "fingerprint": "6179efa3802213b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}