{"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-d352c3061e32e3f8", "name": "Stray `console.log` in TS/JS \u2014 ecosystem.config.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ecosystem.config.js:70"}, "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-964cb9c3503869f1", "name": "Stray `console.log` in TS/JS \u2014 server.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.js:39"}, "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-60b8441dac6c82ff", "name": "Stray `console.log` in TS/JS \u2014 auto-research/score.js:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 auto-research/score.js:81"}, "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-adea9ece897764bd", "name": "Stray `console.log` in TS/JS \u2014 auto-research/notify.js:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 auto-research/notify.js:83"}, "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-a649cd974e7aa045", "name": "Stray `console.log` in TS/JS \u2014 auto-research/run-loop.js:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 auto-research/run-loop.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-6fcb884fe117015f", "name": "Stray `console.log` in TS/JS \u2014 dashboard/js/app.js:5262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 dashboard/js/app.js:5262"}, "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-bd0ae3a50fefed3d", "name": "Stray `console.log` in TS/JS \u2014 commercial/loader.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/loader.js:10"}, "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-b696eb203bf6bcdd", "name": "Stray `console.log` in TS/JS \u2014 commercial/index.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/index.js:42"}, "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-621c9167da69aebb", "name": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/sso.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/sso.js:16"}, "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-d53807bc8abd6381", "name": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/sla-config.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/sla-config.js:23"}, "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-4a7461d647b12ee9", "name": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/priority-support.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/priority-support.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-3c24bddff09bb1c6", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/seo-unlimited/index.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/seo-unlimited/index.js:15"}, "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-d2082e0a27016c69", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/advanced-reporting/index.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/advanced-reporting/index.js:14"}, "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-a4b46edcd9ee2863", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/grok-intel/index.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/grok-intel/index.js:16"}, "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-574f5e324954e496", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/hermes-advanced/index.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/hermes-advanced/index.js:17"}, "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-4e6ee454be5ebcb8", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/agent-builder/index.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/agent-builder/index.js:16"}, "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-8ce40774e48dc095", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/youtube-intel/index.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/youtube-intel/index.js:14"}, "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-07ac0520826a26c1", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/browser-agent/index.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/browser-agent/index.js:14"}, "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-f70156565df8b51b", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/design-system/index.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/design-system/index.js:14"}, "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-a4d013ca7dde5d00", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/video-meetings/index.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/video-meetings/index.js:14"}, "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-0e21ca7a30f2c94b", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/creative-studio/index.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/creative-studio/index.js:14"}, "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-6846c469dbdcf486", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/lead-gen/index.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/lead-gen/index.js:14"}, "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-e87afc5c7baea113", "name": "Stray `console.log` in TS/JS \u2014 commercial/modules/self-improving/index.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/self-improving/index.js:17"}, "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-cce13bd67967dbd9", "name": "Stray `console.log` in TS/JS \u2014 tools/generate-maps.js:150", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-maps.js:150"}, "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-8a30a038154219d5", "name": "Stray `console.log` in TS/JS \u2014 agent-worker/agent.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 agent-worker/agent.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-a09e46ee5b885842", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8987d6d1c30c7202", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "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-133bb2a88840f26d", "name": "Insecure pattern 'node_child_process' in server.js:5164", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server.js:5164"}, "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-27d1de786ffdb836", "name": "Insecure pattern 'node_child_process' in auto-research/run-loop.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in auto-research/run-loop.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-a2be8a830321f070", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/free-audit.html:218", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/free-audit.html:218"}, "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-9e22d1c477336d20", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/index.html:896", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/index.html:896"}, "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-f6a492403ed0e2d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/web-studio.js:77", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/web-studio.js:77"}, "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-f868e5660b64868e", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/app.js:234", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/app.js:234"}, "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-0267bea0a02e6e61", "name": "Insecure pattern 'local_storage_auth_token' in dashboard/js/landing.js:84", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in dashboard/js/landing.js:84"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f50f2e0558008cca", "name": "Insecure pattern 'node_child_process' in lib/web-studio/hosting.js:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in lib/web-studio/hosting.js:19"}, "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-f3ef609f2077b4e2", "name": "Insecure pattern 'node_child_process' in lib/web-studio/build.js:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in lib/web-studio/build.js:12"}, "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-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/setup-node@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-d64f40389cb883cd", "name": "Very large file: server.js (6594 lines)", "shortDescription": {"text": "Very large file: server.js (6594 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-85ae28dc25dd831f", "name": "Very large file: dashboard/js/app.js (8324 lines)", "shortDescription": {"text": "Very large file: dashboard/js/app.js (8324 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 37 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-af4e9f19e24b98ee", "name": "Node manifest has dependencies but no lockfile: agent-worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: agent-worker/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 47 placeholder/mock markers across 4 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "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, tests, lockfile. 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, tests, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3066148d740b95e6", "name": "Agent authority lacks a verifier contract: .claude/rules/security.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/security.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3566d7efa755681", "name": "Agent authority lacks a verifier contract: .claude/identity/user.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/identity/user.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e756198cec27fd5f", "name": "Agent authority lacks a verifier contract: .claude/identity/soul.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/identity/soul.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4528bb480a5a1efc", "name": "Agent authority lacks a verifier contract: .claude/agents/data-wrangler.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/data-wrangler.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-76957f76da6c9882", "name": "Agent authority lacks a verifier contract: .claude/agents/social-intel.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/social-intel.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75899c42336d5fd3", "name": "Agent authority lacks a verifier contract: .claude/agents/research-architect.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/research-architect.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2f92e199cc72ff5", "name": "Agent authority lacks a verifier contract: .claude/agents/vibe-designer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/vibe-designer.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-08197d292ca9e5c4", "name": "Agent authority lacks a verifier contract: .claude/agents/lead-gen.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/lead-gen.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bd537f975924b81", "name": "Agent authority lacks a verifier contract: .claude/agents/media-producer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/media-producer.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4964dab14ce3cc4c", "name": "Agent authority lacks a verifier contract: .claude/skills/academic-paper.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/academic-paper.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8fc80972511c63e2", "name": "Agent authority lacks a verifier contract: .claude/skills/lead-enrichment.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/lead-enrichment.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8248cb6cf1637f34", "name": "Agent instruction contains unpinned remote install: .claude/skills/firecrawl.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/skills/firecrawl.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9ec0c69268600d9", "name": "Commented-code block (9 lines) in server.js:961", "shortDescription": {"text": "Commented-code block (9 lines) in server.js:961"}, "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-b70494d2623f63ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server.js:568", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server.js:568"}, "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-8150c2d6b54ff58f", "name": "Commented-code block (5 lines) in auto-research/notify.js:2", "shortDescription": {"text": "Commented-code block (5 lines) in auto-research/notify.js:2"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01fc93455559a638", "name": "`fetch()` without try/.catch or AbortSignal \u2014 auto-research/notify.js:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 auto-research/notify.js:62"}, "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-bae9bb281fbdacbf", "name": "Commented-code block (7 lines) in dashboard/js/web-studio.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in dashboard/js/web-studio.js: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-adf9a7351eb53dcc", "name": "Legacy-named symbol `_buildAvatar3D_legacy` in dashboard/js/app.js:6723", "shortDescription": {"text": "Legacy-named symbol `_buildAvatar3D_legacy` in dashboard/js/app.js:6723"}, "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-eb9c1fe091b705fc", "name": "Commented-code block (5 lines) in lib/web-studio/scaffold.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/web-studio/scaffold.js: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-c7df15e9dec3b5db", "name": "Commented-code block (5 lines) in lib/web-studio/pipeline.js:11", "shortDescription": {"text": "Commented-code block (5 lines) in lib/web-studio/pipeline.js:11"}, "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-153f3551e16cb6da", "name": "Commented-code block (5 lines) in lib/web-studio/publish.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/web-studio/publish.js: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-34cb1fd3b715cad8", "name": "Commented-code block (6 lines) in lib/web-studio/dns.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in lib/web-studio/dns.js:5"}, "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-80d3ac9acfe694b7", "name": "Commented-code block (5 lines) in lib/web-studio/hosting.js:9", "shortDescription": {"text": "Commented-code block (5 lines) in lib/web-studio/hosting.js:9"}, "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-c4196b0473b5b5e1", "name": "Commented-code block (5 lines) in lib/web-studio/build.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/web-studio/build.js: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-2aa6e3c66aa27754", "name": "Commented-code block (6 lines) in commercial/modules/hermes-advanced/index.js:24", "shortDescription": {"text": "Commented-code block (6 lines) in commercial/modules/hermes-advanced/index.js:24"}, "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-effae1c49e811d11", "name": "Commented-code block (7 lines) in commercial/modules/agent-builder/index.js:23", "shortDescription": {"text": "Commented-code block (7 lines) in commercial/modules/agent-builder/index.js:23"}, "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-b334d875f2339fa1", "name": "5 env vars used in code but missing from .env.example", "shortDescription": {"text": "5 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AIOS_PRIMARY_DOMAIN`, `AIOS_PUBLIC_IP`, `DID_API_KEY`, `HEYGEN_API_KEY`, `INSTANCE_NAME`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d88cc063189e448c", "name": "Dangling fetch: POST https://api.liveavatar.com/v1/sessions/token (server.js:513)", "shortDescription": {"text": "Dangling fetch: POST https://api.liveavatar.com/v1/sessions/token (server.js:513)"}, "fullDescription": {"text": "`server.js:513` calls `POST https://api.liveavatar.com/v1/sessions/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.liveavatar.com/v1/sessions/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffdfca8de558f407", "name": "Dangling fetch: POST https://api.heygen.com/v1/streaming.create_token (server.js:520)", "shortDescription": {"text": "Dangling fetch: POST https://api.heygen.com/v1/streaming.create_token (server.js:520)"}, "fullDescription": {"text": "`server.js:520` calls `POST https://api.heygen.com/v1/streaming.create_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.heygen.com/v1/streaming.create_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce04687fe70bbb5e", "name": "Dangling fetch: POST https://api.d-id.com/talks (server.js:568)", "shortDescription": {"text": "Dangling fetch: POST https://api.d-id.com/talks (server.js:568)"}, "fullDescription": {"text": "`server.js:568` calls `POST https://api.d-id.com/talks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.d-id.com/talks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f9e47da89bca861", "name": "Dangling fetch: GET https://api.d-id.com/talks/${req.params.id} (server.js:604)", "shortDescription": {"text": "Dangling fetch: GET https://api.d-id.com/talks/${req.params.id} (server.js:604)"}, "fullDescription": {"text": "`server.js:604` calls `GET https://api.d-id.com/talks/${req.params.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.d-id.com/talks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e70009849685613", "name": "Dangling fetch: POST https://api.d-id.com/images (server.js:638)", "shortDescription": {"text": "Dangling fetch: POST https://api.d-id.com/images (server.js:638)"}, "fullDescription": {"text": "`server.js:638` calls `POST https://api.d-id.com/images` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.d-id.com/images`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bf2456d7d44450b", "name": "Dangling fetch: POST https://api.openai.com/v1/audio/speech (server.js:748)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/speech (server.js:748)"}, "fullDescription": {"text": "`server.js:748` calls `POST https://api.openai.com/v1/audio/speech` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/audio/speech`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-060c163a13dc8280", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:1557)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:1557)"}, "fullDescription": {"text": "`server.js:1557` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bd8c3abea328825", "name": "Dangling fetch: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiK", "shortDescription": {"text": "Dangling fetch: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiKey} (server.js:1626)"}, "fullDescription": {"text": "`server.js:1626` calls `POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiKey}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a42f426a09bc94c4", "name": "Dangling fetch: POST https://api.telegram.org/bot${notificationConfig.telegram.botToken}/sendMessage (server.js:3748)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${notificationConfig.telegram.botToken}/sendMessage (server.js:3748)"}, "fullDescription": {"text": "`server.js:3748` calls `POST https://api.telegram.org/bot${notificationConfig.telegram.botToken}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c912c7415cfe5ee", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:4803)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:4803)"}, "fullDescription": {"text": "`server.js:4803` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f43ad0f1120510f9", "name": "Dangling fetch: GET https://api.deepseek.com/models (server.js:4820)", "shortDescription": {"text": "Dangling fetch: GET https://api.deepseek.com/models (server.js:4820)"}, "fullDescription": {"text": "`server.js:4820` calls `GET https://api.deepseek.com/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.deepseek.com/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-343f0b69f8a47efe", "name": "Dangling fetch: GET https://api.x.ai/v1/models (server.js:4830)", "shortDescription": {"text": "Dangling fetch: GET https://api.x.ai/v1/models (server.js:4830)"}, "fullDescription": {"text": "`server.js:4830` calls `GET https://api.x.ai/v1/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.x.ai/v1/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18eafe5c4080cfeb", "name": "Dangling fetch: GET https://generativelanguage.googleapis.com/v1beta/models?key=${settings.ai.gemini_api_key} (server.js", "shortDescription": {"text": "Dangling fetch: GET https://generativelanguage.googleapis.com/v1beta/models?key=${settings.ai.gemini_api_key} (server.js:4847)"}, "fullDescription": {"text": "`server.js:4847` calls `GET https://generativelanguage.googleapis.com/v1beta/models?key=${settings.ai.gemini_api_key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/generativelanguage.googleapis.com/v1beta/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2c754467e3deffb", "name": "Dangling fetch: GET https://api.openai.com/v1/models (server.js:4856)", "shortDescription": {"text": "Dangling fetch: GET https://api.openai.com/v1/models (server.js:4856)"}, "fullDescription": {"text": "`server.js:4856` calls `GET https://api.openai.com/v1/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-856c83ff27e94a26", "name": "Dangling fetch: POST https://api.perplexity.ai/chat/completions (server.js:4865)", "shortDescription": {"text": "Dangling fetch: POST https://api.perplexity.ai/chat/completions (server.js:4865)"}, "fullDescription": {"text": "`server.js:4865` calls `POST https://api.perplexity.ai/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.perplexity.ai/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23ffacf0b1f1ee79", "name": "Dangling fetch: GET https://api.manus.im/v1/user/me (server.js:4878)", "shortDescription": {"text": "Dangling fetch: GET https://api.manus.im/v1/user/me (server.js:4878)"}, "fullDescription": {"text": "`server.js:4878` calls `GET https://api.manus.im/v1/user/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.manus.im/v1/user/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-199bf3d5f821bcb7", "name": "Dangling fetch: POST https://api.tavily.com/search (server.js:4894)", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (server.js:4894)"}, "fullDescription": {"text": "`server.js:4894` calls `POST https://api.tavily.com/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.tavily.com/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6bb96f9e1fa78a3d", "name": "Dangling fetch: GET https://api.apify.com/v2/user/me (server.js:4905)", "shortDescription": {"text": "Dangling fetch: GET https://api.apify.com/v2/user/me (server.js:4905)"}, "fullDescription": {"text": "`server.js:4905` calls `GET https://api.apify.com/v2/user/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.apify.com/v2/user/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d0281b3f11349de", "name": "Dangling fetch: POST https://api.dataforseo.com/v3/serp/google/organic/live/advanced (server.js:4915)", "shortDescription": {"text": "Dangling fetch: POST https://api.dataforseo.com/v3/serp/google/organic/live/advanced (server.js:4915)"}, "fullDescription": {"text": "`server.js:4915` calls `POST https://api.dataforseo.com/v3/serp/google/organic/live/advanced` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dataforseo.com/v3/serp/google/organic/live/advanced`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4926f4da320107c", "name": "Dangling fetch: GET https://api.d-id.com/credits (server.js:4927)", "shortDescription": {"text": "Dangling fetch: GET https://api.d-id.com/credits (server.js:4927)"}, "fullDescription": {"text": "`server.js:4927` calls `GET https://api.d-id.com/credits` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.d-id.com/credits`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50f9b3203083f753", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (server.js:5353)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (server.js:5353)"}, "fullDescription": {"text": "`server.js:5353` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b1c0a02ee49cf05", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (server.js:5380)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (server.js:5380)"}, "fullDescription": {"text": "`server.js:5380` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b1c6f376aac87df", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:5577)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:5577)"}, "fullDescription": {"text": "`server.js:5577` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d30c493bcbce7ccd", "name": "Dangling fetch: POST https://api.dataforseo.com/v3/${endpoint} (server.js:5965)", "shortDescription": {"text": "Dangling fetch: POST https://api.dataforseo.com/v3/${endpoint} (server.js:5965)"}, "fullDescription": {"text": "`server.js:5965` calls `POST https://api.dataforseo.com/v3/${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dataforseo.com/v3/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad306ff4ae3dae9e", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (auto-research/notify.js:62)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (auto-research/notify.js:62)"}, "fullDescription": {"text": "`auto-research/notify.js:62` calls `POST https://api.telegram.org/bot${token}/sendMessage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4fbb0088c47c9906", "name": "Dangling fetch: GET https://api.ipify.org?format=json (lib/web-studio/dns.js:27)", "shortDescription": {"text": "Dangling fetch: GET https://api.ipify.org?format=json (lib/web-studio/dns.js:27)"}, "fullDescription": {"text": "`lib/web-studio/dns.js:27` calls `GET https://api.ipify.org?format=json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.ipify.org`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd326b3e2907972d", "name": "Unused endpoint: GET /api/tenant/branding", "shortDescription": {"text": "Unused endpoint: GET /api/tenant/branding"}, "fullDescription": {"text": "`server.js` declares `GET /api/tenant/branding` 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-bd83d35ce8663ca6", "name": "Unused endpoint: POST /api/branding", "shortDescription": {"text": "Unused endpoint: POST /api/branding"}, "fullDescription": {"text": "`server.js` declares `POST /api/branding` 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-76889df7c8e240c5", "name": "Unused endpoint: USE /api/", "shortDescription": {"text": "Unused endpoint: USE /api/"}, "fullDescription": {"text": "`server.js` declares `USE /api/` 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-cf1d0e410efa81ec", "name": "Unused endpoint: GET /api/stripe/checkout", "shortDescription": {"text": "Unused endpoint: GET /api/stripe/checkout"}, "fullDescription": {"text": "`server.js` declares `GET /api/stripe/checkout` 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-361066e811f4dd9e", "name": "Unused endpoint: GET /api/stripe/success", "shortDescription": {"text": "Unused endpoint: GET /api/stripe/success"}, "fullDescription": {"text": "`server.js` declares `GET /api/stripe/success` 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-76f7964d6c782e43", "name": "Unused endpoint: POST /api/stripe/webhook", "shortDescription": {"text": "Unused endpoint: POST /api/stripe/webhook"}, "fullDescription": {"text": "`server.js` declares `POST /api/stripe/webhook` 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-d5a39262ac205120", "name": "Unused endpoint: POST /api/auth/logout", "shortDescription": {"text": "Unused endpoint: POST /api/auth/logout"}, "fullDescription": {"text": "`server.js` declares `POST /api/auth/logout` 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-ee4aa5ddab88c9dc", "name": "Unused endpoint: GET /api/auth/me", "shortDescription": {"text": "Unused endpoint: GET /api/auth/me"}, "fullDescription": {"text": "`server.js` declares `GET /api/auth/me` 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-769398a8a95bd693", "name": "Unused endpoint: GET /app", "shortDescription": {"text": "Unused endpoint: GET /app"}, "fullDescription": {"text": "`server.js` declares `GET /app` 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-6a0b17f3b9d6a1a4", "name": "Unused endpoint: GET /api/onboarding/status", "shortDescription": {"text": "Unused endpoint: GET /api/onboarding/status"}, "fullDescription": {"text": "`server.js` declares `GET /api/onboarding/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-d21c72fb15e0eab1", "name": "Unused endpoint: POST /api/heygen/token", "shortDescription": {"text": "Unused endpoint: POST /api/heygen/token"}, "fullDescription": {"text": "`server.js` declares `POST /api/heygen/token` 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-7c89c4949afd0fa1", "name": "Unused endpoint: GET /api/heygen/status", "shortDescription": {"text": "Unused endpoint: GET /api/heygen/status"}, "fullDescription": {"text": "`server.js` declares `GET /api/heygen/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-c5c9f0171c726de7", "name": "Unused endpoint: GET /api/did/status", "shortDescription": {"text": "Unused endpoint: GET /api/did/status"}, "fullDescription": {"text": "`server.js` declares `GET /api/did/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-073c458644e0d534", "name": "Unused endpoint: POST /api/did/talk", "shortDescription": {"text": "Unused endpoint: POST /api/did/talk"}, "fullDescription": {"text": "`server.js` declares `POST /api/did/talk` 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-8d501902b8de4c3c", "name": "Unused endpoint: GET /api/did/talk/:id", "shortDescription": {"text": "Unused endpoint: GET /api/did/talk/:id"}, "fullDescription": {"text": "`server.js` declares `GET /api/did/talk/:id` 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-2159f2b7407cad29", "name": "Unused endpoint: POST /api/did/upload-photo", "shortDescription": {"text": "Unused endpoint: POST /api/did/upload-photo"}, "fullDescription": {"text": "`server.js` declares `POST /api/did/upload-photo` 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-c29a982b07099b36", "name": "Unused endpoint: GET /api/did/photos", "shortDescription": {"text": "Unused endpoint: GET /api/did/photos"}, "fullDescription": {"text": "`server.js` declares `GET /api/did/photos` 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-45092af34f11f4cd", "name": "Unused endpoint: POST /api/livekit/token", "shortDescription": {"text": "Unused endpoint: POST /api/livekit/token"}, "fullDescription": {"text": "`server.js` declares `POST /api/livekit/token` 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-556039559ea7eb50", "name": "Unused endpoint: GET /api/livekit/status", "shortDescription": {"text": "Unused endpoint: GET /api/livekit/status"}, "fullDescription": {"text": "`server.js` declares `GET /api/livekit/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-f43885d3e13ae484", "name": "Unused endpoint: GET /free-audit", "shortDescription": {"text": "Unused endpoint: GET /free-audit"}, "fullDescription": {"text": "`server.js` declares `GET /free-audit` 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-e5dc9d4af696cdaa", "name": "Unused endpoint: GET /blog", "shortDescription": {"text": "Unused endpoint: GET /blog"}, "fullDescription": {"text": "`server.js` declares `GET /blog` 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-b18e1345a1859ef4", "name": "Unused endpoint: GET /blog/:slug", "shortDescription": {"text": "Unused endpoint: GET /blog/:slug"}, "fullDescription": {"text": "`server.js` declares `GET /blog/:slug` 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-5fff7d7c74ad81e4", "name": "Unused endpoint: GET /about", "shortDescription": {"text": "Unused endpoint: GET /about"}, "fullDescription": {"text": "`server.js` declares `GET /about` 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-3a878da9d4bd6662", "name": "Unused endpoint: GET /contact", "shortDescription": {"text": "Unused endpoint: GET /contact"}, "fullDescription": {"text": "`server.js` declares `GET /contact` 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-18a4887e7bea6b36", "name": "Unused endpoint: GET /compare", "shortDescription": {"text": "Unused endpoint: GET /compare"}, "fullDescription": {"text": "`server.js` declares `GET /compare` 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-58a49b53cd0530ab", "name": "Unused endpoint: GET /compare/:slug", "shortDescription": {"text": "Unused endpoint: GET /compare/:slug"}, "fullDescription": {"text": "`server.js` declares `GET /compare/:slug` 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-6a4dfcad3eb1618a", "name": "Unused endpoint: GET /login", "shortDescription": {"text": "Unused endpoint: GET /login"}, "fullDescription": {"text": "`server.js` declares `GET /login` 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-ebe3481a27b770a5", "name": "Unused endpoint: GET /terms", "shortDescription": {"text": "Unused endpoint: GET /terms"}, "fullDescription": {"text": "`server.js` declares `GET /terms` 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-9daee89b78e9ceac", "name": "Unused endpoint: GET /privacy", "shortDescription": {"text": "Unused endpoint: GET /privacy"}, "fullDescription": {"text": "`server.js` declares `GET /privacy` 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-eb0428442a390121", "name": "Unused endpoint: GET /docs", "shortDescription": {"text": "Unused endpoint: GET /docs"}, "fullDescription": {"text": "`server.js` declares `GET /docs` 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-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`server.js` declares `GET /api/health` 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-328755b8aeea3a6f", "name": "Unused endpoint: GET /api/web-studio/sites", "shortDescription": {"text": "Unused endpoint: GET /api/web-studio/sites"}, "fullDescription": {"text": "`server.js` declares `GET /api/web-studio/sites` 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-aea29a9065f18f81", "name": "Unused endpoint: POST /api/web-studio/sites", "shortDescription": {"text": "Unused endpoint: POST /api/web-studio/sites"}, "fullDescription": {"text": "`server.js` declares `POST /api/web-studio/sites` 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-c1be2bb42f15f0e8", "name": "Unused endpoint: GET /api/web-studio/sites/:id", "shortDescription": {"text": "Unused endpoint: GET /api/web-studio/sites/:id"}, "fullDescription": {"text": "`server.js` declares `GET /api/web-studio/sites/:id` 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-13734a3303069cf8", "name": "Unused endpoint: DELETE /api/web-studio/sites/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/web-studio/sites/:id"}, "fullDescription": {"text": "`server.js` declares `DELETE /api/web-studio/sites/:id` 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-8fe506a69c2ae3ff", "name": "Unused endpoint: GET /api/web-studio/sites/:id/files", "shortDescription": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/files"}, "fullDescription": {"text": "`server.js` declares `GET /api/web-studio/sites/:id/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-4467c49c68399025", "name": "Unused endpoint: GET /api/web-studio/sites/:id/file", "shortDescription": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/file"}, "fullDescription": {"text": "`server.js` declares `GET /api/web-studio/sites/:id/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-7c322d7fedbf3a8f", "name": "Unused endpoint: PUT /api/web-studio/sites/:id/file", "shortDescription": {"text": "Unused endpoint: PUT /api/web-studio/sites/:id/file"}, "fullDescription": {"text": "`server.js` declares `PUT /api/web-studio/sites/:id/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-c8f87f80aa3b4774", "name": "Unused endpoint: POST /api/web-studio/sites/:id/ai-edit", "shortDescription": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/ai-edit"}, "fullDescription": {"text": "`server.js` declares `POST /api/web-studio/sites/:id/ai-edit` 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-6fde6022e9158ff8", "name": "Unused endpoint: GET /api/web-studio/sites/:id/content", "shortDescription": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/content"}, "fullDescription": {"text": "`server.js` declares `GET /api/web-studio/sites/:id/content` 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-8921d8b2e660dfc0", "name": "Unused endpoint: PUT /api/web-studio/sites/:id/content", "shortDescription": {"text": "Unused endpoint: PUT /api/web-studio/sites/:id/content"}, "fullDescription": {"text": "`server.js` declares `PUT /api/web-studio/sites/:id/content` 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-3239901b84619b93", "name": "Unused endpoint: POST /api/web-studio/sites/:id/build", "shortDescription": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/build"}, "fullDescription": {"text": "`server.js` declares `POST /api/web-studio/sites/:id/build` 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-f367c4d84e5bc721", "name": "Unused endpoint: POST /api/web-studio/sites/:id/domain", "shortDescription": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/domain"}, "fullDescription": {"text": "`server.js` declares `POST /api/web-studio/sites/:id/domain` 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-df2794fe6cdc5bda", "name": "Unused endpoint: GET /api/web-studio/sites/:id/dns-check", "shortDescription": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/dns-check"}, "fullDescription": {"text": "`server.js` declares `GET /api/web-studio/sites/:id/dns-check` 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-312d0bf698f21138", "name": "Unused endpoint: POST /api/web-studio/sites/:id/publish", "shortDescription": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/publish"}, "fullDescription": {"text": "`server.js` declares `POST /api/web-studio/sites/:id/publish` 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-8ec61c2919df8dfd", "name": "Unused endpoint: POST /api/web-studio/sites/:id/unpublish", "shortDescription": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/unpublish"}, "fullDescription": {"text": "`server.js` declares `POST /api/web-studio/sites/:id/unpublish` 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-d307a0bcf2520990", "name": "Unused endpoint: GET /api/web-studio/sites/:id/preview/*", "shortDescription": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/preview/*"}, "fullDescription": {"text": "`server.js` declares `GET /api/web-studio/sites/:id/preview/*` 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-97946292eea0d9a1", "name": "Unused endpoint: POST /api/agent/execute", "shortDescription": {"text": "Unused endpoint: POST /api/agent/execute"}, "fullDescription": {"text": "`server.js` declares `POST /api/agent/execute` 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-9d2517f9eafc5297", "name": "Unused endpoint: POST /api/chat", "shortDescription": {"text": "Unused endpoint: POST /api/chat"}, "fullDescription": {"text": "`server.js` declares `POST /api/chat` 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-c4b0361ac0f5eeb9", "name": "Unused endpoint: GET /api/agents", "shortDescription": {"text": "Unused endpoint: GET /api/agents"}, "fullDescription": {"text": "`server.js` declares `GET /api/agents` 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/22713"}, "properties": {"repository": "wholefoo/ai-os", "repoUrl": "https://github.com/wholefoo/ai-os", "branch": "main"}, "results": [{"ruleId": "scanner-d352c3061e32e3f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ecosystem.config.js:70"}, "properties": {"repobilityId": "ddf3fe81810c4cce", "scanner": "scanner-primary", "fingerprint": "d352c3061e32e3f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-964cb9c3503869f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.js:39"}, "properties": {"repobilityId": "a9deebb5fdc93edc", "scanner": "scanner-primary", "fingerprint": "964cb9c3503869f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60b8441dac6c82ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 auto-research/score.js:81"}, "properties": {"repobilityId": "b5f4bc0d36c7e272", "scanner": "scanner-primary", "fingerprint": "60b8441dac6c82ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-adea9ece897764bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 auto-research/notify.js:83"}, "properties": {"repobilityId": "aa35648142526bff", "scanner": "scanner-primary", "fingerprint": "adea9ece897764bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a649cd974e7aa045", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 auto-research/run-loop.js:92"}, "properties": {"repobilityId": "ebc2d63fd0654d0b", "scanner": "scanner-primary", "fingerprint": "a649cd974e7aa045", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fcb884fe117015f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 dashboard/js/app.js:5262"}, "properties": {"repobilityId": "a6b3419df021fd62", "scanner": "scanner-primary", "fingerprint": "6fcb884fe117015f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd0ae3a50fefed3d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/loader.js:10"}, "properties": {"repobilityId": "d0d6fa122c35f87d", "scanner": "scanner-primary", "fingerprint": "bd0ae3a50fefed3d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b696eb203bf6bcdd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/index.js:42"}, "properties": {"repobilityId": "745c64d3b1631349", "scanner": "scanner-primary", "fingerprint": "b696eb203bf6bcdd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-621c9167da69aebb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/sso.js:16"}, "properties": {"repobilityId": "4effb666e2b2e6dc", "scanner": "scanner-primary", "fingerprint": "621c9167da69aebb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d53807bc8abd6381", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/sla-config.js:23"}, "properties": {"repobilityId": "8d15aa83a2cb23cd", "scanner": "scanner-primary", "fingerprint": "d53807bc8abd6381", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a7461d647b12ee9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/enterprise/priority-support.js:20"}, "properties": {"repobilityId": "74fef4cfbf73145c", "scanner": "scanner-primary", "fingerprint": "4a7461d647b12ee9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c24bddff09bb1c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/seo-unlimited/index.js:15"}, "properties": {"repobilityId": "cf9b5de261b80a9c", "scanner": "scanner-primary", "fingerprint": "3c24bddff09bb1c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2082e0a27016c69", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/advanced-reporting/index.js:14"}, "properties": {"repobilityId": "c47014442ce7634d", "scanner": "scanner-primary", "fingerprint": "d2082e0a27016c69", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4b46edcd9ee2863", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/grok-intel/index.js:16"}, "properties": {"repobilityId": "f78d91c2e23f7d1e", "scanner": "scanner-primary", "fingerprint": "a4b46edcd9ee2863", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-574f5e324954e496", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/hermes-advanced/index.js:17"}, "properties": {"repobilityId": "04f0495b0710d405", "scanner": "scanner-primary", "fingerprint": "574f5e324954e496", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e6ee454be5ebcb8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/agent-builder/index.js:16"}, "properties": {"repobilityId": "72e30d1a5c5a12a8", "scanner": "scanner-primary", "fingerprint": "4e6ee454be5ebcb8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ce40774e48dc095", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/youtube-intel/index.js:14"}, "properties": {"repobilityId": "942c8c667c3d3ec3", "scanner": "scanner-primary", "fingerprint": "8ce40774e48dc095", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07ac0520826a26c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/browser-agent/index.js:14"}, "properties": {"repobilityId": "b1f2e0ca86b3c848", "scanner": "scanner-primary", "fingerprint": "07ac0520826a26c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f70156565df8b51b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/design-system/index.js:14"}, "properties": {"repobilityId": "2650234e6f22793d", "scanner": "scanner-primary", "fingerprint": "f70156565df8b51b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4d013ca7dde5d00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/video-meetings/index.js:14"}, "properties": {"repobilityId": "b398ff83a6a503cf", "scanner": "scanner-primary", "fingerprint": "a4d013ca7dde5d00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e21ca7a30f2c94b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/creative-studio/index.js:14"}, "properties": {"repobilityId": "e4a3c64961ed9892", "scanner": "scanner-primary", "fingerprint": "0e21ca7a30f2c94b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6846c469dbdcf486", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/lead-gen/index.js:14"}, "properties": {"repobilityId": "afb8f54e6a07e5c8", "scanner": "scanner-primary", "fingerprint": "6846c469dbdcf486", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e87afc5c7baea113", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 commercial/modules/self-improving/index.js:17"}, "properties": {"repobilityId": "537672b6ec516334", "scanner": "scanner-primary", "fingerprint": "e87afc5c7baea113", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cce13bd67967dbd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generate-maps.js:150"}, "properties": {"repobilityId": "34cde0e68847f1e3", "scanner": "scanner-primary", "fingerprint": "cce13bd67967dbd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a30a038154219d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 agent-worker/agent.js:67"}, "properties": {"repobilityId": "704ee1720359fff4", "scanner": "scanner-primary", "fingerprint": "8a30a038154219d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a09e46ee5b885842", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "a09e46ee5b885842", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/install-vps.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "068fbf45727eac17", "scanner": "scanner-primary", "fingerprint": "8987d6d1c30c7202", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"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-133bb2a88840f26d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server.js:5164"}, "properties": {"repobilityId": "23f3ba0b6e438ed3", "scanner": "scanner-primary", "fingerprint": "133bb2a88840f26d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server.js"}, "region": {"startLine": 5164}}}]}, {"ruleId": "scanner-27d1de786ffdb836", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in auto-research/run-loop.js:5"}, "properties": {"repobilityId": "3f79b70007295954", "scanner": "scanner-primary", "fingerprint": "27d1de786ffdb836", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auto-research/run-loop.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-a2be8a830321f070", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/free-audit.html:218"}, "properties": {"repobilityId": "6cf816434e2b816a", "scanner": "scanner-primary", "fingerprint": "a2be8a830321f070", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/free-audit.html"}, "region": {"startLine": 218}}}]}, {"ruleId": "scanner-9e22d1c477336d20", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/index.html:896"}, "properties": {"repobilityId": "1d59152a7617eeef", "scanner": "scanner-primary", "fingerprint": "9e22d1c477336d20", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/index.html"}, "region": {"startLine": 896}}}]}, {"ruleId": "scanner-f6a492403ed0e2d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/web-studio.js:77"}, "properties": {"repobilityId": "141b4e78a8afcbbb", "scanner": "scanner-primary", "fingerprint": "f6a492403ed0e2d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/js/web-studio.js"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-f868e5660b64868e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/app.js:234"}, "properties": {"repobilityId": "6280cb5f62c20bf2", "scanner": "scanner-primary", "fingerprint": "f868e5660b64868e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/js/app.js"}, "region": {"startLine": 234}}}]}, {"ruleId": "scanner-0267bea0a02e6e61", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in dashboard/js/landing.js:84"}, "properties": {"repobilityId": "ef2c0ebdfc179404", "scanner": "scanner-primary", "fingerprint": "0267bea0a02e6e61", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/js/landing.js"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-f50f2e0558008cca", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in lib/web-studio/hosting.js:19"}, "properties": {"repobilityId": "b224c98fad06f776", "scanner": "scanner-primary", "fingerprint": "f50f2e0558008cca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/web-studio/hosting.js"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-f3ef609f2077b4e2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in lib/web-studio/build.js:12"}, "properties": {"repobilityId": "ea125c9f86c621eb", "scanner": "scanner-primary", "fingerprint": "f3ef609f2077b4e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/web-studio/build.js"}, "region": {"startLine": 12}}}]}, {"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": 18}}}]}, {"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": 83}}}]}, {"ruleId": "scanner-d64f40389cb883cd", "level": "note", "message": {"text": "Very large file: server.js (6594 lines)"}, "properties": {"repobilityId": "1479ba50e708c5c1", "scanner": "scanner-primary", "fingerprint": "d64f40389cb883cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-85ae28dc25dd831f", "level": "note", "message": {"text": "Very large file: dashboard/js/app.js (8324 lines)"}, "properties": {"repobilityId": "a964900905cc4f34", "scanner": "scanner-primary", "fingerprint": "85ae28dc25dd831f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "495cd53dc998af49", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-af4e9f19e24b98ee", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: agent-worker/package.json"}, "properties": {"repobilityId": "351d3792f6eaae6f", "scanner": "scanner-primary", "fingerprint": "af4e9f19e24b98ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent-worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "f1c579788b46bf72", "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": "181df714699fdb52", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "5136b23ebde3dd3b", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "ea9116375a98a457", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "bd61b7efdbca35e4", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "0162e796777f48ba", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "71e544133a18c379", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "2d33a5a333dc0b26", "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": "ab0b81c8e53cdeb7", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3066148d740b95e6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/security.md"}, "properties": {"repobilityId": "be892f7c6d3598d0", "scanner": "scanner-primary", "fingerprint": "3066148d740b95e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/security.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f3566d7efa755681", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/identity/user.md"}, "properties": {"repobilityId": "26a740f30e76d7c6", "scanner": "scanner-primary", "fingerprint": "f3566d7efa755681", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/identity/user.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e756198cec27fd5f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/identity/soul.md"}, "properties": {"repobilityId": "2e431f6d32deb5d9", "scanner": "scanner-primary", "fingerprint": "e756198cec27fd5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/identity/soul.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4528bb480a5a1efc", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/data-wrangler.md"}, "properties": {"repobilityId": "c3c36bf16cc94b15", "scanner": "scanner-primary", "fingerprint": "4528bb480a5a1efc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/data-wrangler.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76957f76da6c9882", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/social-intel.md"}, "properties": {"repobilityId": "ad4ae0118f71f1ab", "scanner": "scanner-primary", "fingerprint": "76957f76da6c9882", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/social-intel.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-75899c42336d5fd3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/research-architect.md"}, "properties": {"repobilityId": "dd7395a66ec8e290", "scanner": "scanner-primary", "fingerprint": "75899c42336d5fd3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/research-architect.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e2f92e199cc72ff5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/vibe-designer.md"}, "properties": {"repobilityId": "da1df095ca356e48", "scanner": "scanner-primary", "fingerprint": "e2f92e199cc72ff5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/vibe-designer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-08197d292ca9e5c4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/lead-gen.md"}, "properties": {"repobilityId": "1c0f70deab3fd8ed", "scanner": "scanner-primary", "fingerprint": "08197d292ca9e5c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/lead-gen.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2bd537f975924b81", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/media-producer.md"}, "properties": {"repobilityId": "74cb7b79128913fe", "scanner": "scanner-primary", "fingerprint": "2bd537f975924b81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/media-producer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4964dab14ce3cc4c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/academic-paper.md"}, "properties": {"repobilityId": "55f0af85531724e3", "scanner": "scanner-primary", "fingerprint": "4964dab14ce3cc4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/academic-paper.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8fc80972511c63e2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/lead-enrichment.md"}, "properties": {"repobilityId": "4bcc2c8afb0953bf", "scanner": "scanner-primary", "fingerprint": "8fc80972511c63e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/lead-enrichment.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8248cb6cf1637f34", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/skills/firecrawl.md"}, "properties": {"repobilityId": "860ee8676d611e4a", "scanner": "scanner-primary", "fingerprint": "8248cb6cf1637f34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/firecrawl.md"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-d9ec0c69268600d9", "level": "none", "message": {"text": "Commented-code block (9 lines) in server.js:961"}, "properties": {"repobilityId": "cbf7dd31b08eda8d", "scanner": "scanner-primary", "fingerprint": "d9ec0c69268600d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b70494d2623f63ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server.js:568"}, "properties": {"repobilityId": "2163649a740569b8", "scanner": "scanner-primary", "fingerprint": "b70494d2623f63ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8150c2d6b54ff58f", "level": "none", "message": {"text": "Commented-code block (5 lines) in auto-research/notify.js:2"}, "properties": {"repobilityId": "0e9590d795cad62d", "scanner": "scanner-primary", "fingerprint": "8150c2d6b54ff58f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01fc93455559a638", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 auto-research/notify.js:62"}, "properties": {"repobilityId": "75c52d0c579e33e5", "scanner": "scanner-primary", "fingerprint": "01fc93455559a638", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bae9bb281fbdacbf", "level": "none", "message": {"text": "Commented-code block (7 lines) in dashboard/js/web-studio.js:1"}, "properties": {"repobilityId": "55de7facb3be616f", "scanner": "scanner-primary", "fingerprint": "bae9bb281fbdacbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adf9a7351eb53dcc", "level": "note", "message": {"text": "Legacy-named symbol `_buildAvatar3D_legacy` in dashboard/js/app.js:6723"}, "properties": {"repobilityId": "e4619dd70329ce28", "scanner": "scanner-primary", "fingerprint": "adf9a7351eb53dcc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb9c1fe091b705fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/web-studio/scaffold.js:1"}, "properties": {"repobilityId": "9b2a71baa0e7ec0c", "scanner": "scanner-primary", "fingerprint": "eb9c1fe091b705fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7df15e9dec3b5db", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/web-studio/pipeline.js:11"}, "properties": {"repobilityId": "5cb4672db0b6bb1b", "scanner": "scanner-primary", "fingerprint": "c7df15e9dec3b5db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-153f3551e16cb6da", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/web-studio/publish.js:1"}, "properties": {"repobilityId": "11a879a7e5293641", "scanner": "scanner-primary", "fingerprint": "153f3551e16cb6da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34cb1fd3b715cad8", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/web-studio/dns.js:5"}, "properties": {"repobilityId": "b5886e88a3354a51", "scanner": "scanner-primary", "fingerprint": "34cb1fd3b715cad8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80d3ac9acfe694b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/web-studio/hosting.js:9"}, "properties": {"repobilityId": "1b8dc39828d7b1dd", "scanner": "scanner-primary", "fingerprint": "80d3ac9acfe694b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4196b0473b5b5e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/web-studio/build.js:1"}, "properties": {"repobilityId": "5a8e8e1c4a9942d2", "scanner": "scanner-primary", "fingerprint": "c4196b0473b5b5e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2aa6e3c66aa27754", "level": "none", "message": {"text": "Commented-code block (6 lines) in commercial/modules/hermes-advanced/index.js:24"}, "properties": {"repobilityId": "5c655e675675c946", "scanner": "scanner-primary", "fingerprint": "2aa6e3c66aa27754", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-effae1c49e811d11", "level": "none", "message": {"text": "Commented-code block (7 lines) in commercial/modules/agent-builder/index.js:23"}, "properties": {"repobilityId": "a0318d8f6534bb49", "scanner": "scanner-primary", "fingerprint": "effae1c49e811d11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b334d875f2339fa1", "level": "note", "message": {"text": "5 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "faa38682016f5d53", "scanner": "scanner-primary", "fingerprint": "b334d875f2339fa1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-d88cc063189e448c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.liveavatar.com/v1/sessions/token (server.js:513)"}, "properties": {"repobilityId": "940d340428e59254", "scanner": "scanner-primary", "fingerprint": "d88cc063189e448c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffdfca8de558f407", "level": "error", "message": {"text": "Dangling fetch: POST https://api.heygen.com/v1/streaming.create_token (server.js:520)"}, "properties": {"repobilityId": "c26401302c41bc2b", "scanner": "scanner-primary", "fingerprint": "ffdfca8de558f407", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce04687fe70bbb5e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.d-id.com/talks (server.js:568)"}, "properties": {"repobilityId": "7baecaa9ea4c5e7b", "scanner": "scanner-primary", "fingerprint": "ce04687fe70bbb5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f9e47da89bca861", "level": "error", "message": {"text": "Dangling fetch: GET https://api.d-id.com/talks/${req.params.id} (server.js:604)"}, "properties": {"repobilityId": "838f2f671479176d", "scanner": "scanner-primary", "fingerprint": "5f9e47da89bca861", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e70009849685613", "level": "error", "message": {"text": "Dangling fetch: POST https://api.d-id.com/images (server.js:638)"}, "properties": {"repobilityId": "16d7ce6cd855f34f", "scanner": "scanner-primary", "fingerprint": "1e70009849685613", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bf2456d7d44450b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/speech (server.js:748)"}, "properties": {"repobilityId": "f9653d7a65947545", "scanner": "scanner-primary", "fingerprint": "2bf2456d7d44450b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-060c163a13dc8280", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:1557)"}, "properties": {"repobilityId": "b0e34297c652e2bc", "scanner": "scanner-primary", "fingerprint": "060c163a13dc8280", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8bd8c3abea328825", "level": "error", "message": {"text": "Dangling fetch: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${apiKey} (server.js:1626)"}, "properties": {"repobilityId": "8e06fb0ef196e654", "scanner": "scanner-primary", "fingerprint": "8bd8c3abea328825", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a42f426a09bc94c4", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${notificationConfig.telegram.botToken}/sendMessage (server.js:3748)"}, "properties": {"repobilityId": "509b7a372f6297d4", "scanner": "scanner-primary", "fingerprint": "a42f426a09bc94c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c912c7415cfe5ee", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:4803)"}, "properties": {"repobilityId": "149d4f145a50cfdd", "scanner": "scanner-primary", "fingerprint": "4c912c7415cfe5ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f43ad0f1120510f9", "level": "error", "message": {"text": "Dangling fetch: GET https://api.deepseek.com/models (server.js:4820)"}, "properties": {"repobilityId": "6002a4879ee3c317", "scanner": "scanner-primary", "fingerprint": "f43ad0f1120510f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-343f0b69f8a47efe", "level": "error", "message": {"text": "Dangling fetch: GET https://api.x.ai/v1/models (server.js:4830)"}, "properties": {"repobilityId": "6017683762633e3f", "scanner": "scanner-primary", "fingerprint": "343f0b69f8a47efe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18eafe5c4080cfeb", "level": "error", "message": {"text": "Dangling fetch: GET https://generativelanguage.googleapis.com/v1beta/models?key=${settings.ai.gemini_api_key} (server.js:4847)"}, "properties": {"repobilityId": "cb923ce1ce1f83af", "scanner": "scanner-primary", "fingerprint": "18eafe5c4080cfeb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2c754467e3deffb", "level": "error", "message": {"text": "Dangling fetch: GET https://api.openai.com/v1/models (server.js:4856)"}, "properties": {"repobilityId": "351bb07bbea32b53", "scanner": "scanner-primary", "fingerprint": "a2c754467e3deffb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-856c83ff27e94a26", "level": "error", "message": {"text": "Dangling fetch: POST https://api.perplexity.ai/chat/completions (server.js:4865)"}, "properties": {"repobilityId": "e411ea791eb5e021", "scanner": "scanner-primary", "fingerprint": "856c83ff27e94a26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23ffacf0b1f1ee79", "level": "error", "message": {"text": "Dangling fetch: GET https://api.manus.im/v1/user/me (server.js:4878)"}, "properties": {"repobilityId": "92ac042364ba718d", "scanner": "scanner-primary", "fingerprint": "23ffacf0b1f1ee79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-199bf3d5f821bcb7", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (server.js:4894)"}, "properties": {"repobilityId": "d5204b45125a529a", "scanner": "scanner-primary", "fingerprint": "199bf3d5f821bcb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6bb96f9e1fa78a3d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.apify.com/v2/user/me (server.js:4905)"}, "properties": {"repobilityId": "819aebacb340a341", "scanner": "scanner-primary", "fingerprint": "6bb96f9e1fa78a3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d0281b3f11349de", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dataforseo.com/v3/serp/google/organic/live/advanced (server.js:4915)"}, "properties": {"repobilityId": "f4d259aae9cb9f26", "scanner": "scanner-primary", "fingerprint": "9d0281b3f11349de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4926f4da320107c", "level": "error", "message": {"text": "Dangling fetch: GET https://api.d-id.com/credits (server.js:4927)"}, "properties": {"repobilityId": "ff2572bf833f85d6", "scanner": "scanner-primary", "fingerprint": "b4926f4da320107c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50f9b3203083f753", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (server.js:5353)"}, "properties": {"repobilityId": "0b8450d469fb7b1c", "scanner": "scanner-primary", "fingerprint": "50f9b3203083f753", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b1c0a02ee49cf05", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (server.js:5380)"}, "properties": {"repobilityId": "f6dacdc70a9aa1f3", "scanner": "scanner-primary", "fingerprint": "8b1c0a02ee49cf05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b1c6f376aac87df", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (server.js:5577)"}, "properties": {"repobilityId": "404afe0db7154c26", "scanner": "scanner-primary", "fingerprint": "0b1c6f376aac87df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d30c493bcbce7ccd", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dataforseo.com/v3/${endpoint} (server.js:5965)"}, "properties": {"repobilityId": "4ddee7c3cb6e11a7", "scanner": "scanner-primary", "fingerprint": "d30c493bcbce7ccd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad306ff4ae3dae9e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/sendMessage (auto-research/notify.js:62)"}, "properties": {"repobilityId": "ad389ab447627efe", "scanner": "scanner-primary", "fingerprint": "ad306ff4ae3dae9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fbb0088c47c9906", "level": "error", "message": {"text": "Dangling fetch: GET https://api.ipify.org?format=json (lib/web-studio/dns.js:27)"}, "properties": {"repobilityId": "de7faf166b5a61e4", "scanner": "scanner-primary", "fingerprint": "4fbb0088c47c9906", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd326b3e2907972d", "level": "note", "message": {"text": "Unused endpoint: GET /api/tenant/branding"}, "properties": {"repobilityId": "7315fa608b10bcab", "scanner": "scanner-primary", "fingerprint": "bd326b3e2907972d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bd83d35ce8663ca6", "level": "note", "message": {"text": "Unused endpoint: POST /api/branding"}, "properties": {"repobilityId": "76f1dcecca1dabb9", "scanner": "scanner-primary", "fingerprint": "bd83d35ce8663ca6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-76889df7c8e240c5", "level": "note", "message": {"text": "Unused endpoint: USE /api/"}, "properties": {"repobilityId": "fcfd35d703bcb479", "scanner": "scanner-primary", "fingerprint": "76889df7c8e240c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf1d0e410efa81ec", "level": "note", "message": {"text": "Unused endpoint: GET /api/stripe/checkout"}, "properties": {"repobilityId": "af281995df9cd3db", "scanner": "scanner-primary", "fingerprint": "cf1d0e410efa81ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-361066e811f4dd9e", "level": "note", "message": {"text": "Unused endpoint: GET /api/stripe/success"}, "properties": {"repobilityId": "ed55f0885b7f827e", "scanner": "scanner-primary", "fingerprint": "361066e811f4dd9e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-76f7964d6c782e43", "level": "note", "message": {"text": "Unused endpoint: POST /api/stripe/webhook"}, "properties": {"repobilityId": "556752c1d5266e0e", "scanner": "scanner-primary", "fingerprint": "76f7964d6c782e43", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5a39262ac205120", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/logout"}, "properties": {"repobilityId": "aa3173c3593ae21d", "scanner": "scanner-primary", "fingerprint": "d5a39262ac205120", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee4aa5ddab88c9dc", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/me"}, "properties": {"repobilityId": "0fc801facb986854", "scanner": "scanner-primary", "fingerprint": "ee4aa5ddab88c9dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-769398a8a95bd693", "level": "note", "message": {"text": "Unused endpoint: GET /app"}, "properties": {"repobilityId": "53899da4bddebaed", "scanner": "scanner-primary", "fingerprint": "769398a8a95bd693", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a0b17f3b9d6a1a4", "level": "note", "message": {"text": "Unused endpoint: GET /api/onboarding/status"}, "properties": {"repobilityId": "4abb2af61e199257", "scanner": "scanner-primary", "fingerprint": "6a0b17f3b9d6a1a4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d21c72fb15e0eab1", "level": "note", "message": {"text": "Unused endpoint: POST /api/heygen/token"}, "properties": {"repobilityId": "538b70eaab9c6525", "scanner": "scanner-primary", "fingerprint": "d21c72fb15e0eab1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7c89c4949afd0fa1", "level": "note", "message": {"text": "Unused endpoint: GET /api/heygen/status"}, "properties": {"repobilityId": "97395d4316ce8241", "scanner": "scanner-primary", "fingerprint": "7c89c4949afd0fa1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5c9f0171c726de7", "level": "note", "message": {"text": "Unused endpoint: GET /api/did/status"}, "properties": {"repobilityId": "fd05282c2a72dd49", "scanner": "scanner-primary", "fingerprint": "c5c9f0171c726de7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-073c458644e0d534", "level": "note", "message": {"text": "Unused endpoint: POST /api/did/talk"}, "properties": {"repobilityId": "3dcc5bcc8ebf33b6", "scanner": "scanner-primary", "fingerprint": "073c458644e0d534", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d501902b8de4c3c", "level": "note", "message": {"text": "Unused endpoint: GET /api/did/talk/:id"}, "properties": {"repobilityId": "a9db82cb7ac66727", "scanner": "scanner-primary", "fingerprint": "8d501902b8de4c3c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2159f2b7407cad29", "level": "note", "message": {"text": "Unused endpoint: POST /api/did/upload-photo"}, "properties": {"repobilityId": "113c593b3c94c04a", "scanner": "scanner-primary", "fingerprint": "2159f2b7407cad29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c29a982b07099b36", "level": "note", "message": {"text": "Unused endpoint: GET /api/did/photos"}, "properties": {"repobilityId": "b640c7dcd2a0fc7a", "scanner": "scanner-primary", "fingerprint": "c29a982b07099b36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-45092af34f11f4cd", "level": "note", "message": {"text": "Unused endpoint: POST /api/livekit/token"}, "properties": {"repobilityId": "21e8c68e5287f53e", "scanner": "scanner-primary", "fingerprint": "45092af34f11f4cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-556039559ea7eb50", "level": "note", "message": {"text": "Unused endpoint: GET /api/livekit/status"}, "properties": {"repobilityId": "69f54efd85a8de5f", "scanner": "scanner-primary", "fingerprint": "556039559ea7eb50", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f43885d3e13ae484", "level": "note", "message": {"text": "Unused endpoint: GET /free-audit"}, "properties": {"repobilityId": "d5bebaf0a694dfb3", "scanner": "scanner-primary", "fingerprint": "f43885d3e13ae484", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5dc9d4af696cdaa", "level": "note", "message": {"text": "Unused endpoint: GET /blog"}, "properties": {"repobilityId": "73c49584c93c5df6", "scanner": "scanner-primary", "fingerprint": "e5dc9d4af696cdaa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b18e1345a1859ef4", "level": "note", "message": {"text": "Unused endpoint: GET /blog/:slug"}, "properties": {"repobilityId": "8a57187e157fb0cf", "scanner": "scanner-primary", "fingerprint": "b18e1345a1859ef4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fff7d7c74ad81e4", "level": "note", "message": {"text": "Unused endpoint: GET /about"}, "properties": {"repobilityId": "1a7ca33d124362ee", "scanner": "scanner-primary", "fingerprint": "5fff7d7c74ad81e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a878da9d4bd6662", "level": "note", "message": {"text": "Unused endpoint: GET /contact"}, "properties": {"repobilityId": "18e1e5375fa1cde7", "scanner": "scanner-primary", "fingerprint": "3a878da9d4bd6662", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18a4887e7bea6b36", "level": "note", "message": {"text": "Unused endpoint: GET /compare"}, "properties": {"repobilityId": "12ea9040bc1e9a5d", "scanner": "scanner-primary", "fingerprint": "18a4887e7bea6b36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-58a49b53cd0530ab", "level": "note", "message": {"text": "Unused endpoint: GET /compare/:slug"}, "properties": {"repobilityId": "e0176b188409f7fe", "scanner": "scanner-primary", "fingerprint": "58a49b53cd0530ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4dfcad3eb1618a", "level": "note", "message": {"text": "Unused endpoint: GET /login"}, "properties": {"repobilityId": "3c39a437aa3279de", "scanner": "scanner-primary", "fingerprint": "6a4dfcad3eb1618a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ebe3481a27b770a5", "level": "note", "message": {"text": "Unused endpoint: GET /terms"}, "properties": {"repobilityId": "0fa4731df48945a3", "scanner": "scanner-primary", "fingerprint": "ebe3481a27b770a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9daee89b78e9ceac", "level": "note", "message": {"text": "Unused endpoint: GET /privacy"}, "properties": {"repobilityId": "a5fa38dbc797b050", "scanner": "scanner-primary", "fingerprint": "9daee89b78e9ceac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb0428442a390121", "level": "note", "message": {"text": "Unused endpoint: GET /docs"}, "properties": {"repobilityId": "7746de36acd896a0", "scanner": "scanner-primary", "fingerprint": "eb0428442a390121", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "98e09bb8fcd7909b", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-328755b8aeea3a6f", "level": "note", "message": {"text": "Unused endpoint: GET /api/web-studio/sites"}, "properties": {"repobilityId": "1c1bda5073fa8541", "scanner": "scanner-primary", "fingerprint": "328755b8aeea3a6f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aea29a9065f18f81", "level": "note", "message": {"text": "Unused endpoint: POST /api/web-studio/sites"}, "properties": {"repobilityId": "1f1355e61d63f053", "scanner": "scanner-primary", "fingerprint": "aea29a9065f18f81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1be2bb42f15f0e8", "level": "note", "message": {"text": "Unused endpoint: GET /api/web-studio/sites/:id"}, "properties": {"repobilityId": "923336f62daa94f6", "scanner": "scanner-primary", "fingerprint": "c1be2bb42f15f0e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13734a3303069cf8", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/web-studio/sites/:id"}, "properties": {"repobilityId": "b6864a662ca0216a", "scanner": "scanner-primary", "fingerprint": "13734a3303069cf8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8fe506a69c2ae3ff", "level": "note", "message": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/files"}, "properties": {"repobilityId": "845885c70499a9c7", "scanner": "scanner-primary", "fingerprint": "8fe506a69c2ae3ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4467c49c68399025", "level": "note", "message": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/file"}, "properties": {"repobilityId": "bc74ea81e0567d6e", "scanner": "scanner-primary", "fingerprint": "4467c49c68399025", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7c322d7fedbf3a8f", "level": "note", "message": {"text": "Unused endpoint: PUT /api/web-studio/sites/:id/file"}, "properties": {"repobilityId": "4186eb28e9214727", "scanner": "scanner-primary", "fingerprint": "7c322d7fedbf3a8f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c8f87f80aa3b4774", "level": "note", "message": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/ai-edit"}, "properties": {"repobilityId": "91eda312b4c4c191", "scanner": "scanner-primary", "fingerprint": "c8f87f80aa3b4774", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6fde6022e9158ff8", "level": "note", "message": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/content"}, "properties": {"repobilityId": "7721f37b2493e705", "scanner": "scanner-primary", "fingerprint": "6fde6022e9158ff8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8921d8b2e660dfc0", "level": "note", "message": {"text": "Unused endpoint: PUT /api/web-studio/sites/:id/content"}, "properties": {"repobilityId": "5131d83170214ee7", "scanner": "scanner-primary", "fingerprint": "8921d8b2e660dfc0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3239901b84619b93", "level": "note", "message": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/build"}, "properties": {"repobilityId": "612b539ecf8dd5c8", "scanner": "scanner-primary", "fingerprint": "3239901b84619b93", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f367c4d84e5bc721", "level": "note", "message": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/domain"}, "properties": {"repobilityId": "e4776a115ca72ba6", "scanner": "scanner-primary", "fingerprint": "f367c4d84e5bc721", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-df2794fe6cdc5bda", "level": "note", "message": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/dns-check"}, "properties": {"repobilityId": "919be784696bab0f", "scanner": "scanner-primary", "fingerprint": "df2794fe6cdc5bda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-312d0bf698f21138", "level": "note", "message": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/publish"}, "properties": {"repobilityId": "1635a2b0894e10e8", "scanner": "scanner-primary", "fingerprint": "312d0bf698f21138", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8ec61c2919df8dfd", "level": "note", "message": {"text": "Unused endpoint: POST /api/web-studio/sites/:id/unpublish"}, "properties": {"repobilityId": "ae4f7f642c92d922", "scanner": "scanner-primary", "fingerprint": "8ec61c2919df8dfd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d307a0bcf2520990", "level": "note", "message": {"text": "Unused endpoint: GET /api/web-studio/sites/:id/preview/*"}, "properties": {"repobilityId": "6737f3ca98cb8d00", "scanner": "scanner-primary", "fingerprint": "d307a0bcf2520990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-97946292eea0d9a1", "level": "note", "message": {"text": "Unused endpoint: POST /api/agent/execute"}, "properties": {"repobilityId": "c24785c2b2164322", "scanner": "scanner-primary", "fingerprint": "97946292eea0d9a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d2517f9eafc5297", "level": "note", "message": {"text": "Unused endpoint: POST /api/chat"}, "properties": {"repobilityId": "79ec3a715c2a37cb", "scanner": "scanner-primary", "fingerprint": "9d2517f9eafc5297", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4b0361ac0f5eeb9", "level": "note", "message": {"text": "Unused endpoint: GET /api/agents"}, "properties": {"repobilityId": "03512d73d4e65a1a", "scanner": "scanner-primary", "fingerprint": "c4b0361ac0f5eeb9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}