{"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-6531587de12c09c6", "name": "Stray `console.log` in TS/JS \u2014 scripts/repair-spec-fences.js:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repair-spec-fences.js:65"}, "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-d66a46fac0e6649c", "name": "Stray `console.log` in TS/JS \u2014 public/usernode-bridge.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/usernode-bridge.js:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e35e5879096d37bc", "name": "Stray `console.log` in TS/JS \u2014 public/usernode-bridge/v1/bridge.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/usernode-bridge/v1/bridge.js:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4f429a17301e5f5", "name": "Stray `console.log` in TS/JS \u2014 public/js/app.js:298", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/js/app.js:298"}, "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-766a93632dbd6005", "name": "Stray `console.log` in TS/JS \u2014 src/config.js:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/config.js:168"}, "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-bddcc1d0c2654650", "name": "Stray `console.log` in TS/JS \u2014 src/services/logger.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/logger.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-8a9ff00cd2b30819", "name": "Stray `console.log` in TS/JS \u2014 src/services/template.js:288", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/template.js:288"}, "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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-835eae4c7f17a2f8", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-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-e0f19991934542f5", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "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-0dac9c5e2823491a", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "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-f1dc5ccc899d372d", "name": "Insecure pattern 'cors_wildcard' in server.js:104", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server.js:104"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29fa6fbb655b080b", "name": "Insecure pattern 'node_child_process' in capture/capture.js:50", "shortDescription": {"text": "Insecure pattern 'node_child_process' in capture/capture.js:50"}, "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-3fc9f6ef2fca3264", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/admin.html:172", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/admin.html:172"}, "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-888d81028a2e1eb9", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/node-status.html:229", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/node-status.html:229"}, "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-f81240273ffe5571", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/status.html:603", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/status.html:603"}, "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-42fa3989092973c2", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dev-chat.js:212", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dev-chat.js:212"}, "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-b6c81537023a0cb7", "name": "Insecure pattern 'direct_outerhtml_assignment' in public/js/dev-chat.js:3253", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in public/js/dev-chat.js:3253"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2cefc8b3f515b81", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/settings.js:604", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/settings.js:604"}, "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-e89d82ca7ff177ff", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/home.js:50", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/home.js:50"}, "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-2c6c418e81270fd4", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/proposal-discuss.js:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/proposal-discuss.js:56"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c795e45d136f5250", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dashboard.js:43", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dashboard.js:43"}, "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-6636a822a85cd40a", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dev-console.js:254", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dev-console.js:254"}, "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-f94c61305274f087", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/notifications.js:500", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/notifications.js:500"}, "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-76624b9279f62bc6", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/confirm-modal.js:45", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/confirm-modal.js:45"}, "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-baaa18db1b2ff518", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app.js:152", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app.js:152"}, "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-fedfb5952f309c3c", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/kudos.js:148", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/kudos.js:148"}, "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-b2a6a2d36f2346b8", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/leaderboard.js:234", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/leaderboard.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-0e71b2b0ae4833f4", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app-secrets.js:83", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app-secrets.js:83"}, "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-144d1d6196d37068", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/group-chat.js:522", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/group-chat.js:522"}, "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-60cf217b26463796", "name": "Insecure pattern 'insert_adjacent_html' in public/js/group-chat.js:435", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/group-chat.js:435"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d8dfdf096e9ecb7", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app-view.js:188", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app-view.js:188"}, "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-07d6da990385f2af", "name": "Insecure pattern 'insert_adjacent_html' in public/js/app-view.js:3182", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/app-view.js:3182"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-36883f4731e74d2d", "name": "Insecure pattern 'node_child_process' in src/services/worker.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/services/worker.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3b98f9ef9469354a", "name": "Insecure pattern 'node_child_process' in src/services/app-version.js:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/services/app-version.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-0251d73aa34ec8b6", "name": "Insecure pattern 'node_child_process' in src/services/db-manager.js:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/services/db-manager.js:2"}, "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-bbb31d5c0bfbf29b", "name": "Insecure pattern 'node_child_process' in src/services/docker.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/services/docker.js:1"}, "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-511b4f3716211818", "name": "Insecure pattern 'node_child_process' in src/services/status.js:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/services/status.js:2"}, "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-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "appleboy/ssh-action@v1 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": "medium", "confidence": 1.0}}, {"id": "scanner-231e484c7d9e3f90", "name": "Very large file: server.js (1844 lines)", "shortDescription": {"text": "Very large file: server.js (1844 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-afcba8df3ed11bb9", "name": "Very large file: public/usernode-bridge.js (3720 lines)", "shortDescription": {"text": "Very large file: public/usernode-bridge.js (3720 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-74d961280c7d09db", "name": "Very large file: public/usernode-bridge/v1/bridge.js (3720 lines)", "shortDescription": {"text": "Very large file: public/usernode-bridge/v1/bridge.js (3720 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-a99cae05b5f784ea", "name": "Very large file: public/js/dev-chat.js (4179 lines)", "shortDescription": {"text": "Very large file: public/js/dev-chat.js (4179 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-06e1a51a6ff4f053", "name": "Very large file: public/js/home.js (1193 lines)", "shortDescription": {"text": "Very large file: public/js/home.js (1193 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-51dfb1300a0a95b9", "name": "Very large file: public/js/notifications.js (1112 lines)", "shortDescription": {"text": "Very large file: public/js/notifications.js (1112 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-582d9483e1970443", "name": "Very large file: public/js/app.js (2255 lines)", "shortDescription": {"text": "Very large file: public/js/app.js (2255 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-62e8a08186556d12", "name": "Very large file: public/js/group-chat.js (2459 lines)", "shortDescription": {"text": "Very large file: public/js/group-chat.js (2459 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-a7a324db974fea9b", "name": "Very large file: public/js/app-view.js (4079 lines)", "shortDescription": {"text": "Very large file: public/js/app-view.js (4079 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-864f9a7f29634cb8", "name": "Very large file: src/routes/issues.js (1223 lines)", "shortDescription": {"text": "Very large file: src/routes/issues.js (1223 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-9c2fc9e1daf3d5ed", "name": "Very large file: src/routes/sessions.js (5282 lines)", "shortDescription": {"text": "Very large file: src/routes/sessions.js (5282 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-2264d8ce97d1dae8", "name": "Very large file: src/routes/apps.js (1277 lines)", "shortDescription": {"text": "Very large file: src/routes/apps.js (1277 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-91f7c1c5260baeb6", "name": "Very large file: src/routes/votes.js (1848 lines)", "shortDescription": {"text": "Very large file: src/routes/votes.js (1848 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-c205dbf81e4488c5", "name": "Very large file: src/services/worker.js (1500 lines)", "shortDescription": {"text": "Very large file: src/services/worker.js (1500 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-55ea5452186c1403", "name": "Very large file: src/services/github.js (1222 lines)", "shortDescription": {"text": "Very large file: src/services/github.js (1222 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-96c6c4427689bca9", "name": "Very large file: src/db/migrate.js (3051 lines)", "shortDescription": {"text": "Very large file: src/db/migrate.js (3051 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-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 88 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 75 placeholder/mock markers across 17 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-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-c41858a91a877247", "name": "Commented-code block (13 lines) in server.js:53", "shortDescription": {"text": "Commented-code block (13 lines) in server.js:53"}, "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-e7f61f9c3031cbf0", "name": "Commented-code block (7 lines) in tests/github-issues-route.test.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tests/github-issues-route.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d5dea35aa13282b", "name": "Commented-code block (6 lines) in tests/votes-merged-chat-count.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/votes-merged-chat-count.test.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-ccc0d578e152c87b", "name": "Commented-code block (6 lines) in tests/leaderboard-user-prs.test.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in tests/leaderboard-user-prs.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0bce538bb2779302", "name": "Commented-code block (5 lines) in tests/spec-wrapper.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/spec-wrapper.test.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-1b2471fcc2085452", "name": "Commented-code block (6 lines) in tests/anthropic-stream.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/anthropic-stream.test.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-03d587891a3491bd", "name": "Commented-code block (8 lines) in tests/recovered-turn-push-heal.test.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tests/recovered-turn-push-heal.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86fe548e10c2121b", "name": "Commented-code block (8 lines) in tests/limits-resolve-billing-path.test.js:5", "shortDescription": {"text": "Commented-code block (8 lines) in tests/limits-resolve-billing-path.test.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-ff690d751726b5f6", "name": "Commented-code block (5 lines) in tests/edge-gate.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/edge-gate.test.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-81b5778fb4b5517a", "name": "Commented-code block (6 lines) in tests/history.test.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in tests/history.test.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-77a0294274bef58b", "name": "Commented-code block (9 lines) in tests/issue-creator.test.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tests/issue-creator.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93da0b1a7858ce6a", "name": "Commented-code block (5 lines) in tests/app-llm-grants.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/app-llm-grants.test.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-b069c9c0f79c88f6", "name": "Commented-code block (6 lines) in tests/me-active-sessions.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/me-active-sessions.test.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-05a7e48cac9c0729", "name": "Commented-code block (6 lines) in tests/issue-proposal-icon.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/issue-proposal-icon.test.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-f1165ab8cc827314", "name": "Commented-code block (15 lines) in tests/members-modal-gesture.test.js:5", "shortDescription": {"text": "Commented-code block (15 lines) in tests/members-modal-gesture.test.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-d9104671b9b1d85e", "name": "Commented-code block (12 lines) in tests/issue-close-watcher.test.js:6", "shortDescription": {"text": "Commented-code block (12 lines) in tests/issue-close-watcher.test.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e908423765bfb46e", "name": "Commented-code block (5 lines) in tests/worker-watchdog.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/worker-watchdog.test.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-52e5f771d2ffd37f", "name": "Commented-code block (9 lines) in tests/static-cache.test.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tests/static-cache.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b43227a4792c659a", "name": "Commented-code block (5 lines) in tests/password-reset.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/password-reset.test.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-05cbd4f540445ba9", "name": "Commented-code block (7 lines) in tests/caddy-ask.test.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tests/caddy-ask.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80f2cf3dd2388f78", "name": "Commented-code block (14 lines) in tests/headless-staging.test.js:4", "shortDescription": {"text": "Commented-code block (14 lines) in tests/headless-staging.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a47c40c91b1929b2", "name": "Commented-code block (12 lines) in tests/headless-clarify.test.js:4", "shortDescription": {"text": "Commented-code block (12 lines) in tests/headless-clarify.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fdd8cf20a809ab82", "name": "Commented-code block (10 lines) in tests/devchat-alerts.test.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in tests/devchat-alerts.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d23845bb24ae19a1", "name": "Commented-code block (13 lines) in tests/kudos.test.js:3", "shortDescription": {"text": "Commented-code block (13 lines) in tests/kudos.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3892149e82bf649d", "name": "Commented-code block (6 lines) in tests/openSession-streaming-reset.test.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in tests/openSession-streaming-reset.test.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b74b9aa1a1d9e88b", "name": "Commented-code block (7 lines) in tests/issue-github-twin.test.js:8", "shortDescription": {"text": "Commented-code block (7 lines) in tests/issue-github-twin.test.js:8"}, "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-44c18eeccfab3dca", "name": "Commented-code block (9 lines) in tests/session-done-notifications.test.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tests/session-done-notifications.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb350873a6d6252f", "name": "Commented-code block (7 lines) in tests/session-lifecycle.test.js:361", "shortDescription": {"text": "Commented-code block (7 lines) in tests/session-lifecycle.test.js:361"}, "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-76bb5950ab5a1a46", "name": "Commented-code block (6 lines) in tests/app-llm-proxy-auth.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/app-llm-proxy-auth.test.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-6bb6becb46d6036f", "name": "Commented-code block (5 lines) in tests/conflict-resolver.test.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in tests/conflict-resolver.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c88a7c257df833ee", "name": "Commented-code block (5 lines) in tests/app-llm-billing.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/app-llm-billing.test.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-19ad3f5a8be0f8f8", "name": "Commented-code block (8 lines) in tests/web-fetch.test.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in tests/web-fetch.test.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-3d6762c87d97f460", "name": "Commented-code block (9 lines) in tests/home-app-activity-counts.test.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in tests/home-app-activity-counts.test.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-fbbbbb941435035f", "name": "Commented-code block (8 lines) in tests/favorites-order.test.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tests/favorites-order.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e23dddb929a1d39f", "name": "Commented-code block (6 lines) in tests/archive-proposal-card.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/archive-proposal-card.test.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-ba91ec049fd9babc", "name": "Commented-code block (5 lines) in tests/dev-feed-scroll-memory.test.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in tests/dev-feed-scroll-memory.test.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9561e61e1305df2b", "name": "Commented-code block (12 lines) in tests/ws-upgrade-redispatch.test.js:4", "shortDescription": {"text": "Commented-code block (12 lines) in tests/ws-upgrade-redispatch.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ed3a375e106f2b7", "name": "Commented-code block (7 lines) in tests/docker.test.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in tests/docker.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9afa68d1542d79ec", "name": "Commented-code block (7 lines) in tests/limits-record-spend.test.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in tests/limits-record-spend.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79962861d9bdbe4c", "name": "Commented-code block (7 lines) in tests/archive-session-list.test.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/archive-session-list.test.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-0f510abc3b780ba6", "name": "Commented-code block (8 lines) in tests/spec-viewer-session-reset.test.js:5", "shortDescription": {"text": "Commented-code block (8 lines) in tests/spec-viewer-session-reset.test.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-b7a84aec6b5600c2", "name": "Commented-code block (7 lines) in tests/clone-headless-suggestions.test.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/clone-headless-suggestions.test.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-2f266d336777cbbd", "name": "Commented-code block (7 lines) in tests/issue-generate-proposal-dedup.test.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/issue-generate-proposal-dedup.test.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-24e8e6fdc6489821", "name": "Commented-code block (5 lines) in tests/qa-suggestions.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/qa-suggestions.test.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-3efc189b39b609a0", "name": "Commented-code block (12 lines) in tests/sync-progress.test.js:3", "shortDescription": {"text": "Commented-code block (12 lines) in tests/sync-progress.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e671e5c72795acda", "name": "Legacy-named symbol `nOld` in tests/pr-metadata.test.js:350", "shortDescription": {"text": "Legacy-named symbol `nOld` in tests/pr-metadata.test.js:350"}, "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-5691af5107bc6ec9", "name": "Commented-code block (5 lines) in tests/pr-metadata.test.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tests/pr-metadata.test.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-70b742ec0a1b774d", "name": "Commented-code block (10 lines) in tests/ai-progress-estimate.test.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in tests/ai-progress-estimate.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30d5dddb42b121d6", "name": "Commented-code block (5 lines) in tests/app-conventions.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/app-conventions.test.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-d92178e5823f6111", "name": "Commented-code block (13 lines) in tests/spec-markdown.test.js:3", "shortDescription": {"text": "Commented-code block (13 lines) in tests/spec-markdown.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d250699c0d3b216", "name": "Commented-code block (5 lines) in tests/usernode-bridge.test.js:29", "shortDescription": {"text": "Commented-code block (5 lines) in tests/usernode-bridge.test.js:29"}, "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-672121ba5cdd1747", "name": "Commented-code block (7 lines) in tests/github-issues-cache.test.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/github-issues-cache.test.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-31b6826c0bcfbf6e", "name": "Commented-code block (8 lines) in tests/notifications-show-more.test.js:4", "shortDescription": {"text": "Commented-code block (8 lines) in tests/notifications-show-more.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55fd658a8bda643f", "name": "Commented-code block (9 lines) in tests/merged-discussion.test.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in tests/merged-discussion.test.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-893c96c4d2491e9a", "name": "Commented-code block (7 lines) in tests/votes-merge-deploy-failed.test.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/votes-merge-deploy-failed.test.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-6a22db3840e4743d", "name": "Commented-code block (9 lines) in tests/session-title.test.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tests/session-title.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac360cac43cdff36", "name": "Commented-code block (8 lines) in tests/spec-user-share.test.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tests/spec-user-share.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1c699350d92eb9d", "name": "Commented-code block (7 lines) in tests/votes-merge-failed-broadcast.test.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/votes-merge-failed-broadcast.test.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-dcc1edfdc0599664", "name": "Commented-code block (9 lines) in tests/recovery-headless-guard.test.js:4", "shortDescription": {"text": "Commented-code block (9 lines) in tests/recovery-headless-guard.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d34eae8f22c3d306", "name": "Commented-code block (7 lines) in tests/recover-stuck-merges.test.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/recover-stuck-merges.test.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-d294b7ccb090abf7", "name": "Commented-code block (6 lines) in tests/withdraw-gov-proposal.test.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in tests/withdraw-gov-proposal.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b1c28d9b3de8dcc", "name": "Commented-code block (9 lines) in tests/view-only-admin.test.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in tests/view-only-admin.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb0b1c12fb93e6e0", "name": "Commented-code block (14 lines) in tests/recovered-turn-spend.test.js:5", "shortDescription": {"text": "Commented-code block (14 lines) in tests/recovered-turn-spend.test.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-770943bc5291e715", "name": "Commented-code block (8 lines) in tests/thread-activity.test.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in tests/thread-activity.test.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6281559db2e0ae22", "name": "Commented-code block (6 lines) in tests/create-session-issue-link.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/create-session-issue-link.test.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-4a945a6d35ed8701", "name": "Commented-code block (5 lines) in tests/app-manifest-visibility.test.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in tests/app-manifest-visibility.test.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-e044158f156efee8", "name": "Commented-code block (6 lines) in tests/quick-replies.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/quick-replies.test.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-5d95f8292160c430", "name": "Commented-code block (6 lines) in tests/sync-activity-render.test.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in tests/sync-activity-render.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef404ad8b08c165e", "name": "Commented-code block (6 lines) in tests/ws-validate-thread-merged.test.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/ws-validate-thread-merged.test.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-f04207cad82a98fb", "name": "Commented-code block (8 lines) in tests/streaming-markdown.test.js:4", "shortDescription": {"text": "Commented-code block (8 lines) in tests/streaming-markdown.test.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdc6441cb5aa7a7b", "name": "Commented-code block (6 lines) in capture/capture.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in capture/capture.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-3b0b9942b4f1435a", "name": "Commented-code block (8 lines) in public/usernode-bridge.js:29", "shortDescription": {"text": "Commented-code block (8 lines) in public/usernode-bridge.js:29"}, "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-ceb9a05cb2bdbce9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/usernode-bridge.js:499", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/usernode-bridge.js:499"}, "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-fb76e431efe19a32", "name": "Commented-code block (8 lines) in public/usernode-bridge/v1/bridge.js:29", "shortDescription": {"text": "Commented-code block (8 lines) in public/usernode-bridge/v1/bridge.js:29"}, "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-0ec6edf877b3d653", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/usernode-bridge/v1/bridge.js:499", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/usernode-bridge/v1/bridge.js:499"}, "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-4d7ef409eea0172f", "name": "Commented-code block (13 lines) in public/js/dev-chat.js:32", "shortDescription": {"text": "Commented-code block (13 lines) in public/js/dev-chat.js:32"}, "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-865b1ec111fbd2e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/dev-chat.js:3045", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/dev-chat.js:3045"}, "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-e4f604936be240ca", "name": "Commented-code block (7 lines) in public/js/settings.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/settings.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fa779186a4ba98c", "name": "Commented-code block (6 lines) in public/js/spec-sections.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/spec-sections.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-664c2db2e0c267ce", "name": "Commented-code block (5 lines) in public/js/home.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/home.js:7"}, "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-1ca394546a592461", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/home.js:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/home.js:151"}, "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-adfc77ab6f612c4c", "name": "Commented-code block (8 lines) in public/js/proposal-discuss.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in public/js/proposal-discuss.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-662416893a91d512", "name": "Commented-code block (5 lines) in public/js/dev-host.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/dev-host.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-3cf6a4a2a15efe10", "name": "Commented-code block (7 lines) in public/js/header-layout.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/header-layout.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e92af46b0fbdf9d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/dashboard.js:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/dashboard.js:69"}, "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-43e8180ebbd53998", "name": "Commented-code block (5 lines) in public/js/dev-console.js:165", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/dev-console.js:165"}, "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-cf14336e2333c169", "name": "Legacy-named symbol `notif_expanded_groups_v1` in public/js/notifications.js:21", "shortDescription": {"text": "Legacy-named symbol `notif_expanded_groups_v1` in public/js/notifications.js:21"}, "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-cc6b03b4dcd171cb", "name": "Commented-code block (9 lines) in public/js/notifications.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in public/js/notifications.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36352bb823143238", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/notifications.js:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/notifications.js:5"}, "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-acbb1f3db5250c84", "name": "Commented-code block (8 lines) in public/js/cc-progress-summary.js:7", "shortDescription": {"text": "Commented-code block (8 lines) in public/js/cc-progress-summary.js:7"}, "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-2901a55031c4bf39", "name": "Commented-code block (8 lines) in public/js/confirm-modal.js:8", "shortDescription": {"text": "Commented-code block (8 lines) in public/js/confirm-modal.js:8"}, "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-f74015aef501f888", "name": "Commented-code block (5 lines) in public/js/app.js:14", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/app.js:14"}, "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-3e4156134fd16cfa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/app.js:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/app.js:226"}, "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-2d05bb04a5b547fb", "name": "Commented-code block (9 lines) in public/js/kudos.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in public/js/kudos.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9095bb71c51d772", "name": "Commented-code block (5 lines) in public/js/dev-alerts.js:14", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/dev-alerts.js:14"}, "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-05e1515df6c26993", "name": "Commented-code block (7 lines) in public/js/leaderboard.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/leaderboard.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8790faa0b3f9f006", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/leaderboard.js:172", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/leaderboard.js:172"}, "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-bdf275641f25e471", "name": "Commented-code block (6 lines) in public/js/theme.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/theme.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-ce50f4f0e696ff34", "name": "Commented-code block (8 lines) in public/js/app-secrets.js:7", "shortDescription": {"text": "Commented-code block (8 lines) in public/js/app-secrets.js:7"}, "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-c6ea1b69cf867f5d", "name": "Commented-code block (5 lines) in public/js/group-chat.js:9", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/group-chat.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-fe6f07533b82b6fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/group-chat.js:360", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/group-chat.js:360"}, "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-387c746dcce8b879", "name": "Commented-code block (7 lines) in public/js/streaming-markdown.js:13", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/streaming-markdown.js:13"}, "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-f7827b4ed0b0a9be", "name": "Commented-code block (8 lines) in public/js/app-view.js:16", "shortDescription": {"text": "Commented-code block (8 lines) in public/js/app-view.js:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7ea0efb3c01cd85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/app-view.js:129", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/app-view.js:129"}, "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-fd8b6fd0bfcbc161", "name": "Commented-code block (9 lines) in src/config.js:9", "shortDescription": {"text": "Commented-code block (9 lines) in src/config.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-db88307f989b9bf6", "name": "Commented-code block (6 lines) in src/middleware/admin.js:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/middleware/admin.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-590e208749b935a4", "name": "Commented-code block (13 lines) in src/middleware/auth.js:29", "shortDescription": {"text": "Commented-code block (13 lines) in src/middleware/auth.js:29"}, "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-b86f53c76effd18e", "name": "Commented-code block (8 lines) in src/middleware/rate-limits.js:43", "shortDescription": {"text": "Commented-code block (8 lines) in src/middleware/rate-limits.js:43"}, "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-4cad484f841b677e", "name": "Commented-code block (6 lines) in src/middleware/anthropic-proxy-auth.js:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/middleware/anthropic-proxy-auth.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-93230418277d7744", "name": "Commented-code block (8 lines) in src/middleware/app-llm-auth.js:15", "shortDescription": {"text": "Commented-code block (8 lines) in src/middleware/app-llm-auth.js:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e970d2fac526fa86", "name": "Commented-code block (8 lines) in src/middleware/internal-auth.js:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/middleware/internal-auth.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f1c5ddc032cf49e", "name": "Commented-code block (7 lines) in src/routes/collaborators.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/routes/collaborators.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14a4cbacc908f832", "name": "Commented-code block (7 lines) in src/routes/app-llm-proxy.js:14", "shortDescription": {"text": "Commented-code block (7 lines) in src/routes/app-llm-proxy.js:14"}, "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-2555f6125e884f78", "name": "Commented-code block (9 lines) in src/routes/proposal-discuss.js:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/routes/proposal-discuss.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b90470a7a72ab846", "name": "Commented-code block (6 lines) in src/routes/admin.js:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/admin.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-c24bb870fc955821", "name": "Commented-code block (6 lines) in src/routes/issues.js:24", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/issues.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-0c63a33ab0117c8d", "name": "Commented-code block (10 lines) in src/routes/feedback.js:25", "shortDescription": {"text": "Commented-code block (10 lines) in src/routes/feedback.js:25"}, "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-6ea636ed9ee621db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/feedback.js:187", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/feedback.js:187"}, "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-f280d1b598af8ff3", "name": "Commented-code block (6 lines) in src/routes/anthropic-proxy.js:19", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/anthropic-proxy.js:19"}, "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-359ace46d046229d", "name": "Commented-code block (14 lines) in src/routes/dashboard.js:11", "shortDescription": {"text": "Commented-code block (14 lines) in src/routes/dashboard.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-75dd898cf8e9970b", "name": "Commented-code block (6 lines) in src/routes/auth.js:15", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/auth.js:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4f3970b0f7fe65b", "name": "Commented-code block (7 lines) in src/routes/notifications.js:15", "shortDescription": {"text": "Commented-code block (7 lines) in src/routes/notifications.js:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f57e55bc22c2f158", "name": "Commented-code block (5 lines) in src/routes/chat.js:23", "shortDescription": {"text": "Commented-code block (5 lines) in src/routes/chat.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-8b4dd9c76251414a", "name": "Commented-code block (5 lines) in src/routes/visuals.js:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/routes/visuals.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-0bc4d58eb9f147d1", "name": "Commented-code block (5 lines) in src/routes/kudos.js:53", "shortDescription": {"text": "Commented-code block (5 lines) in src/routes/kudos.js:53"}, "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-fda664a1c1c5e9ea", "name": "Commented-code block (6 lines) in src/routes/sessions.js:28", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/sessions.js:28"}, "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-6dd3d49ef7702f52", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/sessions.js:1764", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/sessions.js:1764"}, "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-f4fc689373afe33c", "name": "Commented-code block (6 lines) in src/routes/apps.js:48", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/apps.js:48"}, "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-7e3b0bfd412dd9a8", "name": "Commented-code block (7 lines) in src/routes/internal.js:14", "shortDescription": {"text": "Commented-code block (7 lines) in src/routes/internal.js:14"}, "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-063478dedaee6e9e", "name": "Commented-code block (10 lines) in src/routes/votes.js:15", "shortDescription": {"text": "Commented-code block (10 lines) in src/routes/votes.js:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe0ee7c7c4f143e0", "name": "Commented-code block (6 lines) in src/routes/llm-grants.js:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/llm-grants.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-72d7c40a1c052271", "name": "Commented-code block (7 lines) in src/services/staging.js:23", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/staging.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-554c736fc58c5007", "name": "Commented-code block (5 lines) in src/services/rename-pr.js:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/rename-pr.js:55"}, "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-a1c13fb56bfb1b17", "name": "Commented-code block (7 lines) in src/services/models.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/models.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-b8831541f1b8a993", "name": "Commented-code block (7 lines) in src/services/admin-approval.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/admin-approval.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-1ac4b8825e8cadc3", "name": "Commented-code block (5 lines) in src/services/worker.js:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/worker.js:19"}, "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-1d60cc5db6de8885", "name": "Commented-code block (5 lines) in src/services/app-creator.js:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/app-creator.js:17"}, "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-58ec549ad5928f3a", "name": "Commented-code block (5 lines) in src/services/web-fetch.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/web-fetch.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10bdfeb48043301a", "name": "Commented-code block (6 lines) in src/services/github.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/github.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb37ecbb51359b07", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/github.js:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/github.js:37"}, "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-c7e1175d9bf07b56", "name": "Commented-code block (6 lines) in src/services/main-drift-poller.js:54", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/main-drift-poller.js:54"}, "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-2e6c8716fcd0eb04", "name": "Commented-code block (11 lines) in src/services/ws.js:25", "shortDescription": {"text": "Commented-code block (11 lines) in src/services/ws.js:25"}, "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-330896a86f667dd6", "name": "Commented-code block (6 lines) in src/services/logger.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/logger.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-7d19ab094a06fb40", "name": "Commented-code block (6 lines) in src/services/testing-notes.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/testing-notes.js:7"}, "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-554a3456ed38c4f9", "name": "Commented-code block (6 lines) in src/services/app-version.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/app-version.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-9725a3c41cded49c", "name": "Commented-code block (5 lines) in src/services/session-bus.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/session-bus.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-5df4babf607b79e4", "name": "Commented-code block (6 lines) in src/services/limits.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/limits.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-0aa25666d89442ff", "name": "Commented-code block (6 lines) in src/services/worker-progress.js:19", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/worker-progress.js:19"}, "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-13e676c27b862437", "name": "Commented-code block (6 lines) in src/services/prompts.js:26", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/prompts.js:26"}, "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-b235083a8df5329f", "name": "Commented-code block (6 lines) in src/services/events.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/events.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5a7e83572d200e3", "name": "Commented-code block (6 lines) in src/services/node-status.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/node-status.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ff3ffb6c51c8398", "name": "Commented-code block (6 lines) in src/services/db-manager.js:22", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/db-manager.js:22"}, "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-cafb11d8acc5d919", "name": "Commented-code block (6 lines) in src/services/conflict-resolver.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/conflict-resolver.js:7"}, "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-349ee8aa138ee8d3", "name": "Commented-code block (7 lines) in src/services/app-respawn.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/app-respawn.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-97b7cc4d72a3a834", "name": "Commented-code block (9 lines) in src/services/active-workers.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/services/active-workers.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-ac2c5ccf6ca3a681", "name": "Commented-code block (13 lines) in src/services/notifications.js:3", "shortDescription": {"text": "Commented-code block (13 lines) in src/services/notifications.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c28a1cf5812c577", "name": "Commented-code block (8 lines) in src/services/app-manifest.js:92", "shortDescription": {"text": "Commented-code block (8 lines) in src/services/app-manifest.js:92"}, "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-be7a5a2d6bace2b8", "name": "Commented-code block (5 lines) in src/services/session-lifecycle.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/session-lifecycle.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84d3dd807aaba6fe", "name": "Commented-code block (12 lines) in src/services/app-access.js:3", "shortDescription": {"text": "Commented-code block (12 lines) in src/services/app-access.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4a35d4ce8ddfa7a", "name": "Commented-code block (5 lines) in src/services/active-users.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/active-users.js:7"}, "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-16f1bdf041e41338", "name": "Commented-code block (8 lines) in src/services/visuals.js:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/services/visuals.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-5194ba4ee203cfd0", "name": "Commented-code block (8 lines) in src/services/caddy.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/services/caddy.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d53292294f03e543", "name": "Commented-code block (5 lines) in src/services/app-llm-env.js:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/app-llm-env.js:10"}, "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-b7641a4da139ad10", "name": "Commented-code block (5 lines) in src/services/llm.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/llm.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7defde67b5fb8922", "name": "Commented-code block (6 lines) in src/services/sync-main.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/sync-main.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-d8af49174718714b", "name": "Commented-code block (5 lines) in src/services/pr-metadata.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/pr-metadata.js:8"}, "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-d3d17bdb5ebf8568", "name": "Commented-code block (13 lines) in src/services/session-title.js:3", "shortDescription": {"text": "Commented-code block (13 lines) in src/services/session-title.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a90ede4f98f1bf4e", "name": "Commented-code block (5 lines) in src/services/app-deploy-status.js:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/app-deploy-status.js:36"}, "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-f439bdea2be3f68f", "name": "Commented-code block (10 lines) in src/services/spec-format.js:4", "shortDescription": {"text": "Commented-code block (10 lines) in src/services/spec-format.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0749e5d2a263fda", "name": "Commented-code block (6 lines) in src/services/static-cache.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/static-cache.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e0e28dd252a42c6", "name": "Commented-code block (5 lines) in src/services/template.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/template.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-ba873a1eacfb6679", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/template.js:326", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/template.js:326"}, "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-780f312be4bfb03b", "name": "Commented-code block (7 lines) in src/services/anthropic-stream.js:11", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/anthropic-stream.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-b664bb49ea8722af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/anthropic-stream.js:182", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/anthropic-stream.js:182"}, "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-431d24238ea5b70a", "name": "Commented-code block (8 lines) in src/services/issue-close-watcher.js:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/services/issue-close-watcher.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-fee9ad517140b038", "name": "Commented-code block (7 lines) in src/services/docker.js:47", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/docker.js:47"}, "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-ceebed8ecfc27a57", "name": "Commented-code block (5 lines) in src/services/status.js:156", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/status.js:156"}, "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-edc0f564156f66db", "name": "Commented-code block (10 lines) in src/db/migrate.js:61", "shortDescription": {"text": "Commented-code block (10 lines) in src/db/migrate.js:61"}, "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-dde7f7204bd985f6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/migrate.js:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/migrate.js:95"}, "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-2a68d84925e6b4d8", "name": "47 env vars used in code but missing from .env.example", "shortDescription": {"text": "47 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APPLY`, `ARCHIVED_RETENTION_MS`, `CADDY_HOST`, `CONFLICT_MERGEABLE_AFTER_PUSH_INITIAL_MS`, `CONFLICT_MERGEABLE_POLL_DELAY_MS`, `CONFLICT_MERGEABLE_POLL_TRIES`, `CONFLICT_MERGEABLE_TRUE_DELAY_MS`, `CONFLICT_MERGEABLE_TRUE_TRIES` + 39 more. 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-87ba86bb604f1e97", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/me/active-sessions (tests/me-active-sessions.test.js:66)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/me/active-sessions (tests/me-active-sessions.test.js:66)"}, "fullDescription": {"text": "`tests/me-active-sessions.test.js:66` calls `GET http://127.0.0.1:${port}/api/me/active-sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/me/active-sessions`\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-ecae7c12e224a6f6", "name": "Dangling fetch: POST http://127.0.0.1:${port}${path} (tests/password-reset.test.js:92)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}${path} (tests/password-reset.test.js:92)"}, "fullDescription": {"text": "`tests/password-reset.test.js:92` calls `POST http://127.0.0.1:${port}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/<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-64795bdbc50d05c6", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/admin/users/9/reset-password (tests/password-reset.test.js:420)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/admin/users/9/reset-password (tests/password-reset.test.js:420)"}, "fullDescription": {"text": "`tests/password-reset.test.js:420` calls `POST http://127.0.0.1:${port}/api/admin/users/9/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/admin/users/<p>/reset-password`\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-3fa0621b2b1eb1ce", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/apps (tests/home-app-activity-counts.test.js:78)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/apps (tests/home-app-activity-counts.test.js:78)"}, "fullDescription": {"text": "`tests/home-app-activity-counts.test.js:78` calls `GET http://127.0.0.1:${port}/api/apps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/apps`\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-12d87a714cc96656", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/1/clone-headless (tests/clone-headless-suggestions.test.js:11", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/1/clone-headless (tests/clone-headless-suggestions.test.js:115)"}, "fullDescription": {"text": "`tests/clone-headless-suggestions.test.js:115` calls `POST http://127.0.0.1:${port}/api/sessions/1/clone-headless` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/sessions/<p>/clone-headless`\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-e8bdeac584db2e28", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/41/sync-main (tests/sync-progress.test.js:487)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/41/sync-main (tests/sync-progress.test.js:487)"}, "fullDescription": {"text": "`tests/sync-progress.test.js:487` calls `POST http://127.0.0.1:${port}/api/sessions/41/sync-main` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/sessions/<p>/sync-main`\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-c62bd888d77409cd", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/42/sync-main (tests/sync-progress.test.js:522)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/42/sync-main (tests/sync-progress.test.js:522)"}, "fullDescription": {"text": "`tests/sync-progress.test.js:522` calls `POST http://127.0.0.1:${port}/api/sessions/42/sync-main` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/sessions/<p>/sync-main`\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-adcb351526692423", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/sessions/43/status (tests/sync-progress.test.js:550)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/sessions/43/status (tests/sync-progress.test.js:550)"}, "fullDescription": {"text": "`tests/sync-progress.test.js:550` calls `GET http://127.0.0.1:${port}/api/sessions/43/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/sessions/<p>/status`\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-5e7bb4e07292cc6a", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/sessions/44/status (tests/sync-progress.test.js:557)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/sessions/44/status (tests/sync-progress.test.js:557)"}, "fullDescription": {"text": "`tests/sync-progress.test.js:557` calls `GET http://127.0.0.1:${port}/api/sessions/44/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/sessions/<p>/status`\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-0fa2e666a986c12c", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:72)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:72)"}, "fullDescription": {"text": "`tests/create-session-issue-link.test.js:72` calls `POST http://127.0.0.1:${port}/api/apps/demo/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/apps/demo/sessions`\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-c5e70a383fa50b66", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:94)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:94)"}, "fullDescription": {"text": "`tests/create-session-issue-link.test.js:94` calls `POST http://127.0.0.1:${port}/api/apps/demo/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/apps/demo/sessions`\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-7ac039e186058681", "name": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:112)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:112)"}, "fullDescription": {"text": "`tests/create-session-issue-link.test.js:112` calls `POST http://127.0.0.1:${port}/api/apps/demo/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/apps/demo/sessions`\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-09ff4c533eb96d06", "name": "Dangling fetch: GET /__mock/enabled (public/usernode-bridge.js:768)", "shortDescription": {"text": "Dangling fetch: GET /__mock/enabled (public/usernode-bridge.js:768)"}, "fullDescription": {"text": "`public/usernode-bridge.js:768` calls `GET /__mock/enabled` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/enabled`\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-a9b25ec2d1870e16", "name": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3338)", "shortDescription": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3338)"}, "fullDescription": {"text": "`public/usernode-bridge.js:3338` calls `POST /__mock/sendTransaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/sendtransaction`\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-be903f1990350771", "name": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3350)", "shortDescription": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3350)"}, "fullDescription": {"text": "`public/usernode-bridge.js:3350` calls `POST /__mock/sendTransaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/sendtransaction`\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-83011e8edee01b9a", "name": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3409)", "shortDescription": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3409)"}, "fullDescription": {"text": "`public/usernode-bridge.js:3409` calls `POST /__mock/sendTransaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/sendtransaction`\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-29783a572c56582d", "name": "Dangling fetch: POST /__mock/getTransactions (public/usernode-bridge.js:3545)", "shortDescription": {"text": "Dangling fetch: POST /__mock/getTransactions (public/usernode-bridge.js:3545)"}, "fullDescription": {"text": "`public/usernode-bridge.js:3545` calls `POST /__mock/getTransactions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/gettransactions`\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-04f88f04ef87f50f", "name": "Dangling fetch: GET /__mock/enabled (public/usernode-bridge/v1/bridge.js:768)", "shortDescription": {"text": "Dangling fetch: GET /__mock/enabled (public/usernode-bridge/v1/bridge.js:768)"}, "fullDescription": {"text": "`public/usernode-bridge/v1/bridge.js:768` calls `GET /__mock/enabled` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/enabled`\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-9ef66c92537f253e", "name": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3338)", "shortDescription": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3338)"}, "fullDescription": {"text": "`public/usernode-bridge/v1/bridge.js:3338` calls `POST /__mock/sendTransaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/sendtransaction`\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-545f09cff796a47c", "name": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3350)", "shortDescription": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3350)"}, "fullDescription": {"text": "`public/usernode-bridge/v1/bridge.js:3350` calls `POST /__mock/sendTransaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/sendtransaction`\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-05f398aa9d57d0d8", "name": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3409)", "shortDescription": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3409)"}, "fullDescription": {"text": "`public/usernode-bridge/v1/bridge.js:3409` calls `POST /__mock/sendTransaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/sendtransaction`\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-360bd43b65fc5927", "name": "Dangling fetch: POST /__mock/getTransactions (public/usernode-bridge/v1/bridge.js:3545)", "shortDescription": {"text": "Dangling fetch: POST /__mock/getTransactions (public/usernode-bridge/v1/bridge.js:3545)"}, "fullDescription": {"text": "`public/usernode-bridge/v1/bridge.js:3545` calls `POST /__mock/getTransactions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/__mock/gettransactions`\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-c9c456f9ccaae230", "name": "Dangling fetch: POST /api/sessions/${id}/${action} (public/js/dev-chat.js:396)", "shortDescription": {"text": "Dangling fetch: POST /api/sessions/${id}/${action} (public/js/dev-chat.js:396)"}, "fullDescription": {"text": "`public/js/dev-chat.js:396` calls `POST /api/sessions/${id}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sessions/<p>/<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-626396ae1fd98d0d", "name": "Dangling fetch: POST /api/sessions/${id}/${action} (public/js/dev-chat.js:2997)", "shortDescription": {"text": "Dangling fetch: POST /api/sessions/${id}/${action} (public/js/dev-chat.js:2997)"}, "fullDescription": {"text": "`public/js/dev-chat.js:2997` calls `POST /api/sessions/${id}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sessions/<p>/<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-2fdb67a2bd9062f8", "name": "Dangling fetch: GET /api/leaderboard/${path}?window=${Leaderboard.window}&limit=20 (public/js/leaderboard.js:175)", "shortDescription": {"text": "Dangling fetch: GET /api/leaderboard/${path}?window=${Leaderboard.window}&limit=20 (public/js/leaderboard.js:175)"}, "fullDescription": {"text": "`public/js/leaderboard.js:175` calls `GET /api/leaderboard/${path}?window=${Leaderboard.window}&limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leaderboard/<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-5657aa87dd9adf07", "name": "Dangling fetch: GET /api/apps/${slug}/github-issues${AppView._demoQS()} (public/js/app-view.js:1212)", "shortDescription": {"text": "Dangling fetch: GET /api/apps/${slug}/github-issues${AppView._demoQS()} (public/js/app-view.js:1212)"}, "fullDescription": {"text": "`public/js/app-view.js:1212` calls `GET /api/apps/${slug}/github-issues${AppView._demoQS()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/<p>/github-issues/<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-aec3252bf257aecc", "name": "Dangling fetch: GET /api/apps/${slug}/promoted${AppView._demoQS()} (public/js/app-view.js:1214)", "shortDescription": {"text": "Dangling fetch: GET /api/apps/${slug}/promoted${AppView._demoQS()} (public/js/app-view.js:1214)"}, "fullDescription": {"text": "`public/js/app-view.js:1214` calls `GET /api/apps/${slug}/promoted${AppView._demoQS()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/<p>/promoted/<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-0d3ad0103a316329", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/routes/feedback.js:129)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/routes/feedback.js:129)"}, "fullDescription": {"text": "`src/routes/feedback.js:129` 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-f76208c9d0f225d1", "name": "Dangling fetch: POST https://api.github.com/repos/${issueOwner}/${issueRepo}/issues (src/routes/feedback.js:187)", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${issueOwner}/${issueRepo}/issues (src/routes/feedback.js:187)"}, "fullDescription": {"text": "`src/routes/feedback.js:187` calls `POST https://api.github.com/repos/${issueOwner}/${issueRepo}/issues` 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.github.com/repos/<p>/<p>/issues`\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-869af9bd9f596534", "name": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)} (src/services/", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)} (src/services/github.js:771)"}, "fullDescription": {"text": "`src/services/github.js:771` calls `GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}` 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.github.com/repos/<p>/<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-f749ccc590450b30", "name": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n} (s", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n} (src/services/github.js:1015)"}, "fullDescription": {"text": "`src/services/github.js:1015` calls `GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n}` 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.github.com/repos/<p>/<p>/issues/<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-8ebe6a16052a2c64", "name": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n}/co", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n}/comments?per_page=${max} (src/services/github.js:1077)"}, "fullDescription": {"text": "`src/services/github.js:1077` calls `GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n}/comments?per_page=${max}` 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.github.com/repos/<p>/<p>/issues/<p>/comments`\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-798386868332afd1", "name": "Unused endpoint: USE /explorer-api", "shortDescription": {"text": "Unused endpoint: USE /explorer-api"}, "fullDescription": {"text": "`server.js` declares `USE /explorer-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-ee388d337f5ff472", "name": "Unused endpoint: ALL /__mock/*", "shortDescription": {"text": "Unused endpoint: ALL /__mock/*"}, "fullDescription": {"text": "`server.js` declares `ALL /__mock/*` 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-47578474b8c428de", "name": "Unused endpoint: GET /claude.md", "shortDescription": {"text": "Unused endpoint: GET /claude.md"}, "fullDescription": {"text": "`server.js` declares `GET /claude.md` 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-6e1a69df68b7f83b", "name": "Unused endpoint: GET /api/node-status", "shortDescription": {"text": "Unused endpoint: GET /api/node-status"}, "fullDescription": {"text": "`server.js` declares `GET /api/node-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-b8710bdbce482f76", "name": "Unused endpoint: GET /api/node-status/full", "shortDescription": {"text": "Unused endpoint: GET /api/node-status/full"}, "fullDescription": {"text": "`server.js` declares `GET /api/node-status/full` 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-92146e704da5c8c1", "name": "Unused endpoint: GET /node-status", "shortDescription": {"text": "Unused endpoint: GET /node-status"}, "fullDescription": {"text": "`server.js` declares `GET /node-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-1fdd3d0cba0c5b23", "name": "Unused endpoint: USE /usernode-bridge", "shortDescription": {"text": "Unused endpoint: USE /usernode-bridge"}, "fullDescription": {"text": "`server.js` declares `USE /usernode-bridge` 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-953ec1a0ee6df50d", "name": "Unused endpoint: GET /admin", "shortDescription": {"text": "Unused endpoint: GET /admin"}, "fullDescription": {"text": "`server.js` declares `GET /admin` 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-d504b80adc9409ec", "name": "Unused endpoint: GET /dashboard", "shortDescription": {"text": "Unused endpoint: GET /dashboard"}, "fullDescription": {"text": "`server.js` declares `GET /dashboard` 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-d93a530ce10d47d9", "name": "Unused endpoint: USE /api/admin", "shortDescription": {"text": "Unused endpoint: USE /api/admin"}, "fullDescription": {"text": "`src/routes/admin.js` declares `USE /api/admin` 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-e150ecfd4e11c48c", "name": "Unused endpoint: GET /api/admin/overview", "shortDescription": {"text": "Unused endpoint: GET /api/admin/overview"}, "fullDescription": {"text": "`src/routes/admin.js` declares `GET /api/admin/overview` 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-b4d87f54d62a1386", "name": "Unused endpoint: GET /api/admin/users", "shortDescription": {"text": "Unused endpoint: GET /api/admin/users"}, "fullDescription": {"text": "`src/routes/admin.js` declares `GET /api/admin/users` 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-980515b6b536dd6b", "name": "Unused endpoint: PUT /api/admin/users/app-quota", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/users/app-quota"}, "fullDescription": {"text": "`src/routes/admin.js` declares `PUT /api/admin/users/app-quota` 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-68e740e7198463d1", "name": "Unused endpoint: PUT /api/admin/users/:id/app-quota", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/users/:id/app-quota"}, "fullDescription": {"text": "`src/routes/admin.js` declares `PUT /api/admin/users/:id/app-quota` 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-ea1f984cc2c390e9", "name": "Unused endpoint: POST /api/admin/users/:id/is-admin", "shortDescription": {"text": "Unused endpoint: POST /api/admin/users/:id/is-admin"}, "fullDescription": {"text": "`src/routes/admin.js` declares `POST /api/admin/users/:id/is-admin` 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-58f93b3558b9308f", "name": "Unused endpoint: DELETE /api/admin/users/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/admin/users/:id"}, "fullDescription": {"text": "`src/routes/admin.js` declares `DELETE /api/admin/users/: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-24537ecee3e26a55", "name": "Unused endpoint: POST /api/admin/users/:id/reset-password", "shortDescription": {"text": "Unused endpoint: POST /api/admin/users/:id/reset-password"}, "fullDescription": {"text": "`src/routes/admin.js` declares `POST /api/admin/users/:id/reset-password` 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-175f8545807f0d44", "name": "Unused endpoint: GET /api/admin/codes", "shortDescription": {"text": "Unused endpoint: GET /api/admin/codes"}, "fullDescription": {"text": "`src/routes/admin.js` declares `GET /api/admin/codes` 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-7b2f65b8060ee259", "name": "Unused endpoint: POST /api/admin/codes", "shortDescription": {"text": "Unused endpoint: POST /api/admin/codes"}, "fullDescription": {"text": "`src/routes/admin.js` declares `POST /api/admin/codes` 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-68074cbbec858763", "name": "Unused endpoint: DELETE /api/admin/codes/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/admin/codes/:id"}, "fullDescription": {"text": "`src/routes/admin.js` declares `DELETE /api/admin/codes/: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-9af9caaac1d5636f", "name": "Unused endpoint: GET /api/admin/limits", "shortDescription": {"text": "Unused endpoint: GET /api/admin/limits"}, "fullDescription": {"text": "`src/routes/admin.js` declares `GET /api/admin/limits` 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-2f9a37c3e80d727c", "name": "Unused endpoint: PUT /api/admin/limits", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/limits"}, "fullDescription": {"text": "`src/routes/admin.js` declares `PUT /api/admin/limits` 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-ffada041456e07ca", "name": "Unused endpoint: PUT /api/admin/users/:id/daily-limit", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/users/:id/daily-limit"}, "fullDescription": {"text": "`src/routes/admin.js` declares `PUT /api/admin/users/:id/daily-limit` 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-dcc685f5c9c15a33", "name": "Unused endpoint: USE /api/issues/:id", "shortDescription": {"text": "Unused endpoint: USE /api/issues/:id"}, "fullDescription": {"text": "`src/routes/issues.js` declares `USE /api/issues/: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-09f6d012d933ac8b", "name": "Unused endpoint: USE /api/admin/analytics", "shortDescription": {"text": "Unused endpoint: USE /api/admin/analytics"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `USE /api/admin/analytics` 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-23a44cf9ac5390e5", "name": "Unused endpoint: GET /api/admin/analytics/overview", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/overview"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/overview` 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-90dada48e7b5f977", "name": "Unused endpoint: GET /api/admin/analytics/funnels", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/funnels"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/funnels` 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-270f5045a081c9f7", "name": "Unused endpoint: GET /api/admin/analytics/growth", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/growth"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/growth` 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-555caa89f0f46242", "name": "Unused endpoint: GET /api/admin/analytics/retention", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/retention"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/retention` 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-bfe7b0b81258652a", "name": "Unused endpoint: GET /api/admin/analytics/engagement", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/engagement"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/engagement` 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-2ef7729bcd3755d7", "name": "Unused endpoint: GET /api/admin/analytics/top-users", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/top-users"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/top-users` 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-6bf8a58699b00153", "name": "Unused endpoint: GET /api/admin/analytics/kudos", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/kudos"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/kudos` 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-3c8791239bb302f8", "name": "Unused endpoint: GET /api/admin/analytics/spend", "shortDescription": {"text": "Unused endpoint: GET /api/admin/analytics/spend"}, "fullDescription": {"text": "`src/routes/dashboard.js` declares `GET /api/admin/analytics/spend` 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-fd55aa0818a7c897", "name": "Unused endpoint: POST /api/auth/login", "shortDescription": {"text": "Unused endpoint: POST /api/auth/login"}, "fullDescription": {"text": "`src/routes/auth.js` declares `POST /api/auth/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-a5b3437e64c8f7b4", "name": "Unused endpoint: POST /api/auth/register", "shortDescription": {"text": "Unused endpoint: POST /api/auth/register"}, "fullDescription": {"text": "`src/routes/auth.js` declares `POST /api/auth/register` 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-2504eb0c23fcbe96", "name": "Unused endpoint: POST /api/auth/wallet-verify", "shortDescription": {"text": "Unused endpoint: POST /api/auth/wallet-verify"}, "fullDescription": {"text": "`src/routes/auth.js` declares `POST /api/auth/wallet-verify` 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-edb2c8f18dc50326", "name": "Unused endpoint: POST /api/auth/wallet-reset-verify", "shortDescription": {"text": "Unused endpoint: POST /api/auth/wallet-reset-verify"}, "fullDescription": {"text": "`src/routes/auth.js` declares `POST /api/auth/wallet-reset-verify` 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-1f83ad9aa462f39e", "name": "Unused endpoint: POST /api/auth/wallet-register", "shortDescription": {"text": "Unused endpoint: POST /api/auth/wallet-register"}, "fullDescription": {"text": "`src/routes/auth.js` declares `POST /api/auth/wallet-register` 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-033bb9071b399489", "name": "Unused endpoint: POST /api/auth/wallet-link-login", "shortDescription": {"text": "Unused endpoint: POST /api/auth/wallet-link-login"}, "fullDescription": {"text": "`src/routes/auth.js` declares `POST /api/auth/wallet-link-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-0ceaaf0332fbf608", "name": "Unused endpoint: GET /visuals/:id", "shortDescription": {"text": "Unused endpoint: GET /visuals/:id"}, "fullDescription": {"text": "`src/routes/visuals.js` declares `GET /visuals/: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-2513c72180e94472", "name": "Unused endpoint: USE /api/sessions/:id", "shortDescription": {"text": "Unused endpoint: USE /api/sessions/:id"}, "fullDescription": {"text": "`src/routes/kudos.js` declares `USE /api/sessions/: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-7fbd73cfb8c17744", "name": "Unused endpoint: GET /api/leaderboard/prs", "shortDescription": {"text": "Unused endpoint: GET /api/leaderboard/prs"}, "fullDescription": {"text": "`src/routes/kudos.js` declares `GET /api/leaderboard/prs` 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-c429b217236aaf66", "name": "Unused endpoint: GET /api/leaderboard/users", "shortDescription": {"text": "Unused endpoint: GET /api/leaderboard/users"}, "fullDescription": {"text": "`src/routes/kudos.js` declares `GET /api/leaderboard/users` 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-cd20d66a67189554", "name": "Unused endpoint: GET /api/leaderboard/users/:username/prs", "shortDescription": {"text": "Unused endpoint: GET /api/leaderboard/users/:username/prs"}, "fullDescription": {"text": "`src/routes/kudos.js` declares `GET /api/leaderboard/users/:username/prs` 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-c43da3570a5d3ae8", "name": "Unused endpoint: POST /api/sessions/:id/pause", "shortDescription": {"text": "Unused endpoint: POST /api/sessions/:id/pause"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `POST /api/sessions/:id/pause` 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-7c6e3b28f4d76758", "name": "Unused endpoint: GET /api/sessions/:id/events", "shortDescription": {"text": "Unused endpoint: GET /api/sessions/:id/events"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `GET /api/sessions/:id/events` 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-0c9e8d32cdf3e6fd", "name": "Unused endpoint: POST /api/sessions/:id/deploy-staging", "shortDescription": {"text": "Unused endpoint: POST /api/sessions/:id/deploy-staging"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `POST /api/sessions/:id/deploy-staging` 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-c1a19b3e4965f624", "name": "Unused endpoint: GET /api/github/repo-info", "shortDescription": {"text": "Unused endpoint: GET /api/github/repo-info"}, "fullDescription": {"text": "`src/routes/apps.js` declares `GET /api/github/repo-info` 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-93548ed9d7a94944", "name": "Unused endpoint: GET /__access/authorize", "shortDescription": {"text": "Unused endpoint: GET /__access/authorize"}, "fullDescription": {"text": "`src/routes/apps.js` declares `GET /__access/authorize` 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-0bcb4d91dbf885d4", "name": "Unused endpoint: GET /__caddy/access", "shortDescription": {"text": "Unused endpoint: GET /__caddy/access"}, "fullDescription": {"text": "`src/routes/internal.js` declares `GET /__caddy/access` 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/21978"}, "properties": {"repository": "Usernode-Labs/social-vibecoding", "repoUrl": "https://github.com/Usernode-Labs/social-vibecoding", "branch": "main"}, "results": [{"ruleId": "scanner-6531587de12c09c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/repair-spec-fences.js:65"}, "properties": {"repobilityId": "ecd79fe5c022cf58", "scanner": "scanner-primary", "fingerprint": "6531587de12c09c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d66a46fac0e6649c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/usernode-bridge.js:56"}, "properties": {"repobilityId": "735647187786bcea", "scanner": "scanner-primary", "fingerprint": "d66a46fac0e6649c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e35e5879096d37bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/usernode-bridge/v1/bridge.js:56"}, "properties": {"repobilityId": "2a7efec4f2293dd6", "scanner": "scanner-primary", "fingerprint": "e35e5879096d37bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4f429a17301e5f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/js/app.js:298"}, "properties": {"repobilityId": "5bf343aa4978169a", "scanner": "scanner-primary", "fingerprint": "d4f429a17301e5f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-766a93632dbd6005", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/config.js:168"}, "properties": {"repobilityId": "fdf53cbf2c2ec9b3", "scanner": "scanner-primary", "fingerprint": "766a93632dbd6005", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bddcc1d0c2654650", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/logger.js:70"}, "properties": {"repobilityId": "34712d32f7caa07e", "scanner": "scanner-primary", "fingerprint": "bddcc1d0c2654650", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a9ff00cd2b30819", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/template.js:288"}, "properties": {"repobilityId": "d079989eba38b8cc", "scanner": "scanner-primary", "fingerprint": "8a9ff00cd2b30819", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-835eae4c7f17a2f8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "e469cde27591e1b7", "scanner": "scanner-primary", "fingerprint": "835eae4c7f17a2f8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0f19991934542f5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "properties": {"repobilityId": "bd627895ec9668a4", "scanner": "scanner-primary", "fingerprint": "e0f19991934542f5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0dac9c5e2823491a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-bookworm-slim"}, "properties": {"repobilityId": "061b07a0510a9bce", "scanner": "scanner-primary", "fingerprint": "0dac9c5e2823491a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "capture/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-f1dc5ccc899d372d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server.js:104"}, "properties": {"repobilityId": "0d9bca6c0839725e", "scanner": "scanner-primary", "fingerprint": "f1dc5ccc899d372d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server.js"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-29fa6fbb655b080b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in capture/capture.js:50"}, "properties": {"repobilityId": "e57fbf05dfb81d7a", "scanner": "scanner-primary", "fingerprint": "29fa6fbb655b080b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "capture/capture.js"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-3fc9f6ef2fca3264", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/admin.html:172"}, "properties": {"repobilityId": "df5203f722eec321", "scanner": "scanner-primary", "fingerprint": "3fc9f6ef2fca3264", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/admin.html"}, "region": {"startLine": 172}}}]}, {"ruleId": "scanner-888d81028a2e1eb9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/node-status.html:229"}, "properties": {"repobilityId": "de5459b6baa41f48", "scanner": "scanner-primary", "fingerprint": "888d81028a2e1eb9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/node-status.html"}, "region": {"startLine": 229}}}]}, {"ruleId": "scanner-f81240273ffe5571", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/status.html:603"}, "properties": {"repobilityId": "e1a76b013d5d2db1", "scanner": "scanner-primary", "fingerprint": "f81240273ffe5571", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/status.html"}, "region": {"startLine": 603}}}]}, {"ruleId": "scanner-42fa3989092973c2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dev-chat.js:212"}, "properties": {"repobilityId": "3c7230d01174f2c3", "scanner": "scanner-primary", "fingerprint": "42fa3989092973c2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/dev-chat.js"}, "region": {"startLine": 212}}}]}, {"ruleId": "scanner-b6c81537023a0cb7", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in public/js/dev-chat.js:3253"}, "properties": {"repobilityId": "a692c08f49b55d16", "scanner": "scanner-primary", "fingerprint": "b6c81537023a0cb7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/dev-chat.js"}, "region": {"startLine": 3253}}}]}, {"ruleId": "scanner-e2cefc8b3f515b81", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/settings.js:604"}, "properties": {"repobilityId": "72bc3eda5ada2549", "scanner": "scanner-primary", "fingerprint": "e2cefc8b3f515b81", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/settings.js"}, "region": {"startLine": 604}}}]}, {"ruleId": "scanner-e89d82ca7ff177ff", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/home.js:50"}, "properties": {"repobilityId": "7e358f386a1c5802", "scanner": "scanner-primary", "fingerprint": "e89d82ca7ff177ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/home.js"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-2c6c418e81270fd4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/proposal-discuss.js:56"}, "properties": {"repobilityId": "11e24b867f083903", "scanner": "scanner-primary", "fingerprint": "2c6c418e81270fd4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/proposal-discuss.js"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-c795e45d136f5250", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dashboard.js:43"}, "properties": {"repobilityId": "c46f51b4266900ee", "scanner": "scanner-primary", "fingerprint": "c795e45d136f5250", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/dashboard.js"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-6636a822a85cd40a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dev-console.js:254"}, "properties": {"repobilityId": "4b787549bf6f6158", "scanner": "scanner-primary", "fingerprint": "6636a822a85cd40a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/dev-console.js"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-f94c61305274f087", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/notifications.js:500"}, "properties": {"repobilityId": "d90613a19c94894a", "scanner": "scanner-primary", "fingerprint": "f94c61305274f087", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/notifications.js"}, "region": {"startLine": 500}}}]}, {"ruleId": "scanner-76624b9279f62bc6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/confirm-modal.js:45"}, "properties": {"repobilityId": "08335e3a872afbc1", "scanner": "scanner-primary", "fingerprint": "76624b9279f62bc6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/confirm-modal.js"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-baaa18db1b2ff518", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app.js:152"}, "properties": {"repobilityId": "20ef8ff0d2135a46", "scanner": "scanner-primary", "fingerprint": "baaa18db1b2ff518", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/app.js"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-fedfb5952f309c3c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/kudos.js:148"}, "properties": {"repobilityId": "013b53cf0ec270f2", "scanner": "scanner-primary", "fingerprint": "fedfb5952f309c3c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/kudos.js"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-b2a6a2d36f2346b8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/leaderboard.js:234"}, "properties": {"repobilityId": "d77ca2b4fe5e1dbc", "scanner": "scanner-primary", "fingerprint": "b2a6a2d36f2346b8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/leaderboard.js"}, "region": {"startLine": 234}}}]}, {"ruleId": "scanner-0e71b2b0ae4833f4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app-secrets.js:83"}, "properties": {"repobilityId": "4aeca186c072a01a", "scanner": "scanner-primary", "fingerprint": "0e71b2b0ae4833f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/app-secrets.js"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-144d1d6196d37068", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/group-chat.js:522"}, "properties": {"repobilityId": "8b1557fb3d4dff69", "scanner": "scanner-primary", "fingerprint": "144d1d6196d37068", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/group-chat.js"}, "region": {"startLine": 522}}}]}, {"ruleId": "scanner-60cf217b26463796", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/group-chat.js:435"}, "properties": {"repobilityId": "12b75317a77d1bbf", "scanner": "scanner-primary", "fingerprint": "60cf217b26463796", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/group-chat.js"}, "region": {"startLine": 435}}}]}, {"ruleId": "scanner-2d8dfdf096e9ecb7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/app-view.js:188"}, "properties": {"repobilityId": "759701facb2f0d92", "scanner": "scanner-primary", "fingerprint": "2d8dfdf096e9ecb7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/app-view.js"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-07d6da990385f2af", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/app-view.js:3182"}, "properties": {"repobilityId": "3726ca5afeb1bc98", "scanner": "scanner-primary", "fingerprint": "07d6da990385f2af", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/app-view.js"}, "region": {"startLine": 3182}}}]}, {"ruleId": "scanner-36883f4731e74d2d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/services/worker.js:3"}, "properties": {"repobilityId": "f080b3f7b64bbf3e", "scanner": "scanner-primary", "fingerprint": "36883f4731e74d2d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/worker.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-3b98f9ef9469354a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/services/app-version.js:12"}, "properties": {"repobilityId": "09d5662596608917", "scanner": "scanner-primary", "fingerprint": "3b98f9ef9469354a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/app-version.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-0251d73aa34ec8b6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/services/db-manager.js:2"}, "properties": {"repobilityId": "c1f94509b06fa17d", "scanner": "scanner-primary", "fingerprint": "0251d73aa34ec8b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/db-manager.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-bbb31d5c0bfbf29b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/services/docker.js:1"}, "properties": {"repobilityId": "ed0b4cab6d92c99e", "scanner": "scanner-primary", "fingerprint": "bbb31d5c0bfbf29b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/docker.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-511b4f3716211818", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/services/status.js:2"}, "properties": {"repobilityId": "d2e872fe9dc01ad9", "scanner": "scanner-primary", "fingerprint": "511b4f3716211818", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/status.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1e168e1594cfcd53", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dc5bffe63e17003f", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1e168e1594cfcd53", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1e168e1594cfcd53", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 485}}}]}, {"ruleId": "scanner-231e484c7d9e3f90", "level": "note", "message": {"text": "Very large file: server.js (1844 lines)"}, "properties": {"repobilityId": "1479ba50e708c5c1", "scanner": "scanner-primary", "fingerprint": "231e484c7d9e3f90", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-afcba8df3ed11bb9", "level": "note", "message": {"text": "Very large file: public/usernode-bridge.js (3720 lines)"}, "properties": {"repobilityId": "a2baffebecf1afb4", "scanner": "scanner-primary", "fingerprint": "afcba8df3ed11bb9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-74d961280c7d09db", "level": "note", "message": {"text": "Very large file: public/usernode-bridge/v1/bridge.js (3720 lines)"}, "properties": {"repobilityId": "9763be27a233a6b0", "scanner": "scanner-primary", "fingerprint": "74d961280c7d09db", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a99cae05b5f784ea", "level": "note", "message": {"text": "Very large file: public/js/dev-chat.js (4179 lines)"}, "properties": {"repobilityId": "17c0a4f5057dd5e9", "scanner": "scanner-primary", "fingerprint": "a99cae05b5f784ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-06e1a51a6ff4f053", "level": "note", "message": {"text": "Very large file: public/js/home.js (1193 lines)"}, "properties": {"repobilityId": "897c382d3305528b", "scanner": "scanner-primary", "fingerprint": "06e1a51a6ff4f053", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-51dfb1300a0a95b9", "level": "note", "message": {"text": "Very large file: public/js/notifications.js (1112 lines)"}, "properties": {"repobilityId": "2afc8f22537d84ca", "scanner": "scanner-primary", "fingerprint": "51dfb1300a0a95b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-582d9483e1970443", "level": "note", "message": {"text": "Very large file: public/js/app.js (2255 lines)"}, "properties": {"repobilityId": "95bc23e2f7df6e1a", "scanner": "scanner-primary", "fingerprint": "582d9483e1970443", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-62e8a08186556d12", "level": "note", "message": {"text": "Very large file: public/js/group-chat.js (2459 lines)"}, "properties": {"repobilityId": "9565c338d43fbf74", "scanner": "scanner-primary", "fingerprint": "62e8a08186556d12", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a7a324db974fea9b", "level": "note", "message": {"text": "Very large file: public/js/app-view.js (4079 lines)"}, "properties": {"repobilityId": "fd1fb98bc6e30ad9", "scanner": "scanner-primary", "fingerprint": "a7a324db974fea9b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-864f9a7f29634cb8", "level": "note", "message": {"text": "Very large file: src/routes/issues.js (1223 lines)"}, "properties": {"repobilityId": "2b81aec24dd7595f", "scanner": "scanner-primary", "fingerprint": "864f9a7f29634cb8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9c2fc9e1daf3d5ed", "level": "note", "message": {"text": "Very large file: src/routes/sessions.js (5282 lines)"}, "properties": {"repobilityId": "bef9ac9a9012217e", "scanner": "scanner-primary", "fingerprint": "9c2fc9e1daf3d5ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2264d8ce97d1dae8", "level": "note", "message": {"text": "Very large file: src/routes/apps.js (1277 lines)"}, "properties": {"repobilityId": "9ab124cf8987f420", "scanner": "scanner-primary", "fingerprint": "2264d8ce97d1dae8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-91f7c1c5260baeb6", "level": "note", "message": {"text": "Very large file: src/routes/votes.js (1848 lines)"}, "properties": {"repobilityId": "997230b0cb23c76c", "scanner": "scanner-primary", "fingerprint": "91f7c1c5260baeb6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c205dbf81e4488c5", "level": "note", "message": {"text": "Very large file: src/services/worker.js (1500 lines)"}, "properties": {"repobilityId": "22c41ecffaedacbb", "scanner": "scanner-primary", "fingerprint": "c205dbf81e4488c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-55ea5452186c1403", "level": "note", "message": {"text": "Very large file: src/services/github.js (1222 lines)"}, "properties": {"repobilityId": "5bcea65c0e01db78", "scanner": "scanner-primary", "fingerprint": "55ea5452186c1403", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-96c6c4427689bca9", "level": "note", "message": {"text": "Very large file: src/db/migrate.js (3051 lines)"}, "properties": {"repobilityId": "0c84f03e98edf0cc", "scanner": "scanner-primary", "fingerprint": "96c6c4427689bca9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "84eef83308d6d83e", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "3bdfccfd47b2919a", "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": "4713e00f5f2487cc", "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": "757571a47a23c4f7", "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": "448c8bf5e74171c6", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "94f16c6d2d108b9b", "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": "cdce903ee13b0f1d", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-c41858a91a877247", "level": "none", "message": {"text": "Commented-code block (13 lines) in server.js:53"}, "properties": {"repobilityId": "e8ae1ffc7837ade5", "scanner": "scanner-primary", "fingerprint": "c41858a91a877247", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7f61f9c3031cbf0", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/github-issues-route.test.js:3"}, "properties": {"repobilityId": "258cb349e87033cf", "scanner": "scanner-primary", "fingerprint": "e7f61f9c3031cbf0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d5dea35aa13282b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/votes-merged-chat-count.test.js:1"}, "properties": {"repobilityId": "80f1fcdd0522a713", "scanner": "scanner-primary", "fingerprint": "8d5dea35aa13282b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccc0d578e152c87b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/leaderboard-user-prs.test.js:3"}, "properties": {"repobilityId": "67052411cca95036", "scanner": "scanner-primary", "fingerprint": "ccc0d578e152c87b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bce538bb2779302", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/spec-wrapper.test.js:1"}, "properties": {"repobilityId": "c3a7f9ca17870f8e", "scanner": "scanner-primary", "fingerprint": "0bce538bb2779302", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b2471fcc2085452", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/anthropic-stream.test.js:1"}, "properties": {"repobilityId": "a6ee2ecd0582072a", "scanner": "scanner-primary", "fingerprint": "1b2471fcc2085452", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03d587891a3491bd", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/recovered-turn-push-heal.test.js:3"}, "properties": {"repobilityId": "4e9685871e221298", "scanner": "scanner-primary", "fingerprint": "03d587891a3491bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86fe548e10c2121b", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/limits-resolve-billing-path.test.js:5"}, "properties": {"repobilityId": "65354201d88595dd", "scanner": "scanner-primary", "fingerprint": "86fe548e10c2121b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff690d751726b5f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/edge-gate.test.js:1"}, "properties": {"repobilityId": "1d11ab3f0962ae22", "scanner": "scanner-primary", "fingerprint": "ff690d751726b5f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81b5778fb4b5517a", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/history.test.js:5"}, "properties": {"repobilityId": "5ae5bdfb163db933", "scanner": "scanner-primary", "fingerprint": "81b5778fb4b5517a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77a0294274bef58b", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/issue-creator.test.js:3"}, "properties": {"repobilityId": "eb871a1f258cae63", "scanner": "scanner-primary", "fingerprint": "77a0294274bef58b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93da0b1a7858ce6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/app-llm-grants.test.js:1"}, "properties": {"repobilityId": "676aea5288f352d4", "scanner": "scanner-primary", "fingerprint": "93da0b1a7858ce6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b069c9c0f79c88f6", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/me-active-sessions.test.js:1"}, "properties": {"repobilityId": "b4afda7dbdb048a1", "scanner": "scanner-primary", "fingerprint": "b069c9c0f79c88f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05a7e48cac9c0729", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/issue-proposal-icon.test.js:1"}, "properties": {"repobilityId": "081aba4c529d790a", "scanner": "scanner-primary", "fingerprint": "05a7e48cac9c0729", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1165ab8cc827314", "level": "none", "message": {"text": "Commented-code block (15 lines) in tests/members-modal-gesture.test.js:5"}, "properties": {"repobilityId": "35f87b84ef0ac4a3", "scanner": "scanner-primary", "fingerprint": "f1165ab8cc827314", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9104671b9b1d85e", "level": "none", "message": {"text": "Commented-code block (12 lines) in tests/issue-close-watcher.test.js:6"}, "properties": {"repobilityId": "4aa67d0ba47e2318", "scanner": "scanner-primary", "fingerprint": "d9104671b9b1d85e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e908423765bfb46e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/worker-watchdog.test.js:1"}, "properties": {"repobilityId": "427b959cc8a39305", "scanner": "scanner-primary", "fingerprint": "e908423765bfb46e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52e5f771d2ffd37f", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/static-cache.test.js:3"}, "properties": {"repobilityId": "5a64a4a1557cdff2", "scanner": "scanner-primary", "fingerprint": "52e5f771d2ffd37f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b43227a4792c659a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/password-reset.test.js:1"}, "properties": {"repobilityId": "a029f2bcbf561961", "scanner": "scanner-primary", "fingerprint": "b43227a4792c659a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05cbd4f540445ba9", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/caddy-ask.test.js:3"}, "properties": {"repobilityId": "fedf9a2686986f3f", "scanner": "scanner-primary", "fingerprint": "05cbd4f540445ba9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80f2cf3dd2388f78", "level": "none", "message": {"text": "Commented-code block (14 lines) in tests/headless-staging.test.js:4"}, "properties": {"repobilityId": "19e23f496fcee5b2", "scanner": "scanner-primary", "fingerprint": "80f2cf3dd2388f78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a47c40c91b1929b2", "level": "none", "message": {"text": "Commented-code block (12 lines) in tests/headless-clarify.test.js:4"}, "properties": {"repobilityId": "8542dd0b5d2aaab7", "scanner": "scanner-primary", "fingerprint": "a47c40c91b1929b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fdd8cf20a809ab82", "level": "none", "message": {"text": "Commented-code block (10 lines) in tests/devchat-alerts.test.js:3"}, "properties": {"repobilityId": "628c1c99d743f517", "scanner": "scanner-primary", "fingerprint": "fdd8cf20a809ab82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d23845bb24ae19a1", "level": "none", "message": {"text": "Commented-code block (13 lines) in tests/kudos.test.js:3"}, "properties": {"repobilityId": "7f2d87d50c784ce9", "scanner": "scanner-primary", "fingerprint": "d23845bb24ae19a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3892149e82bf649d", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/openSession-streaming-reset.test.js:6"}, "properties": {"repobilityId": "099ace4ea39fef1c", "scanner": "scanner-primary", "fingerprint": "3892149e82bf649d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b74b9aa1a1d9e88b", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/issue-github-twin.test.js:8"}, "properties": {"repobilityId": "2edc671c095ba7dc", "scanner": "scanner-primary", "fingerprint": "b74b9aa1a1d9e88b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44c18eeccfab3dca", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/session-done-notifications.test.js:3"}, "properties": {"repobilityId": "e6b73615848dec84", "scanner": "scanner-primary", "fingerprint": "44c18eeccfab3dca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb350873a6d6252f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/session-lifecycle.test.js:361"}, "properties": {"repobilityId": "98577056240591da", "scanner": "scanner-primary", "fingerprint": "fb350873a6d6252f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76bb5950ab5a1a46", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/app-llm-proxy-auth.test.js:1"}, "properties": {"repobilityId": "a791c8b18ee17316", "scanner": "scanner-primary", "fingerprint": "76bb5950ab5a1a46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bb6becb46d6036f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/conflict-resolver.test.js:3"}, "properties": {"repobilityId": "585f3b0a62db1c38", "scanner": "scanner-primary", "fingerprint": "6bb6becb46d6036f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c88a7c257df833ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/app-llm-billing.test.js:1"}, "properties": {"repobilityId": "b39503defcbb4690", "scanner": "scanner-primary", "fingerprint": "c88a7c257df833ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19ad3f5a8be0f8f8", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/web-fetch.test.js:1"}, "properties": {"repobilityId": "7c1ab9cafcbd1779", "scanner": "scanner-primary", "fingerprint": "19ad3f5a8be0f8f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d6762c87d97f460", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/home-app-activity-counts.test.js:1"}, "properties": {"repobilityId": "7ea19eb89917571e", "scanner": "scanner-primary", "fingerprint": "3d6762c87d97f460", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbbbbb941435035f", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/favorites-order.test.js:3"}, "properties": {"repobilityId": "2de972a5198fab55", "scanner": "scanner-primary", "fingerprint": "fbbbbb941435035f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e23dddb929a1d39f", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/archive-proposal-card.test.js:1"}, "properties": {"repobilityId": "57384002d3fe97bf", "scanner": "scanner-primary", "fingerprint": "e23dddb929a1d39f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba91ec049fd9babc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/dev-feed-scroll-memory.test.js:6"}, "properties": {"repobilityId": "50d0946e83e769dd", "scanner": "scanner-primary", "fingerprint": "ba91ec049fd9babc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9561e61e1305df2b", "level": "none", "message": {"text": "Commented-code block (12 lines) in tests/ws-upgrade-redispatch.test.js:4"}, "properties": {"repobilityId": "e627f38a2a6277bf", "scanner": "scanner-primary", "fingerprint": "9561e61e1305df2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ed3a375e106f2b7", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/docker.test.js:3"}, "properties": {"repobilityId": "5c101ffcdded0a59", "scanner": "scanner-primary", "fingerprint": "6ed3a375e106f2b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9afa68d1542d79ec", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/limits-record-spend.test.js:4"}, "properties": {"repobilityId": "03a0375f618af3d6", "scanner": "scanner-primary", "fingerprint": "9afa68d1542d79ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79962861d9bdbe4c", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/archive-session-list.test.js:1"}, "properties": {"repobilityId": "fbb6c09be816805d", "scanner": "scanner-primary", "fingerprint": "79962861d9bdbe4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f510abc3b780ba6", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/spec-viewer-session-reset.test.js:5"}, "properties": {"repobilityId": "3534c77091086a4c", "scanner": "scanner-primary", "fingerprint": "0f510abc3b780ba6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7a84aec6b5600c2", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/clone-headless-suggestions.test.js:1"}, "properties": {"repobilityId": "dff46337145030a1", "scanner": "scanner-primary", "fingerprint": "b7a84aec6b5600c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f266d336777cbbd", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/issue-generate-proposal-dedup.test.js:1"}, "properties": {"repobilityId": "93f5a1bc0f4c270f", "scanner": "scanner-primary", "fingerprint": "2f266d336777cbbd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24e8e6fdc6489821", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/qa-suggestions.test.js:1"}, "properties": {"repobilityId": "dbfa1750b59be7b1", "scanner": "scanner-primary", "fingerprint": "24e8e6fdc6489821", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3efc189b39b609a0", "level": "none", "message": {"text": "Commented-code block (12 lines) in tests/sync-progress.test.js:3"}, "properties": {"repobilityId": "617f4d0eaca0efb6", "scanner": "scanner-primary", "fingerprint": "3efc189b39b609a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e671e5c72795acda", "level": "note", "message": {"text": "Legacy-named symbol `nOld` in tests/pr-metadata.test.js:350"}, "properties": {"repobilityId": "a155f6851426d46a", "scanner": "scanner-primary", "fingerprint": "e671e5c72795acda", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5691af5107bc6ec9", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/pr-metadata.test.js:5"}, "properties": {"repobilityId": "db56b56795b42445", "scanner": "scanner-primary", "fingerprint": "5691af5107bc6ec9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70b742ec0a1b774d", "level": "none", "message": {"text": "Commented-code block (10 lines) in tests/ai-progress-estimate.test.js:3"}, "properties": {"repobilityId": "2c26c9995098bf86", "scanner": "scanner-primary", "fingerprint": "70b742ec0a1b774d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30d5dddb42b121d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/app-conventions.test.js:1"}, "properties": {"repobilityId": "85b365e3c774f61b", "scanner": "scanner-primary", "fingerprint": "30d5dddb42b121d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d92178e5823f6111", "level": "none", "message": {"text": "Commented-code block (13 lines) in tests/spec-markdown.test.js:3"}, "properties": {"repobilityId": "00de57a1b3deab2c", "scanner": "scanner-primary", "fingerprint": "d92178e5823f6111", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d250699c0d3b216", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/usernode-bridge.test.js:29"}, "properties": {"repobilityId": "04179115a3c6a3f1", "scanner": "scanner-primary", "fingerprint": "3d250699c0d3b216", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-672121ba5cdd1747", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/github-issues-cache.test.js:1"}, "properties": {"repobilityId": "7cd438f1ed78414d", "scanner": "scanner-primary", "fingerprint": "672121ba5cdd1747", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31b6826c0bcfbf6e", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/notifications-show-more.test.js:4"}, "properties": {"repobilityId": "593059c0e6814a7b", "scanner": "scanner-primary", "fingerprint": "31b6826c0bcfbf6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55fd658a8bda643f", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/merged-discussion.test.js:1"}, "properties": {"repobilityId": "11381390047dafb2", "scanner": "scanner-primary", "fingerprint": "55fd658a8bda643f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-893c96c4d2491e9a", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/votes-merge-deploy-failed.test.js:1"}, "properties": {"repobilityId": "be56a935a5d0a353", "scanner": "scanner-primary", "fingerprint": "893c96c4d2491e9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a22db3840e4743d", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/session-title.test.js:3"}, "properties": {"repobilityId": "c7a5e61612a1d6b7", "scanner": "scanner-primary", "fingerprint": "6a22db3840e4743d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac360cac43cdff36", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/spec-user-share.test.js:3"}, "properties": {"repobilityId": "87aa21f740c3d8e7", "scanner": "scanner-primary", "fingerprint": "ac360cac43cdff36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1c699350d92eb9d", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/votes-merge-failed-broadcast.test.js:1"}, "properties": {"repobilityId": "f675912c5ea1fc46", "scanner": "scanner-primary", "fingerprint": "b1c699350d92eb9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcc1edfdc0599664", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/recovery-headless-guard.test.js:4"}, "properties": {"repobilityId": "40554ea1f7b4eb50", "scanner": "scanner-primary", "fingerprint": "dcc1edfdc0599664", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d34eae8f22c3d306", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/recover-stuck-merges.test.js:1"}, "properties": {"repobilityId": "071122fd05d71ce0", "scanner": "scanner-primary", "fingerprint": "d34eae8f22c3d306", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d294b7ccb090abf7", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/withdraw-gov-proposal.test.js:4"}, "properties": {"repobilityId": "b4822365830b16da", "scanner": "scanner-primary", "fingerprint": "d294b7ccb090abf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b1c28d9b3de8dcc", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/view-only-admin.test.js:3"}, "properties": {"repobilityId": "b437c7ba49e0dd00", "scanner": "scanner-primary", "fingerprint": "0b1c28d9b3de8dcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb0b1c12fb93e6e0", "level": "none", "message": {"text": "Commented-code block (14 lines) in tests/recovered-turn-spend.test.js:5"}, "properties": {"repobilityId": "2a420512197ba12f", "scanner": "scanner-primary", "fingerprint": "bb0b1c12fb93e6e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-770943bc5291e715", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/thread-activity.test.js:3"}, "properties": {"repobilityId": "63410348154fe2b1", "scanner": "scanner-primary", "fingerprint": "770943bc5291e715", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6281559db2e0ae22", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/create-session-issue-link.test.js:1"}, "properties": {"repobilityId": "267272afb46187b4", "scanner": "scanner-primary", "fingerprint": "6281559db2e0ae22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a945a6d35ed8701", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/app-manifest-visibility.test.js:1"}, "properties": {"repobilityId": "b735304a805e8d7b", "scanner": "scanner-primary", "fingerprint": "4a945a6d35ed8701", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e044158f156efee8", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/quick-replies.test.js:1"}, "properties": {"repobilityId": "ddd6652a043dc2c4", "scanner": "scanner-primary", "fingerprint": "e044158f156efee8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d95f8292160c430", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/sync-activity-render.test.js:4"}, "properties": {"repobilityId": "986422af33b5fa0c", "scanner": "scanner-primary", "fingerprint": "5d95f8292160c430", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef404ad8b08c165e", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/ws-validate-thread-merged.test.js:1"}, "properties": {"repobilityId": "774215948176f0fa", "scanner": "scanner-primary", "fingerprint": "ef404ad8b08c165e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f04207cad82a98fb", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/streaming-markdown.test.js:4"}, "properties": {"repobilityId": "42a8831d7be785ee", "scanner": "scanner-primary", "fingerprint": "f04207cad82a98fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdc6441cb5aa7a7b", "level": "none", "message": {"text": "Commented-code block (6 lines) in capture/capture.js:5"}, "properties": {"repobilityId": "ffd5107c9ba7e92e", "scanner": "scanner-primary", "fingerprint": "bdc6441cb5aa7a7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b0b9942b4f1435a", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/usernode-bridge.js:29"}, "properties": {"repobilityId": "80e30877975b0af4", "scanner": "scanner-primary", "fingerprint": "3b0b9942b4f1435a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ceb9a05cb2bdbce9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/usernode-bridge.js:499"}, "properties": {"repobilityId": "87b59cc9db494352", "scanner": "scanner-primary", "fingerprint": "ceb9a05cb2bdbce9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb76e431efe19a32", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/usernode-bridge/v1/bridge.js:29"}, "properties": {"repobilityId": "4581fd2a9816598e", "scanner": "scanner-primary", "fingerprint": "fb76e431efe19a32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ec6edf877b3d653", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/usernode-bridge/v1/bridge.js:499"}, "properties": {"repobilityId": "78ccdd7f497de8f2", "scanner": "scanner-primary", "fingerprint": "0ec6edf877b3d653", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d7ef409eea0172f", "level": "none", "message": {"text": "Commented-code block (13 lines) in public/js/dev-chat.js:32"}, "properties": {"repobilityId": "f917545745ca6616", "scanner": "scanner-primary", "fingerprint": "4d7ef409eea0172f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-865b1ec111fbd2e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/dev-chat.js:3045"}, "properties": {"repobilityId": "41461f67780f8e03", "scanner": "scanner-primary", "fingerprint": "865b1ec111fbd2e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e4f604936be240ca", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/settings.js:3"}, "properties": {"repobilityId": "daf7c7a621462f13", "scanner": "scanner-primary", "fingerprint": "e4f604936be240ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fa779186a4ba98c", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/spec-sections.js:1"}, "properties": {"repobilityId": "8642aa5d5a1f8645", "scanner": "scanner-primary", "fingerprint": "5fa779186a4ba98c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-664c2db2e0c267ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/home.js:7"}, "properties": {"repobilityId": "453bcbda99920fbb", "scanner": "scanner-primary", "fingerprint": "664c2db2e0c267ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ca394546a592461", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/home.js:151"}, "properties": {"repobilityId": "dfec828c27753175", "scanner": "scanner-primary", "fingerprint": "1ca394546a592461", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-adfc77ab6f612c4c", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/js/proposal-discuss.js:3"}, "properties": {"repobilityId": "18abd928deb07136", "scanner": "scanner-primary", "fingerprint": "adfc77ab6f612c4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-662416893a91d512", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/dev-host.js:1"}, "properties": {"repobilityId": "6b720de0b62d1f0b", "scanner": "scanner-primary", "fingerprint": "662416893a91d512", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cf6a4a2a15efe10", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/header-layout.js:4"}, "properties": {"repobilityId": "fdb751219449f763", "scanner": "scanner-primary", "fingerprint": "3cf6a4a2a15efe10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e92af46b0fbdf9d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/dashboard.js:69"}, "properties": {"repobilityId": "358811d299b39e7a", "scanner": "scanner-primary", "fingerprint": "e92af46b0fbdf9d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43e8180ebbd53998", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/dev-console.js:165"}, "properties": {"repobilityId": "3c6c7a34b9fd2414", "scanner": "scanner-primary", "fingerprint": "43e8180ebbd53998", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf14336e2333c169", "level": "note", "message": {"text": "Legacy-named symbol `notif_expanded_groups_v1` in public/js/notifications.js:21"}, "properties": {"repobilityId": "4e93ccc429b5d155", "scanner": "scanner-primary", "fingerprint": "cf14336e2333c169", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cc6b03b4dcd171cb", "level": "none", "message": {"text": "Commented-code block (9 lines) in public/js/notifications.js:3"}, "properties": {"repobilityId": "67a892df929ef18d", "scanner": "scanner-primary", "fingerprint": "cc6b03b4dcd171cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36352bb823143238", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/notifications.js:5"}, "properties": {"repobilityId": "be8d7f10df6a65ab", "scanner": "scanner-primary", "fingerprint": "36352bb823143238", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-acbb1f3db5250c84", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/js/cc-progress-summary.js:7"}, "properties": {"repobilityId": "e9e65c0d16b5e6dc", "scanner": "scanner-primary", "fingerprint": "acbb1f3db5250c84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2901a55031c4bf39", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/js/confirm-modal.js:8"}, "properties": {"repobilityId": "6c6c82f0a70b7797", "scanner": "scanner-primary", "fingerprint": "2901a55031c4bf39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f74015aef501f888", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/app.js:14"}, "properties": {"repobilityId": "d184524cc096e3a9", "scanner": "scanner-primary", "fingerprint": "f74015aef501f888", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e4156134fd16cfa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/app.js:226"}, "properties": {"repobilityId": "d3e12ff5c8183b8a", "scanner": "scanner-primary", "fingerprint": "3e4156134fd16cfa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d05bb04a5b547fb", "level": "none", "message": {"text": "Commented-code block (9 lines) in public/js/kudos.js:3"}, "properties": {"repobilityId": "c38f20fa6999809e", "scanner": "scanner-primary", "fingerprint": "2d05bb04a5b547fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9095bb71c51d772", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/dev-alerts.js:14"}, "properties": {"repobilityId": "fabeb65d35026d3b", "scanner": "scanner-primary", "fingerprint": "e9095bb71c51d772", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05e1515df6c26993", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/leaderboard.js:3"}, "properties": {"repobilityId": "5b61139cf0403484", "scanner": "scanner-primary", "fingerprint": "05e1515df6c26993", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8790faa0b3f9f006", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/leaderboard.js:172"}, "properties": {"repobilityId": "3ec2e6e7ef423e7e", "scanner": "scanner-primary", "fingerprint": "8790faa0b3f9f006", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bdf275641f25e471", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/theme.js:1"}, "properties": {"repobilityId": "f730034807f36747", "scanner": "scanner-primary", "fingerprint": "bdf275641f25e471", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce50f4f0e696ff34", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/js/app-secrets.js:7"}, "properties": {"repobilityId": "b2e85fded0f58940", "scanner": "scanner-primary", "fingerprint": "ce50f4f0e696ff34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6ea1b69cf867f5d", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/group-chat.js:9"}, "properties": {"repobilityId": "a969755522a4e525", "scanner": "scanner-primary", "fingerprint": "c6ea1b69cf867f5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe6f07533b82b6fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/group-chat.js:360"}, "properties": {"repobilityId": "3a136bbb537eb2a5", "scanner": "scanner-primary", "fingerprint": "fe6f07533b82b6fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-387c746dcce8b879", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/streaming-markdown.js:13"}, "properties": {"repobilityId": "48ce1fbb701a14ed", "scanner": "scanner-primary", "fingerprint": "387c746dcce8b879", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7827b4ed0b0a9be", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/js/app-view.js:16"}, "properties": {"repobilityId": "20f04b5036625aac", "scanner": "scanner-primary", "fingerprint": "f7827b4ed0b0a9be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7ea0efb3c01cd85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/app-view.js:129"}, "properties": {"repobilityId": "0107da51cdbf9e0f", "scanner": "scanner-primary", "fingerprint": "d7ea0efb3c01cd85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd8b6fd0bfcbc161", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/config.js:9"}, "properties": {"repobilityId": "8ff871a3a8023763", "scanner": "scanner-primary", "fingerprint": "fd8b6fd0bfcbc161", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db88307f989b9bf6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/middleware/admin.js:11"}, "properties": {"repobilityId": "ec1e4f34dd8f6ed4", "scanner": "scanner-primary", "fingerprint": "db88307f989b9bf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-590e208749b935a4", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/middleware/auth.js:29"}, "properties": {"repobilityId": "57bea76948bf54d9", "scanner": "scanner-primary", "fingerprint": "590e208749b935a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b86f53c76effd18e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/middleware/rate-limits.js:43"}, "properties": {"repobilityId": "397fc39f551bbffa", "scanner": "scanner-primary", "fingerprint": "b86f53c76effd18e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cad484f841b677e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/middleware/anthropic-proxy-auth.js:9"}, "properties": {"repobilityId": "8ad4f48d02a03b74", "scanner": "scanner-primary", "fingerprint": "4cad484f841b677e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93230418277d7744", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/middleware/app-llm-auth.js:15"}, "properties": {"repobilityId": "4e0cf2ead09fc697", "scanner": "scanner-primary", "fingerprint": "93230418277d7744", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e970d2fac526fa86", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/middleware/internal-auth.js:6"}, "properties": {"repobilityId": "8692dd5e03a78ce2", "scanner": "scanner-primary", "fingerprint": "e970d2fac526fa86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f1c5ddc032cf49e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/routes/collaborators.js:4"}, "properties": {"repobilityId": "75b4c8a10853699a", "scanner": "scanner-primary", "fingerprint": "9f1c5ddc032cf49e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14a4cbacc908f832", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/routes/app-llm-proxy.js:14"}, "properties": {"repobilityId": "66e2b5acfd9342eb", "scanner": "scanner-primary", "fingerprint": "14a4cbacc908f832", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2555f6125e884f78", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/routes/proposal-discuss.js:3"}, "properties": {"repobilityId": "34378bad5674b559", "scanner": "scanner-primary", "fingerprint": "2555f6125e884f78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b90470a7a72ab846", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/admin.js:9"}, "properties": {"repobilityId": "5132533691ef9d54", "scanner": "scanner-primary", "fingerprint": "b90470a7a72ab846", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c24bb870fc955821", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/issues.js:24"}, "properties": {"repobilityId": "2d3e687c287455f2", "scanner": "scanner-primary", "fingerprint": "c24bb870fc955821", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c63a33ab0117c8d", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/routes/feedback.js:25"}, "properties": {"repobilityId": "6d35d251d88f4073", "scanner": "scanner-primary", "fingerprint": "0c63a33ab0117c8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ea636ed9ee621db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/feedback.js:187"}, "properties": {"repobilityId": "efb2e373c5dbb6ce", "scanner": "scanner-primary", "fingerprint": "6ea636ed9ee621db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f280d1b598af8ff3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/anthropic-proxy.js:19"}, "properties": {"repobilityId": "93ae5df01f8c5a33", "scanner": "scanner-primary", "fingerprint": "f280d1b598af8ff3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-359ace46d046229d", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/routes/dashboard.js:11"}, "properties": {"repobilityId": "e5d6d9254d981f6b", "scanner": "scanner-primary", "fingerprint": "359ace46d046229d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75dd898cf8e9970b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/auth.js:15"}, "properties": {"repobilityId": "7b646d8b593fa82c", "scanner": "scanner-primary", "fingerprint": "75dd898cf8e9970b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4f3970b0f7fe65b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/routes/notifications.js:15"}, "properties": {"repobilityId": "bb12a0c02fe7c211", "scanner": "scanner-primary", "fingerprint": "b4f3970b0f7fe65b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f57e55bc22c2f158", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/routes/chat.js:23"}, "properties": {"repobilityId": "8380e82ad60e302c", "scanner": "scanner-primary", "fingerprint": "f57e55bc22c2f158", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b4dd9c76251414a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/routes/visuals.js:9"}, "properties": {"repobilityId": "0e6d5697d135d5b2", "scanner": "scanner-primary", "fingerprint": "8b4dd9c76251414a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bc4d58eb9f147d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/routes/kudos.js:53"}, "properties": {"repobilityId": "2af0cac27b0b6053", "scanner": "scanner-primary", "fingerprint": "0bc4d58eb9f147d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fda664a1c1c5e9ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/sessions.js:28"}, "properties": {"repobilityId": "ebaa2149316bccdc", "scanner": "scanner-primary", "fingerprint": "fda664a1c1c5e9ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dd3d49ef7702f52", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/sessions.js:1764"}, "properties": {"repobilityId": "e69ba2d36a6395e4", "scanner": "scanner-primary", "fingerprint": "6dd3d49ef7702f52", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f4fc689373afe33c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/apps.js:48"}, "properties": {"repobilityId": "72ddb8e4839ef062", "scanner": "scanner-primary", "fingerprint": "f4fc689373afe33c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e3b0bfd412dd9a8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/routes/internal.js:14"}, "properties": {"repobilityId": "3339cff6bd07ea28", "scanner": "scanner-primary", "fingerprint": "7e3b0bfd412dd9a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-063478dedaee6e9e", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/routes/votes.js:15"}, "properties": {"repobilityId": "8695a3180aa441ec", "scanner": "scanner-primary", "fingerprint": "063478dedaee6e9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe0ee7c7c4f143e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/llm-grants.js:9"}, "properties": {"repobilityId": "f103d05e842f28f7", "scanner": "scanner-primary", "fingerprint": "fe0ee7c7c4f143e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72d7c40a1c052271", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/staging.js:23"}, "properties": {"repobilityId": "13f72b103b537357", "scanner": "scanner-primary", "fingerprint": "72d7c40a1c052271", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-554c736fc58c5007", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/rename-pr.js:55"}, "properties": {"repobilityId": "0c46779ce400529d", "scanner": "scanner-primary", "fingerprint": "554c736fc58c5007", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1c13fb56bfb1b17", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/models.js:1"}, "properties": {"repobilityId": "67fa956fbea9d2bf", "scanner": "scanner-primary", "fingerprint": "a1c13fb56bfb1b17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8831541f1b8a993", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/admin-approval.js:1"}, "properties": {"repobilityId": "747d5266d6516a98", "scanner": "scanner-primary", "fingerprint": "b8831541f1b8a993", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ac4b8825e8cadc3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/worker.js:19"}, "properties": {"repobilityId": "f3dc680158a4df4b", "scanner": "scanner-primary", "fingerprint": "1ac4b8825e8cadc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d60cc5db6de8885", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/app-creator.js:17"}, "properties": {"repobilityId": "27c059f8930d686d", "scanner": "scanner-primary", "fingerprint": "1d60cc5db6de8885", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58ec549ad5928f3a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/web-fetch.js:3"}, "properties": {"repobilityId": "bd0b4de53eebd7d4", "scanner": "scanner-primary", "fingerprint": "58ec549ad5928f3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10bdfeb48043301a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/github.js:6"}, "properties": {"repobilityId": "d48959e60fcb3fc5", "scanner": "scanner-primary", "fingerprint": "10bdfeb48043301a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb37ecbb51359b07", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/github.js:37"}, "properties": {"repobilityId": "6feae95bc634a485", "scanner": "scanner-primary", "fingerprint": "eb37ecbb51359b07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7e1175d9bf07b56", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/main-drift-poller.js:54"}, "properties": {"repobilityId": "0df089a5b6ed3c9e", "scanner": "scanner-primary", "fingerprint": "c7e1175d9bf07b56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e6c8716fcd0eb04", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/services/ws.js:25"}, "properties": {"repobilityId": "c5c74915bd747734", "scanner": "scanner-primary", "fingerprint": "2e6c8716fcd0eb04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-330896a86f667dd6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/logger.js:5"}, "properties": {"repobilityId": "4c245ce048367121", "scanner": "scanner-primary", "fingerprint": "330896a86f667dd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d19ab094a06fb40", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/testing-notes.js:7"}, "properties": {"repobilityId": "45900b6a76141df3", "scanner": "scanner-primary", "fingerprint": "7d19ab094a06fb40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-554a3456ed38c4f9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/app-version.js:5"}, "properties": {"repobilityId": "1c5b9eeb151317ad", "scanner": "scanner-primary", "fingerprint": "554a3456ed38c4f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9725a3c41cded49c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/session-bus.js:5"}, "properties": {"repobilityId": "bd2badd63003e4c6", "scanner": "scanner-primary", "fingerprint": "9725a3c41cded49c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5df4babf607b79e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/limits.js:5"}, "properties": {"repobilityId": "400f3c708d410835", "scanner": "scanner-primary", "fingerprint": "5df4babf607b79e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0aa25666d89442ff", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/worker-progress.js:19"}, "properties": {"repobilityId": "f930196a622e2797", "scanner": "scanner-primary", "fingerprint": "0aa25666d89442ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13e676c27b862437", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/prompts.js:26"}, "properties": {"repobilityId": "ed83d9d8990b66de", "scanner": "scanner-primary", "fingerprint": "13e676c27b862437", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b235083a8df5329f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/events.js:3"}, "properties": {"repobilityId": "19c8e271f9430826", "scanner": "scanner-primary", "fingerprint": "b235083a8df5329f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5a7e83572d200e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/node-status.js:4"}, "properties": {"repobilityId": "cf46a8e7edf9631e", "scanner": "scanner-primary", "fingerprint": "e5a7e83572d200e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ff3ffb6c51c8398", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/db-manager.js:22"}, "properties": {"repobilityId": "952d7ff7e68d9849", "scanner": "scanner-primary", "fingerprint": "6ff3ffb6c51c8398", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cafb11d8acc5d919", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/conflict-resolver.js:7"}, "properties": {"repobilityId": "597cb5c4004fd67b", "scanner": "scanner-primary", "fingerprint": "cafb11d8acc5d919", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-349ee8aa138ee8d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/app-respawn.js:1"}, "properties": {"repobilityId": "bcfcbf8672620662", "scanner": "scanner-primary", "fingerprint": "349ee8aa138ee8d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97b7cc4d72a3a834", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/services/active-workers.js:5"}, "properties": {"repobilityId": "7f2e8b80471f09bb", "scanner": "scanner-primary", "fingerprint": "97b7cc4d72a3a834", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac2c5ccf6ca3a681", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/services/notifications.js:3"}, "properties": {"repobilityId": "dc0e6563062bb74d", "scanner": "scanner-primary", "fingerprint": "ac2c5ccf6ca3a681", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c28a1cf5812c577", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/services/app-manifest.js:92"}, "properties": {"repobilityId": "8b1f7ce36931c057", "scanner": "scanner-primary", "fingerprint": "9c28a1cf5812c577", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be7a5a2d6bace2b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/session-lifecycle.js:6"}, "properties": {"repobilityId": "ddbc9fd369e85975", "scanner": "scanner-primary", "fingerprint": "be7a5a2d6bace2b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84d3dd807aaba6fe", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/services/app-access.js:3"}, "properties": {"repobilityId": "844cceda5422a9e0", "scanner": "scanner-primary", "fingerprint": "84d3dd807aaba6fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4a35d4ce8ddfa7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/active-users.js:7"}, "properties": {"repobilityId": "db12790c748f0406", "scanner": "scanner-primary", "fingerprint": "d4a35d4ce8ddfa7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16f1bdf041e41338", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/services/visuals.js:5"}, "properties": {"repobilityId": "9c1f0e80593c2e1c", "scanner": "scanner-primary", "fingerprint": "16f1bdf041e41338", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5194ba4ee203cfd0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/services/caddy.js:3"}, "properties": {"repobilityId": "2335cc36f098bbce", "scanner": "scanner-primary", "fingerprint": "5194ba4ee203cfd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d53292294f03e543", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/app-llm-env.js:10"}, "properties": {"repobilityId": "56b0796f9c49c1c2", "scanner": "scanner-primary", "fingerprint": "d53292294f03e543", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7641a4da139ad10", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/llm.js:3"}, "properties": {"repobilityId": "9fe2de1409b124d5", "scanner": "scanner-primary", "fingerprint": "b7641a4da139ad10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7defde67b5fb8922", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/sync-main.js:5"}, "properties": {"repobilityId": "b06970452172a50e", "scanner": "scanner-primary", "fingerprint": "7defde67b5fb8922", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8af49174718714b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/pr-metadata.js:8"}, "properties": {"repobilityId": "612146aa6141dab5", "scanner": "scanner-primary", "fingerprint": "d8af49174718714b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3d17bdb5ebf8568", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/services/session-title.js:3"}, "properties": {"repobilityId": "c21ddd1c3c6d5882", "scanner": "scanner-primary", "fingerprint": "d3d17bdb5ebf8568", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a90ede4f98f1bf4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/app-deploy-status.js:36"}, "properties": {"repobilityId": "b6a39310ed478661", "scanner": "scanner-primary", "fingerprint": "a90ede4f98f1bf4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f439bdea2be3f68f", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/services/spec-format.js:4"}, "properties": {"repobilityId": "eec3ef8744db9431", "scanner": "scanner-primary", "fingerprint": "f439bdea2be3f68f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0749e5d2a263fda", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/static-cache.js:4"}, "properties": {"repobilityId": "7474e1900ddc35f9", "scanner": "scanner-primary", "fingerprint": "c0749e5d2a263fda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e0e28dd252a42c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/template.js:1"}, "properties": {"repobilityId": "e29a4f2e0458553a", "scanner": "scanner-primary", "fingerprint": "0e0e28dd252a42c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba873a1eacfb6679", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/template.js:326"}, "properties": {"repobilityId": "be21ebd924cbe671", "scanner": "scanner-primary", "fingerprint": "ba873a1eacfb6679", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-780f312be4bfb03b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/anthropic-stream.js:11"}, "properties": {"repobilityId": "3e6b0fc79288c54a", "scanner": "scanner-primary", "fingerprint": "780f312be4bfb03b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b664bb49ea8722af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/anthropic-stream.js:182"}, "properties": {"repobilityId": "f765260175c376fb", "scanner": "scanner-primary", "fingerprint": "b664bb49ea8722af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-431d24238ea5b70a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/services/issue-close-watcher.js:5"}, "properties": {"repobilityId": "64dd3036e61f2459", "scanner": "scanner-primary", "fingerprint": "431d24238ea5b70a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fee9ad517140b038", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/docker.js:47"}, "properties": {"repobilityId": "798ca6964ffa8d72", "scanner": "scanner-primary", "fingerprint": "fee9ad517140b038", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ceebed8ecfc27a57", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/status.js:156"}, "properties": {"repobilityId": "f1ca5e5676ba8e3a", "scanner": "scanner-primary", "fingerprint": "ceebed8ecfc27a57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edc0f564156f66db", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/db/migrate.js:61"}, "properties": {"repobilityId": "0b664fc8cab9288e", "scanner": "scanner-primary", "fingerprint": "edc0f564156f66db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dde7f7204bd985f6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/migrate.js:95"}, "properties": {"repobilityId": "371e681fcbe4d386", "scanner": "scanner-primary", "fingerprint": "dde7f7204bd985f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a68d84925e6b4d8", "level": "note", "message": {"text": "47 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "82fb9703fa20a5fa", "scanner": "scanner-primary", "fingerprint": "2a68d84925e6b4d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-87ba86bb604f1e97", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/me/active-sessions (tests/me-active-sessions.test.js:66)"}, "properties": {"repobilityId": "218646deb0f23e28", "scanner": "scanner-primary", "fingerprint": "87ba86bb604f1e97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecae7c12e224a6f6", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}${path} (tests/password-reset.test.js:92)"}, "properties": {"repobilityId": "3ddcff0f8fab2e48", "scanner": "scanner-primary", "fingerprint": "ecae7c12e224a6f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-64795bdbc50d05c6", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/admin/users/9/reset-password (tests/password-reset.test.js:420)"}, "properties": {"repobilityId": "16c35f23a9d05867", "scanner": "scanner-primary", "fingerprint": "64795bdbc50d05c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fa0621b2b1eb1ce", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/apps (tests/home-app-activity-counts.test.js:78)"}, "properties": {"repobilityId": "1d86bdc42ac6f59d", "scanner": "scanner-primary", "fingerprint": "3fa0621b2b1eb1ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12d87a714cc96656", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/1/clone-headless (tests/clone-headless-suggestions.test.js:115)"}, "properties": {"repobilityId": "2a815bab998a6195", "scanner": "scanner-primary", "fingerprint": "12d87a714cc96656", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8bdeac584db2e28", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/41/sync-main (tests/sync-progress.test.js:487)"}, "properties": {"repobilityId": "eb488751ee6ec042", "scanner": "scanner-primary", "fingerprint": "e8bdeac584db2e28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c62bd888d77409cd", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/sessions/42/sync-main (tests/sync-progress.test.js:522)"}, "properties": {"repobilityId": "cc4a77b81eb072eb", "scanner": "scanner-primary", "fingerprint": "c62bd888d77409cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-adcb351526692423", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/sessions/43/status (tests/sync-progress.test.js:550)"}, "properties": {"repobilityId": "3c31a319f0c9fe53", "scanner": "scanner-primary", "fingerprint": "adcb351526692423", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e7bb4e07292cc6a", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/sessions/44/status (tests/sync-progress.test.js:557)"}, "properties": {"repobilityId": "24409274397444f2", "scanner": "scanner-primary", "fingerprint": "5e7bb4e07292cc6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0fa2e666a986c12c", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:72)"}, "properties": {"repobilityId": "b0078fa6cd43486f", "scanner": "scanner-primary", "fingerprint": "0fa2e666a986c12c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5e70a383fa50b66", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:94)"}, "properties": {"repobilityId": "d4724004ccca04ff", "scanner": "scanner-primary", "fingerprint": "c5e70a383fa50b66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ac039e186058681", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${port}/api/apps/demo/sessions (tests/create-session-issue-link.test.js:112)"}, "properties": {"repobilityId": "36e5a4f28c43cbaa", "scanner": "scanner-primary", "fingerprint": "7ac039e186058681", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09ff4c533eb96d06", "level": "error", "message": {"text": "Dangling fetch: GET /__mock/enabled (public/usernode-bridge.js:768)"}, "properties": {"repobilityId": "f61fd44cacb301cd", "scanner": "scanner-primary", "fingerprint": "09ff4c533eb96d06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9b25ec2d1870e16", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3338)"}, "properties": {"repobilityId": "b62b1591807db802", "scanner": "scanner-primary", "fingerprint": "a9b25ec2d1870e16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be903f1990350771", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3350)"}, "properties": {"repobilityId": "0fc0f8a51f223093", "scanner": "scanner-primary", "fingerprint": "be903f1990350771", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83011e8edee01b9a", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge.js:3409)"}, "properties": {"repobilityId": "cb916bd1541c1892", "scanner": "scanner-primary", "fingerprint": "83011e8edee01b9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29783a572c56582d", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/getTransactions (public/usernode-bridge.js:3545)"}, "properties": {"repobilityId": "670bac7a7dd22ad6", "scanner": "scanner-primary", "fingerprint": "29783a572c56582d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04f88f04ef87f50f", "level": "error", "message": {"text": "Dangling fetch: GET /__mock/enabled (public/usernode-bridge/v1/bridge.js:768)"}, "properties": {"repobilityId": "0fce3519d6da1816", "scanner": "scanner-primary", "fingerprint": "04f88f04ef87f50f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ef66c92537f253e", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3338)"}, "properties": {"repobilityId": "ddf9a1ea1f5b9b76", "scanner": "scanner-primary", "fingerprint": "9ef66c92537f253e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-545f09cff796a47c", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3350)"}, "properties": {"repobilityId": "5248fab69389d313", "scanner": "scanner-primary", "fingerprint": "545f09cff796a47c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05f398aa9d57d0d8", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/sendTransaction (public/usernode-bridge/v1/bridge.js:3409)"}, "properties": {"repobilityId": "deef62b68d06f4f3", "scanner": "scanner-primary", "fingerprint": "05f398aa9d57d0d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-360bd43b65fc5927", "level": "error", "message": {"text": "Dangling fetch: POST /__mock/getTransactions (public/usernode-bridge/v1/bridge.js:3545)"}, "properties": {"repobilityId": "11783dbc0d9f9e46", "scanner": "scanner-primary", "fingerprint": "360bd43b65fc5927", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9c456f9ccaae230", "level": "error", "message": {"text": "Dangling fetch: POST /api/sessions/${id}/${action} (public/js/dev-chat.js:396)"}, "properties": {"repobilityId": "40bb3398eff9e196", "scanner": "scanner-primary", "fingerprint": "c9c456f9ccaae230", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-626396ae1fd98d0d", "level": "error", "message": {"text": "Dangling fetch: POST /api/sessions/${id}/${action} (public/js/dev-chat.js:2997)"}, "properties": {"repobilityId": "750ecc198a5565eb", "scanner": "scanner-primary", "fingerprint": "626396ae1fd98d0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fdb67a2bd9062f8", "level": "error", "message": {"text": "Dangling fetch: GET /api/leaderboard/${path}?window=${Leaderboard.window}&limit=20 (public/js/leaderboard.js:175)"}, "properties": {"repobilityId": "4e4f14c3a7423c9f", "scanner": "scanner-primary", "fingerprint": "2fdb67a2bd9062f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5657aa87dd9adf07", "level": "error", "message": {"text": "Dangling fetch: GET /api/apps/${slug}/github-issues${AppView._demoQS()} (public/js/app-view.js:1212)"}, "properties": {"repobilityId": "7dd4ab87a1961362", "scanner": "scanner-primary", "fingerprint": "5657aa87dd9adf07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aec3252bf257aecc", "level": "error", "message": {"text": "Dangling fetch: GET /api/apps/${slug}/promoted${AppView._demoQS()} (public/js/app-view.js:1214)"}, "properties": {"repobilityId": "39d5b544514f8fd6", "scanner": "scanner-primary", "fingerprint": "aec3252bf257aecc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d3ad0103a316329", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/routes/feedback.js:129)"}, "properties": {"repobilityId": "46cde0c0c75bce1c", "scanner": "scanner-primary", "fingerprint": "0d3ad0103a316329", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f76208c9d0f225d1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${issueOwner}/${issueRepo}/issues (src/routes/feedback.js:187)"}, "properties": {"repobilityId": "570dc832f61a9371", "scanner": "scanner-primary", "fingerprint": "f76208c9d0f225d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-869af9bd9f596534", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)} (src/services/github.js:771)"}, "properties": {"repobilityId": "c9eb12f77b867597", "scanner": "scanner-primary", "fingerprint": "869af9bd9f596534", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f749ccc590450b30", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n} (src/services/github.js:1015)"}, "properties": {"repobilityId": "03fe4cca0e67807d", "scanner": "scanner-primary", "fingerprint": "f749ccc590450b30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ebe6a16052a2c64", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${n}/comments?per_page=${max} (src/services/github.js:1077)"}, "properties": {"repobilityId": "48646082ca48941a", "scanner": "scanner-primary", "fingerprint": "8ebe6a16052a2c64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-798386868332afd1", "level": "note", "message": {"text": "Unused endpoint: USE /explorer-api"}, "properties": {"repobilityId": "ebe0bc77fff3ea2a", "scanner": "scanner-primary", "fingerprint": "798386868332afd1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee388d337f5ff472", "level": "note", "message": {"text": "Unused endpoint: ALL /__mock/*"}, "properties": {"repobilityId": "3f636086fbe81f5b", "scanner": "scanner-primary", "fingerprint": "ee388d337f5ff472", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-47578474b8c428de", "level": "note", "message": {"text": "Unused endpoint: GET /claude.md"}, "properties": {"repobilityId": "84fc478f1a741e5d", "scanner": "scanner-primary", "fingerprint": "47578474b8c428de", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e1a69df68b7f83b", "level": "note", "message": {"text": "Unused endpoint: GET /api/node-status"}, "properties": {"repobilityId": "9968c7132ae1524a", "scanner": "scanner-primary", "fingerprint": "6e1a69df68b7f83b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8710bdbce482f76", "level": "note", "message": {"text": "Unused endpoint: GET /api/node-status/full"}, "properties": {"repobilityId": "84c805551e992eff", "scanner": "scanner-primary", "fingerprint": "b8710bdbce482f76", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92146e704da5c8c1", "level": "note", "message": {"text": "Unused endpoint: GET /node-status"}, "properties": {"repobilityId": "4d75926f3cc05929", "scanner": "scanner-primary", "fingerprint": "92146e704da5c8c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fdd3d0cba0c5b23", "level": "note", "message": {"text": "Unused endpoint: USE /usernode-bridge"}, "properties": {"repobilityId": "62f71a0526aaab79", "scanner": "scanner-primary", "fingerprint": "1fdd3d0cba0c5b23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-953ec1a0ee6df50d", "level": "note", "message": {"text": "Unused endpoint: GET /admin"}, "properties": {"repobilityId": "20a301044ef91485", "scanner": "scanner-primary", "fingerprint": "953ec1a0ee6df50d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d504b80adc9409ec", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard"}, "properties": {"repobilityId": "05aba64b1e6eae6f", "scanner": "scanner-primary", "fingerprint": "d504b80adc9409ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d93a530ce10d47d9", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin"}, "properties": {"repobilityId": "3538dc74f95ca30c", "scanner": "scanner-primary", "fingerprint": "d93a530ce10d47d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e150ecfd4e11c48c", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/overview"}, "properties": {"repobilityId": "9daea927611ea458", "scanner": "scanner-primary", "fingerprint": "e150ecfd4e11c48c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b4d87f54d62a1386", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/users"}, "properties": {"repobilityId": "6f90cddc3561cc29", "scanner": "scanner-primary", "fingerprint": "b4d87f54d62a1386", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-980515b6b536dd6b", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/users/app-quota"}, "properties": {"repobilityId": "99d54bd8319270b6", "scanner": "scanner-primary", "fingerprint": "980515b6b536dd6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68e740e7198463d1", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/users/:id/app-quota"}, "properties": {"repobilityId": "9bf375a909238473", "scanner": "scanner-primary", "fingerprint": "68e740e7198463d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea1f984cc2c390e9", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/users/:id/is-admin"}, "properties": {"repobilityId": "156c28d31bfacb67", "scanner": "scanner-primary", "fingerprint": "ea1f984cc2c390e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-58f93b3558b9308f", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/admin/users/:id"}, "properties": {"repobilityId": "c503cbd45351d1f7", "scanner": "scanner-primary", "fingerprint": "58f93b3558b9308f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24537ecee3e26a55", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/users/:id/reset-password"}, "properties": {"repobilityId": "11bff1a79245d1b6", "scanner": "scanner-primary", "fingerprint": "24537ecee3e26a55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-175f8545807f0d44", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/codes"}, "properties": {"repobilityId": "bbeb1fdb71e92d61", "scanner": "scanner-primary", "fingerprint": "175f8545807f0d44", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b2f65b8060ee259", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/codes"}, "properties": {"repobilityId": "4319de8f462df9fe", "scanner": "scanner-primary", "fingerprint": "7b2f65b8060ee259", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68074cbbec858763", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/admin/codes/:id"}, "properties": {"repobilityId": "07e8e8292d2e5502", "scanner": "scanner-primary", "fingerprint": "68074cbbec858763", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9af9caaac1d5636f", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/limits"}, "properties": {"repobilityId": "ffdd41d71c1373f2", "scanner": "scanner-primary", "fingerprint": "9af9caaac1d5636f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f9a37c3e80d727c", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/limits"}, "properties": {"repobilityId": "ea460ad4644e0bdd", "scanner": "scanner-primary", "fingerprint": "2f9a37c3e80d727c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ffada041456e07ca", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/users/:id/daily-limit"}, "properties": {"repobilityId": "ab0b2c56af370c77", "scanner": "scanner-primary", "fingerprint": "ffada041456e07ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dcc685f5c9c15a33", "level": "note", "message": {"text": "Unused endpoint: USE /api/issues/:id"}, "properties": {"repobilityId": "9f4440bb5daa828e", "scanner": "scanner-primary", "fingerprint": "dcc685f5c9c15a33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09f6d012d933ac8b", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/analytics"}, "properties": {"repobilityId": "492af73c899af6da", "scanner": "scanner-primary", "fingerprint": "09f6d012d933ac8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23a44cf9ac5390e5", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/overview"}, "properties": {"repobilityId": "ab92389f22184821", "scanner": "scanner-primary", "fingerprint": "23a44cf9ac5390e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90dada48e7b5f977", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/funnels"}, "properties": {"repobilityId": "0b7ee8678da5818e", "scanner": "scanner-primary", "fingerprint": "90dada48e7b5f977", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-270f5045a081c9f7", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/growth"}, "properties": {"repobilityId": "a891dfe9824f7473", "scanner": "scanner-primary", "fingerprint": "270f5045a081c9f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-555caa89f0f46242", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/retention"}, "properties": {"repobilityId": "4b66762ab8883bf1", "scanner": "scanner-primary", "fingerprint": "555caa89f0f46242", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bfe7b0b81258652a", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/engagement"}, "properties": {"repobilityId": "71a49ee0218de3da", "scanner": "scanner-primary", "fingerprint": "bfe7b0b81258652a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ef7729bcd3755d7", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/top-users"}, "properties": {"repobilityId": "78d7d1192ff65454", "scanner": "scanner-primary", "fingerprint": "2ef7729bcd3755d7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bf8a58699b00153", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/kudos"}, "properties": {"repobilityId": "300595d8ea5161aa", "scanner": "scanner-primary", "fingerprint": "6bf8a58699b00153", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3c8791239bb302f8", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/analytics/spend"}, "properties": {"repobilityId": "31d178be386f6b60", "scanner": "scanner-primary", "fingerprint": "3c8791239bb302f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd55aa0818a7c897", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/login"}, "properties": {"repobilityId": "211820ec2eb7ef5a", "scanner": "scanner-primary", "fingerprint": "fd55aa0818a7c897", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a5b3437e64c8f7b4", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/register"}, "properties": {"repobilityId": "5a34e86345e773e1", "scanner": "scanner-primary", "fingerprint": "a5b3437e64c8f7b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2504eb0c23fcbe96", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/wallet-verify"}, "properties": {"repobilityId": "2bc89a281ad42225", "scanner": "scanner-primary", "fingerprint": "2504eb0c23fcbe96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-edb2c8f18dc50326", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/wallet-reset-verify"}, "properties": {"repobilityId": "d7f6af8f1760a752", "scanner": "scanner-primary", "fingerprint": "edb2c8f18dc50326", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f83ad9aa462f39e", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/wallet-register"}, "properties": {"repobilityId": "a5cbd7066c373dca", "scanner": "scanner-primary", "fingerprint": "1f83ad9aa462f39e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-033bb9071b399489", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/wallet-link-login"}, "properties": {"repobilityId": "6c2838b8b59cee2b", "scanner": "scanner-primary", "fingerprint": "033bb9071b399489", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ceaaf0332fbf608", "level": "note", "message": {"text": "Unused endpoint: GET /visuals/:id"}, "properties": {"repobilityId": "382bf94056ca8f96", "scanner": "scanner-primary", "fingerprint": "0ceaaf0332fbf608", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2513c72180e94472", "level": "note", "message": {"text": "Unused endpoint: USE /api/sessions/:id"}, "properties": {"repobilityId": "67e6172fd042c4d1", "scanner": "scanner-primary", "fingerprint": "2513c72180e94472", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7fbd73cfb8c17744", "level": "note", "message": {"text": "Unused endpoint: GET /api/leaderboard/prs"}, "properties": {"repobilityId": "006d53975639a00a", "scanner": "scanner-primary", "fingerprint": "7fbd73cfb8c17744", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c429b217236aaf66", "level": "note", "message": {"text": "Unused endpoint: GET /api/leaderboard/users"}, "properties": {"repobilityId": "241adc83a3811b7d", "scanner": "scanner-primary", "fingerprint": "c429b217236aaf66", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd20d66a67189554", "level": "note", "message": {"text": "Unused endpoint: GET /api/leaderboard/users/:username/prs"}, "properties": {"repobilityId": "01b9b43d034a35a2", "scanner": "scanner-primary", "fingerprint": "cd20d66a67189554", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c43da3570a5d3ae8", "level": "note", "message": {"text": "Unused endpoint: POST /api/sessions/:id/pause"}, "properties": {"repobilityId": "05bd84fc63012752", "scanner": "scanner-primary", "fingerprint": "c43da3570a5d3ae8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7c6e3b28f4d76758", "level": "note", "message": {"text": "Unused endpoint: GET /api/sessions/:id/events"}, "properties": {"repobilityId": "512fb92b5a6dfcec", "scanner": "scanner-primary", "fingerprint": "7c6e3b28f4d76758", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c9e8d32cdf3e6fd", "level": "note", "message": {"text": "Unused endpoint: POST /api/sessions/:id/deploy-staging"}, "properties": {"repobilityId": "a9dd40f2b49118ec", "scanner": "scanner-primary", "fingerprint": "0c9e8d32cdf3e6fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1a19b3e4965f624", "level": "note", "message": {"text": "Unused endpoint: GET /api/github/repo-info"}, "properties": {"repobilityId": "da446fa9066d896a", "scanner": "scanner-primary", "fingerprint": "c1a19b3e4965f624", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-93548ed9d7a94944", "level": "note", "message": {"text": "Unused endpoint: GET /__access/authorize"}, "properties": {"repobilityId": "75e4fbddede162ad", "scanner": "scanner-primary", "fingerprint": "93548ed9d7a94944", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0bcb4d91dbf885d4", "level": "note", "message": {"text": "Unused endpoint: GET /__caddy/access"}, "properties": {"repobilityId": "d61e10b38f8dfd94", "scanner": "scanner-primary", "fingerprint": "0bcb4d91dbf885d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}