{"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-852d18b1a00d272e", "name": "Possibly dead Python function: lookups", "shortDescription": {"text": "Possibly dead Python function: lookups"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3474b453ab561f0", "name": "Possibly dead Python function: queryset", "shortDescription": {"text": "Possibly dead Python function: queryset"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fd724859a12c32c", "name": "Possibly dead Python function: rating_display", "shortDescription": {"text": "Possibly dead Python function: rating_display"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24bff5187281b166", "name": "Possibly dead Python function: is_open_for_signup", "shortDescription": {"text": "Possibly dead Python function: is_open_for_signup"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45354bf011b58af8", "name": "Possibly dead Python function: send_interview_code_email", "shortDescription": {"text": "Possibly dead Python function: send_interview_code_email"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a219c8ff1fc7c3f", "name": "Possibly dead Python function: send_interview_notification_to_admin", "shortDescription": {"text": "Possibly dead Python function: send_interview_notification_to_admin"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b335902432710fc", "name": "Possibly dead Python function: validate_interview_code", "shortDescription": {"text": "Possibly dead Python function: validate_interview_code"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e712cb454a96463", "name": "Possibly dead Python function: cleanup_expired_codes", "shortDescription": {"text": "Possibly dead Python function: cleanup_expired_codes"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ce72ff00140a782", "name": "Stray `console.log` in TS/JS \u2014 frontend/vite.config.ts:423", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/vite.config.ts:423"}, "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-ccfd917d577e575a", "name": "Stray `console.log` in TS/JS \u2014 frontend/cypress.config.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/cypress.config.ts:19"}, "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-9059dde1a6d7fc76", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/testing/verify-contract-fixes.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/testing/verify-contract-fixes.js:27"}, "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-c9249ec306c1d2f1", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/testing/quick_test.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/testing/quick_test.js:4"}, "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-8b9b8d582ef71c3f", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/clear-browser-cache.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/clear-browser-cache.js:28"}, "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-05b3e2f973c45d8e", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-cache-clear.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-cache-clear.js:4"}, "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-c8e76d2b30b76814", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-clear-cache.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-clear-cache.js:4"}, "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-65eab67bfd20b89f", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/cleanup-console-logs.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/cleanup-console-logs.js:7"}, "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-fea847ae5944d7ad", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/nuclear-cache-clear.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/nuclear-cache-clear.js:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-889974c39cf50d85", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-cache-clear-complete.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-cache-clear-complete.js:4"}, "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-d13fcf70a4818452", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/force-reload-contracts.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/force-reload-contracts.js:28"}, "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-eae72cac79b17018", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/fix-contract-errors.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/fix-contract-errors.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74a62d3b87e1e558", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/complete-contract-fix.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/complete-contract-fix.js:31"}, "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-4b07b443d0339498", "name": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/fix-rollup.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/fix-rollup.js:7"}, "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-02e25675633d5573", "name": "Stray `console.log` in TS/JS \u2014 frontend/playwright/global-setup-e2e.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/global-setup-e2e.ts:44"}, "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-512e6581352aeaf2", "name": "Stray `console.log` in TS/JS \u2014 frontend/playwright/tests/contract-workflow.spec.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/tests/contract-workflow.spec.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b82218786f5b19a7", "name": "Stray `console.log` in TS/JS \u2014 frontend/playwright/tests/multi-user-contract-signing.spec.ts:290", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/tests/multi-user-contract-signing.spec.ts:290"}, "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-76a1ee507ec18f45", "name": "Stray `console.log` in TS/JS \u2014 frontend/playwright/helpers/multi-user-logger.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/helpers/multi-user-logger.ts:126"}, "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-ba15f149d25def31", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/utils/performanceMonitor.ts:262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/utils/performanceMonitor.ts:262"}, "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-29549be0110567e8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/ErrorBoundary.tsx:134", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/ErrorBoundary.tsx:134"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-978d56ebb3d544e3", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/testSuiteRunner.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/testSuiteRunner.ts:106"}, "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-45868da652c10dbb", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/integrationSetup.ts:479", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/integrationSetup.ts:479"}, "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-af0867aa2d5a3523", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/integrationTestRunner.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/integrationTestRunner.ts:134"}, "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-b28ebe362b601193", "name": "Stray `console.log` in TS/JS \u2014 scripts/maintenance/force_refresh_all.js:2", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/maintenance/force_refresh_all.js:2"}, "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-60427b03771411b6", "name": "Dockerfile runs as root: frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: frontend/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-bfb1caa8d76b37a1", "name": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-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-b048d166901fd868", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25070323bd5a5e47", "name": "Insecure pattern 'node_child_process' in frontend/scripts/cache/cleanup-console-logs.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/cache/cleanup-console-logs.js:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16245497c9d13506", "name": "Insecure pattern 'node_child_process' in frontend/scripts/fixes/complete-contract-fix.js:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/fixes/complete-contract-fix.js:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d66caaac073bb5c", "name": "Insecure pattern 'node_child_process' in frontend/scripts/fixes/fix-rollup.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/fixes/fix-rollup.js:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-93d63179cf75df2f", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/public/clear-cache.html:123", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/public/clear-cache.html:123"}, "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-d6319a5540f02a6f", "name": "Insecure pattern 'node_child_process' in frontend/playwright/global-setup-e2e.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/playwright/global-setup-e2e.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7e5f17d76687d75", "name": "Insecure pattern 'node_child_process' in frontend/playwright/helpers/multi-user-logger.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/playwright/helpers/multi-user-logger.ts:17"}, "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-818938f74f6ffe42", "name": "Possible secret in frontend/playwright/helpers/mock-api.ts", "shortDescription": {"text": "Possible secret in frontend/playwright/helpers/mock-api.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-583c480963f9b370", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/ErrorBoundary.tsx:134", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/ErrorBoundary.tsx:134"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-26487f416ed76ae5", "name": "Insecure pattern 'document_write' in frontend/src/components/ExportButton.tsx:214", "shortDescription": {"text": "Insecure pattern 'document_write' in frontend/src/components/ExportButton.tsx:214"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e8692a71aa40c9e", "name": "Insecure pattern 'node_child_process' in frontend/src/test-utils/testSuiteRunner.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/src/test-utils/testSuiteRunner.ts:7"}, "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-c0d76f50d0dafdaf", "name": "Insecure pattern 'node_child_process' in frontend/src/test-utils/integrationTestRunner.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/src/test-utils/integrationTestRunner.ts:7"}, "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-0f5836e3cf2c45da", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/hooks/__tests__/useUser.test.ts:54", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/hooks/__tests__/useUser.test.ts:54"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8cec428e72c012cb", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/services/authService.ts:141", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/services/authService.ts:141"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef66b9e1fe6a0955", "name": "Possible secret in scripts/testing/seed_e2e_multiuser.py", "shortDescription": {"text": "Possible secret in scripts/testing/seed_e2e_multiuser.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-a49cef5b6f384ec4", "name": "Possible secret in scripts/debug/diagnose_auth_issue.py", "shortDescription": {"text": "Possible secret in scripts/debug/diagnose_auth_issue.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f017e9c4ddc8398e", "name": "Insecure pattern 'local_storage_auth_token' in scripts/debug/diagnose_auth_issue.py:90", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in scripts/debug/diagnose_auth_issue.py:90"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee2aab862ac6e688", "name": "Possible secret in payments/tests_models.py", "shortDescription": {"text": "Possible secret in payments/tests_models.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1c0a1f2219f369bb", "name": "Possible secret in payments/tests_api.py", "shortDescription": {"text": "Possible secret in payments/tests_api.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d5bbd33db9ebfa33", "name": "Insecure pattern 'eval_used' in properties/serializers.py:355", "shortDescription": {"text": "Insecure pattern 'eval_used' in properties/serializers.py:355"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "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": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6670f32b5bd9075", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0840d07864313e3", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-822baa44644a3cf2", "name": "Very large file: frontend/src/components/contracts/LandlordContractForm.tsx (5162 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/contracts/LandlordContractForm.tsx (5162 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-998e0b464fc73efd", "name": "Very large file: frontend/src/components/contracts/TenantContractsDashboard.tsx (1903 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/contracts/TenantContractsDashboard.tsx (1903 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-38f3e1c79aaf4ed5", "name": "Very large file: frontend/src/components/contracts/EnhancedTenantDocumentUpload.tsx (1781 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/contracts/EnhancedTenantDocumentUpload.tsx (1781 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-124a89e2b4f9b96c", "name": "Very large file: frontend/src/components/contracts/ContractDraftEditor.tsx (1540 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/contracts/ContractDraftEditor.tsx (1540 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-49be7a3327dbee98", "name": "Very large file: frontend/src/components/contracts/TenantDataForm.tsx (1406 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/contracts/TenantDataForm.tsx (1406 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-4d9a602209152bdf", "name": "Very large file: frontend/src/components/contracts/MatchedCandidatesView.tsx (2092 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/contracts/MatchedCandidatesView.tsx (2092 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-3921dc37cacb066e", "name": "Very large file: frontend/src/components/contracts/TenantContractView.tsx (1481 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/contracts/TenantContractView.tsx (1481 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-ea0219ec6145a783", "name": "Very large file: frontend/src/components/properties/PropertyDetail.tsx (1919 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/properties/PropertyDetail.tsx (1919 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-79ceb7131a1eba56", "name": "Very large file: frontend/src/components/properties/PropertyForm.tsx (2325 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/properties/PropertyForm.tsx (2325 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-f8406acad5a2a836", "name": "Very large file: frontend/src/components/matching/MatchesDashboard.tsx (1590 lines)", "shortDescription": {"text": "Very large file: frontend/src/components/matching/MatchesDashboard.tsx (1590 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-a43aa05fd30d534a", "name": "Very large file: frontend/src/pages/auth/RegisterWithCode.tsx (1716 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/auth/RegisterWithCode.tsx (1716 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-f51f945870082214", "name": "Very large file: frontend/src/pages/dashboard/NewDashboard.tsx (1738 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/dashboard/NewDashboard.tsx (1738 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-5e4fa8a2fd44a83d", "name": "Very large file: users/api_views.py (2252 lines)", "shortDescription": {"text": "Very large file: users/api_views.py (2252 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-045fd367fb65b903", "name": "Very large file: verification/tests.py (1827 lines)", "shortDescription": {"text": "Very large file: verification/tests.py (1827 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-fa3ae27558e7265e", "name": "Very large file: verification/api_views.py (1395 lines)", "shortDescription": {"text": "Very large file: verification/api_views.py (1395 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-111de1b4f4305169", "name": "Very large file: payments/api_views.py (2443 lines)", "shortDescription": {"text": "Very large file: payments/api_views.py (2443 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-39335c572f7a6b98", "name": "Very large file: contracts/biometric_service.py (1700 lines)", "shortDescription": {"text": "Very large file: contracts/biometric_service.py (1700 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-d063ed43fe5b0bc0", "name": "Very large file: contracts/landlord_api_views.py (1883 lines)", "shortDescription": {"text": "Very large file: contracts/landlord_api_views.py (1883 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-d745e8a1dd125dfc", "name": "Very large file: contracts/api_views.py (4209 lines)", "shortDescription": {"text": "Very large file: contracts/api_views.py (4209 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-0a76d9a7ecdef848", "name": "Very large file: contracts/landlord_contract_models.py (2160 lines)", "shortDescription": {"text": "Very large file: contracts/landlord_contract_models.py (2160 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-4fa72699405e30de", "name": "Very large file: contracts/pdf_generator.py (3719 lines)", "shortDescription": {"text": "Very large file: contracts/pdf_generator.py (3719 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-f0b54bfd639b080b", "name": "Very large file: matching/api_views.py (1606 lines)", "shortDescription": {"text": "Very large file: matching/api_views.py (1606 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-aba2095ac97be57e", "name": "50 TODO/FIXME markers", "shortDescription": {"text": "50 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "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 1217 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 197 placeholder/mock markers across 80 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8790c6e9ca1b93e1", "name": "Commented-code block (7 lines) in frontend/vite.config.ts:159", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/vite.config.ts:159"}, "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-b168bc7b91a1d2c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/scripts/testing/quick_test.js:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/scripts/testing/quick_test.js:65"}, "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-86d4d7ed789fc015", "name": "Commented-code block (5 lines) in frontend/playwright/tests/fase-g1-websocket-messaging.spec.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/playwright/tests/fase-g1-websocket-messaging.spec.ts:95"}, "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-60c155512d629424", "name": "Legacy-named symbol `receipt_too_old` in frontend/playwright/tests/fase-c9-vhid-public-receipt.spec.ts:158", "shortDescription": {"text": "Legacy-named symbol `receipt_too_old` in frontend/playwright/tests/fase-c9-vhid-public-receipt.spec.ts:158"}, "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-a314934e19791821", "name": "Commented-code block (10 lines) in frontend/playwright/tests/fase-c9-vhid-public-receipt.spec.ts:127", "shortDescription": {"text": "Commented-code block (10 lines) in frontend/playwright/tests/fase-c9-vhid-public-receipt.spec.ts:127"}, "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-73446af7057e57e3", "name": "Commented-code block (7 lines) in frontend/playwright/tests/fase-c8-vhid-email-otp.spec.ts:106", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/playwright/tests/fase-c8-vhid-email-otp.spec.ts:106"}, "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-ebf6529cc7dbf510", "name": "Commented-code block (5 lines) in frontend/playwright/tests/button-audit.spec.ts:285", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/playwright/tests/button-audit.spec.ts:285"}, "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-8e6030951a3ddb6a", "name": "Commented-code block (5 lines) in frontend/playwright/tests/multi-user-contract-signing.spec.ts:151", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/playwright/tests/multi-user-contract-signing.spec.ts:151"}, "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-4ff90ce4f59858b3", "name": "Legacy-named symbol `id_copy` in frontend/src/types/landlordContract.ts:418", "shortDescription": {"text": "Legacy-named symbol `id_copy` in frontend/src/types/landlordContract.ts:418"}, "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-484c2a5c38a33913", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/utils/contractPdfUtils.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/utils/contractPdfUtils.ts:20"}, "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-2924c02139875e35", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/requests/CandidateEvaluationView.tsx:202", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/requests/CandidateEvaluationView.tsx:202"}, "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-07fefbce539b7b8a", "name": "Legacy-named symbol `receipt_too_old` in frontend/src/components/verihome-id/PublicReceiptUploader.tsx:50", "shortDescription": {"text": "Legacy-named symbol `receipt_too_old` in frontend/src/components/verihome-id/PublicReceiptUploader.tsx:50"}, "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-a3daf8da9611d9bf", "name": "Commented-code block (6 lines) in frontend/src/components/contracts/LandlordContractForm.tsx:1058", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/contracts/LandlordContractForm.tsx:1058"}, "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-32edb46218642264", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/EnhancedTenantDocumentUpload.tsx:698", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/EnhancedTenantDocumentUpload.tsx:698"}, "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-ede887ee9fba9644", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/LandlordDocumentReview.tsx:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/LandlordDocumentReview.tsx:190"}, "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-d978af4aa06c1302", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/ContractClausesEditor.tsx:186", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/ContractClausesEditor.tsx:186"}, "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-e6e2543e7cc99317", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useServiceWorker.ts:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useServiceWorker.ts:267"}, "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-51e2bf4265d23dcd", "name": "Legacy-named symbol `receipt_too_old` in frontend/src/services/publicReceiptApi.ts:14", "shortDescription": {"text": "Legacy-named symbol `receipt_too_old` in frontend/src/services/publicReceiptApi.ts:14"}, "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-9e98147a0a2f4936", "name": "Legacy-named symbol `receipt_too_old` in verification/tests.py:1743", "shortDescription": {"text": "Legacy-named symbol `receipt_too_old` in verification/tests.py:1743"}, "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-e079d7069542bcf7", "name": "Legacy-named symbol `receipt_too_old` in verification/api_views.py:1353", "shortDescription": {"text": "Legacy-named symbol `receipt_too_old` in verification/api_views.py:1353"}, "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-91a1b08327796d2e", "name": "Likely N+1 query: `for act in \u2026` triggers a query per row \u2014 verification/api_views.py:911", "shortDescription": {"text": "Likely N+1 query: `for act in \u2026` triggers a query per row \u2014 verification/api_views.py:911"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `act.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0beed2b56e26be5f", "name": "Likely N+1 query: `for request_obj in \u2026` triggers a query per row \u2014 verification/management/commands/auto_assign_agents.", "shortDescription": {"text": "Likely N+1 query: `for request_obj in \u2026` triggers a query per row \u2014 verification/management/commands/auto_assign_agents.py:78"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `request_obj.user.email` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a858d28bc1a4f8e0", "name": "Likely N+1 query: `for act in \u2026` triggers a query per row \u2014 verification/services/hash_chain.py:151", "shortDescription": {"text": "Likely N+1 query: `for act in \u2026` triggers a query per row \u2014 verification/services/hash_chain.py:151"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `act.lawyer_signed_at.isoformat` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5d7bfb9d7188686a", "name": "Commented-code block (5 lines) in requests/__init__.py:3", "shortDescription": {"text": "Commented-code block (5 lines) in requests/__init__.py: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-9a219204c88d1470", "name": "Likely N+1 query: `for doc in \u2026` triggers a query per row \u2014 requests/document_api_views.py:386", "shortDescription": {"text": "Likely N+1 query: `for doc in \u2026` triggers a query per row \u2014 requests/document_api_views.py:386"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `doc.document_type.startswith` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a6394713c9811e1", "name": "Likely N+1 query: `for doc in \u2026` triggers a query per row \u2014 requests/document_api_views.py:646", "shortDescription": {"text": "Likely N+1 query: `for doc in \u2026` triggers a query per row \u2014 requests/document_api_views.py:646"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `doc.property_request.property` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-93730c1d9808ee88", "name": "Likely N+1 query: `for prop in \u2026` triggers a query per row \u2014 scripts/fixes/clean_matching_processes.py:94", "shortDescription": {"text": "Likely N+1 query: `for prop in \u2026` triggers a query per row \u2014 scripts/fixes/clean_matching_processes.py:94"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `prop.landlord.email` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b8386c07f21b958", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/utilities/verify_optimizations.py:21", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/utilities/verify_optimizations.py:21"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1c661fcf8eac597", "name": "Likely N+1 query: `for video in \u2026` triggers a query per row \u2014 scripts/debug/debug_video_issue.py:116", "shortDescription": {"text": "Likely N+1 query: `for video in \u2026` triggers a query per row \u2014 scripts/debug/debug_video_issue.py:116"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `video.video.url` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-538e5d73cb80d564", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 scripts/debug/debug_contract_404.py:65", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 scripts/debug/debug_contract_404.py:65"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.tenant.email` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd078423e5976c84", "name": "Likely N+1 query: `for mr in \u2026` triggers a query per row \u2014 scripts/debug/debug_contract_approval.py:51", "shortDescription": {"text": "Likely N+1 query: `for mr in \u2026` triggers a query per row \u2014 scripts/debug/debug_contract_approval.py:51"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `mr.property.landlord` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e552749dec54b13", "name": "Likely N+1 query: `for mr in \u2026` triggers a query per row \u2014 scripts/debug/check_workflow_status.py:36", "shortDescription": {"text": "Likely N+1 query: `for mr in \u2026` triggers a query per row \u2014 scripts/debug/check_workflow_status.py:36"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `mr.tenant.email` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5a8356d67ecbbbd", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 scripts/debug/check_workflow_status.py:52", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 scripts/debug/check_workflow_status.py:52"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.landlord.email` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-efbd403a59f8e638", "name": "Likely N+1 query: `for payment in \u2026` triggers a query per row \u2014 dashboard/views.py:570", "shortDescription": {"text": "Likely N+1 query: `for payment in \u2026` triggers a query per row \u2014 dashboard/views.py:570"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `payment.property.landlord` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8100e7919e446f", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:596", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:596"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.property.title` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f3d58f0153edff2", "name": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:765", "shortDescription": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:765"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `transaction.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a65abbf44fed840", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:784", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:784"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91a3cf16d7cea49d", "name": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:809", "shortDescription": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:809"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `transaction.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-571b7d5a7feccdb9", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:826", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:826"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28bd63eac1f5c374", "name": "Likely N+1 query: `for sr in \u2026` triggers a query per row \u2014 dashboard/views.py:861", "shortDescription": {"text": "Likely N+1 query: `for sr in \u2026` triggers a query per row \u2014 dashboard/views.py:861"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `sr.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12c5d9841d093cae", "name": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:882", "shortDescription": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:882"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `transaction.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1abc2d479ebec64b", "name": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:903", "shortDescription": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:903"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `transaction.created_at.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53c198b32b26397f", "name": "Legacy-named symbol `days_old` in messaging/notifications.py:553", "shortDescription": {"text": "Legacy-named symbol `days_old` in messaging/notifications.py:553"}, "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-eb516e8ae0e61ebf", "name": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/notifications.py:117", "shortDescription": {"text": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/notifications.py:117"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `message.thread.id` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-529bdf27ee9a6a0f", "name": "Likely N+1 query: `for question in \u2026` triggers a query per row \u2014 messaging/advanced_messaging.py:423", "shortDescription": {"text": "Likely N+1 query: `for question in \u2026` triggers a query per row \u2014 messaging/advanced_messaging.py:423"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `question.sender.get_full_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58cd678404643f81", "name": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/advanced_api_views.py:564", "shortDescription": {"text": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/advanced_api_views.py:564"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `message.reply_to.sent_at` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f95b78517857becf", "name": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/consumers.py:318", "shortDescription": {"text": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/consumers.py:318"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `message.thread.id` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e32e72a31f83ddb", "name": "Likely N+1 query: `for payment in \u2026` triggers a query per row \u2014 payments/reminder_service.py:453", "shortDescription": {"text": "Likely N+1 query: `for payment in \u2026` triggers a query per row \u2014 payments/reminder_service.py:453"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `payment.due_date.strftime` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4a5cff89f260e60", "name": "Likely N+1 query: `for schedule in \u2026` triggers a query per row \u2014 payments/auto_charge_service.py:46", "shortDescription": {"text": "Likely N+1 query: `for schedule in \u2026` triggers a query per row \u2014 payments/auto_charge_service.py:46"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `schedule.last_payment_date.month` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9b0c77f527adf84", "name": "Commented-code block (6 lines) in payments/models.py:783", "shortDescription": {"text": "Commented-code block (6 lines) in payments/models.py:783"}, "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-ad429fa84822c393", "name": "Commented-code block (6 lines) in payments/dian_invoice_service.py:364", "shortDescription": {"text": "Commented-code block (6 lines) in payments/dian_invoice_service.py:364"}, "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-5e8c651c10ea31a5", "name": "Commented-code block (5 lines) in payments/api_views.py:792", "shortDescription": {"text": "Commented-code block (5 lines) in payments/api_views.py:792"}, "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-b7d0888e75d0f331", "name": "Likely N+1 query: `for schedule in \u2026` triggers a query per row \u2014 payments/api_views.py:1591", "shortDescription": {"text": "Likely N+1 query: `for schedule in \u2026` triggers a query per row \u2014 payments/api_views.py:1591"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `schedule.contract.property` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da57ad17ce954442", "name": "Commented-code block (5 lines) in core/urls.py:32", "shortDescription": {"text": "Commented-code block (5 lines) in core/urls.py: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-f9afeeb9681830bb", "name": "Commented-code block (8 lines) in core/api_views.py:381", "shortDescription": {"text": "Commented-code block (8 lines) in core/api_views.py:381"}, "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-34256042a3b845e1", "name": "Likely N+1 query: `for c in \u2026` triggers a query per row \u2014 core/api_views.py:607", "shortDescription": {"text": "Likely N+1 query: `for c in \u2026` triggers a query per row \u2014 core/api_views.py:607"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `c.landlord.email` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1281efd9f8fcae84", "name": "Commented-code block (5 lines) in contracts/biometric_service.py:89", "shortDescription": {"text": "Commented-code block (5 lines) in contracts/biometric_service.py:89"}, "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-a855fba0728fa32c", "name": "Commented-code block (6 lines) in contracts/constants.py:65", "shortDescription": {"text": "Commented-code block (6 lines) in contracts/constants.py:65"}, "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-79ebfbb6a93bd3d9", "name": "Commented-code block (5 lines) in contracts/landlord_api_views.py:475", "shortDescription": {"text": "Commented-code block (5 lines) in contracts/landlord_api_views.py:475"}, "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-79da2469b5f57213", "name": "Legacy-named symbol `var_copy` in contracts/admin.py:720", "shortDescription": {"text": "Legacy-named symbol `var_copy` in contracts/admin.py:720"}, "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-5add63b3311aba47", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/tasks.py:67", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/tasks.py:67"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.admin_review_deadline.isoformat` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b136ae0569d491ad", "name": "Commented-code block (7 lines) in contracts/tenant_serializers.py:141", "shortDescription": {"text": "Commented-code block (7 lines) in contracts/tenant_serializers.py:141"}, "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-33558c73e0da78f2", "name": "Commented-code block (9 lines) in contracts/test_biometric.py:644", "shortDescription": {"text": "Commented-code block (9 lines) in contracts/test_biometric.py:644"}, "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-ab794731344e21c4", "name": "Likely N+1 query: `for clause in \u2026` triggers a query per row \u2014 contracts/api_views.py:1118", "shortDescription": {"text": "Likely N+1 query: `for clause in \u2026` triggers a query per row \u2014 contracts/api_views.py:1118"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `clause.created_at.isoformat` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d81905e88537fc0b", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/admin_approval_api.py:55", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/admin_approval_api.py:55"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.landlord.get_full_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc1d081bd6c192eb", "name": "Legacy-named symbol `heuristic_v1` in contracts/biometric_providers/local.py:183", "shortDescription": {"text": "Legacy-named symbol `heuristic_v1` in contracts/biometric_providers/local.py:183"}, "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-46439913aed41de1", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/management/commands/process_contract_notifica", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/management/commands/process_contract_notifications.py:145"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.primary_party.get_full_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33073fc135353277", "name": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 ratings/analytics.py:644", "shortDescription": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 ratings/analytics.py:644"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `contract.property.title` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b54a138940155232", "name": "Commented-code block (5 lines) in ratings/models.py:120", "shortDescription": {"text": "Commented-code block (5 lines) in ratings/models.py:120"}, "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-1cdb302585399588", "name": "Likely N+1 query: `for profile in \u2026` triggers a query per row \u2014 ratings/management/commands/update_rating_profiles.py:12", "shortDescription": {"text": "Likely N+1 query: `for profile in \u2026` triggers a query per row \u2014 ratings/management/commands/update_rating_profiles.py:129"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `profile.user.get_full_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-273baec73fa160e6", "name": "Likely N+1 query: `for match in \u2026` triggers a query per row \u2014 matching/services.py:492", "shortDescription": {"text": "Likely N+1 query: `for match in \u2026` triggers a query per row \u2014 matching/services.py:492"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `match.property.title` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b48123ffade902e", "name": "Legacy-named symbol `test_can_follow_up_true_old` in matching/tests.py:209", "shortDescription": {"text": "Legacy-named symbol `test_can_follow_up_true_old` in matching/tests.py:209"}, "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-7c9db4ddc8870cd0", "name": "Likely N+1 query: `for property in \u2026` triggers a query per row \u2014 matching/api_views.py:669", "shortDescription": {"text": "Likely N+1 query: `for property in \u2026` triggers a query per row \u2014 matching/api_views.py:669"}, "fullDescription": {"text": "The loop iterates a Django queryset and accesses `property.landlord.get_full_name` per row, which fires an additional database query each iteration. Add `.select_related('<fk_field>')` for FK / O2O relations or `.prefetch_related('<m2m_or_reverse>')` for many-related lookups, to load everything in 1-2 queries instead of N."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20fa8afe678782dd", "name": "Commented-code block (5 lines) in verihome/settings.py:157", "shortDescription": {"text": "Commented-code block (5 lines) in verihome/settings.py:157"}, "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-1662ae7a5bb4e048", "name": "33 env vars used in code but missing from .env.example", "shortDescription": {"text": "33 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANALYZE`, `BIOMETRIC_DOCUMENT_PROVIDER`, `BIOMETRIC_FACIAL_PROVIDER`, `BIOMETRIC_MIN_FACE_QUALITY`, `BIOMETRIC_MIN_FACE_SIMILARITY`, `BIOMETRIC_VOICE_PROVIDER`, `CI`, `DEBUG_TESTS` + 25 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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/api_interview.py:post, users/api_interview.py:post, users/api_interview.py:post\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/api_interview.py:get_serializer_class, users/api_interview.py:get_serializer_class\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/views.py:form_valid, users/views.py:form_valid, users/views.py:form_valid, users/views.py:form_valid\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-122053f21232d80c", "name": "Near-duplicate function bodies in 14 places", "shortDescription": {"text": "Near-duplicate function bodies in 14 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/api_views.py:get_serializer_class, users/api_views.py:get, users/api_views.py:get, users/api_views.py:get\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46969939caf8120b", "name": "Near-duplicate function bodies in 9 places", "shortDescription": {"text": "Near-duplicate function bodies in 9 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/api_views.py:put, users/api_views.py:patch, users/api_views.py:put, users/api_views.py:patch\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a118a3aa3e47973", "name": "Near-duplicate function bodies in 19 places", "shortDescription": {"text": "Near-duplicate function bodies in 19 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/api_views.py:post, users/api_views.py:post, users/api_views.py:post, users/api_views.py:post\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-380b7cb95b387b9c", "name": "Near-duplicate function bodies in 11 places", "shortDescription": {"text": "Near-duplicate function bodies in 11 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/permissions.py:has_permission, users/permissions.py:has_permission, users/permissions.py:has_permission, users/permissions.py:has_permission\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76a2f6818267a9a8", "name": "Near-duplicate function bodies in 8 places", "shortDescription": {"text": "Near-duplicate function bodies in 8 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nusers/permissions.py:has_object_permission, users/permissions.py:has_object_permission, users/permissions.py:has_object_permission, users/permissions.py:has_object_permission\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f341860ab6a90be6", "name": "Near-duplicate function bodies in 17 places", "shortDescription": {"text": "Near-duplicate function bodies in 17 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nverification/tests.py:setUp, verification/tests.py:setUp, verification/tests.py:setUp, verification/tests.py:setUp\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b44b16ce25caa438", "name": "Frontend route `/app/admin/*` has no Link/navigate to it \u2014 frontend/src/components/auth/AdminProtectedRoute.tsx", "shortDescription": {"text": "Frontend route `/app/admin/*` has no Link/navigate to it \u2014 frontend/src/components/auth/AdminProtectedRoute.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6e53fa0e1aaaa5a0", "name": "Frontend route `/confirm-email/:key` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `/confirm-email/:key` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df252bd84261ac9a", "name": "Frontend route `/reset-password` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2b20833f4c1aa201", "name": "Frontend route `/tenant/invitation/:token` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `/tenant/invitation/:token` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee0994455c507a37", "name": "Frontend route `/codeudor-auth/:token` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx", "shortDescription": {"text": "Frontend route `/codeudor-auth/:token` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-966baad2d97d5310", "name": "Frontend route `/app` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `/app` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a22a981167e51e20", "name": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2b8ff836c31c5198", "name": "Frontend route `properties` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `properties` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b3f2f79a72c3ea76", "name": "Frontend route `new` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `new` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-848cde31e0e99685", "name": "Frontend route `:id` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `:id` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0faf0b9530d5e04a", "name": "Frontend route `:id/edit` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `:id/edit` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-18d8135a25ee3966", "name": "Frontend route `contracts` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `contracts` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f191b957ce8aaff5", "name": "Frontend route `:id/authenticate` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx", "shortDescription": {"text": "Frontend route `:id/authenticate` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5eb9e98698394601", "name": "Frontend route `:id/sign` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx", "shortDescription": {"text": "Frontend route `:id/sign` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e2e65d914cce2fe", "name": "Frontend route `payments` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `payments` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd3fc84d86ddd20e", "name": "Frontend route `transactions` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx", "shortDescription": {"text": "Frontend route `transactions` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7340b470774ffaa", "name": "Frontend route `messages` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `messages` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-841b3d284cd15cab", "name": "Frontend route `reply` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `reply` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c25ddddd04edc71", "name": "Frontend route `ratings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `ratings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-76d5b83102f3aca1", "name": "Frontend route `profile` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `profile` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-222ba17320953c37", "name": "Frontend route `settings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16510bc806067df6", "name": "Frontend route `resume` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `resume` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64341b4aa9fd3f12", "name": "Frontend route `resume/edit` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `resume/edit` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b6e0d487f5ef9a3", "name": "Frontend route `services` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `services` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c0ee97b0e4ef0e1b", "name": "Frontend route `service-requests` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `service-requests` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30df496459eef4fc", "name": "Frontend route `maintenance` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `maintenance` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7746bdbf84cc30f1", "name": "Frontend route `requests` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `requests` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-36e00a7354c65b8a", "name": "Frontend route `subscriptions` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `subscriptions` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5ff2231fc1381b6", "name": "Frontend route `contracts/signing-demo` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `contracts/signing-demo` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee94fd31f1b18008", "name": "Frontend route `help` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `help` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67f47dc873f481ea", "name": "Frontend route `blog` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `blog` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0c6fcb9c4e19092", "name": "Frontend route `events` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `events` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45c479d9b6bcf106", "name": "Frontend route `partners` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `partners` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67e1a163f3141135", "name": "Frontend route `careers` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `careers` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f0e3754601b41d5", "name": "Frontend route `verihome-id/onboarding` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx", "shortDescription": {"text": "Frontend route `verihome-id/onboarding` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ffccf440d44dbe50", "name": "Frontend route `agente/visitas` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx", "shortDescription": {"text": "Frontend route `agente/visitas` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b33e32db84875408", "name": "Frontend route `contracts/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `contracts/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-003a8958a4d5ea08", "name": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1c54124023fd0495", "name": "Frontend route `security` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `security` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5f94ec9470356d5", "name": "Frontend route `logs` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `logs` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8fe175ce9d4ff04", "name": "Frontend route `audit-logs` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `audit-logs` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b57dadbbe337593d", "name": "Frontend route `tickets` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `tickets` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07a9a114926ed39f", "name": "Frontend route `verification` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `verification` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-219f4f50c935abd9", "name": "Frontend route `visitas` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `visitas` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-120cf4d595daf9ee", "name": "Frontend route `visitas/:actId` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `visitas/:actId` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1058cffa250f6c8", "name": "Frontend route `verihome-id/scoring` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `verihome-id/scoring` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6186e52ee69dbba", "name": "Frontend route `verihome-id/analytics` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx", "shortDescription": {"text": "Frontend route `verihome-id/analytics` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4a9db2663330208", "name": "Frontend route `/payments` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `/payments` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4fdf1c2a55133355", "name": "Frontend route `/ratings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `/ratings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e81e54df1cb58959", "name": "Frontend route `/settings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `/settings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df4313abf0e79b3d", "name": "Frontend route `/maintenance` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx", "shortDescription": {"text": "Frontend route `/maintenance` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-04e86ae911d39ffc", "name": "Frontend route `/thread/:threadId` has no Link/navigate to it \u2014 frontend/src/routes/messages.tsx", "shortDescription": {"text": "Frontend route `/thread/:threadId` has no Link/navigate to it \u2014 frontend/src/routes/messages.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac9f94b0e51b48f2", "name": "Frontend route `/compose` has no Link/navigate to it \u2014 frontend/src/routes/messages.tsx", "shortDescription": {"text": "Frontend route `/compose` has no Link/navigate to it \u2014 frontend/src/routes/messages.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-160ecb38cf1bc7a3", "name": "Frontend route `/new` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx", "shortDescription": {"text": "Frontend route `/new` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed5e2c55a97ad74a", "name": "Frontend route `/:id` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx", "shortDescription": {"text": "Frontend route `/:id` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3b071a0dfd7633f6", "name": "Frontend route `/:id/edit` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx", "shortDescription": {"text": "Frontend route `/:id/edit` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8767179b45f0c8b0", "name": "Frontend route `contracts/*` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `contracts/*` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3c8c1b8dc36d336", "name": "Frontend route `admin/*` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx", "shortDescription": {"text": "Frontend route `admin/*` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b602178aaf30d70", "name": "Frontend route `/matched-candidates` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx", "shortDescription": {"text": "Frontend route `/matched-candidates` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c7247e3104848c2", "name": "Frontend route `/my-processes` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx", "shortDescription": {"text": "Frontend route `/my-processes` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a43755b07781ae9f", "name": "Frontend route `/renewal` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx", "shortDescription": {"text": "Frontend route `/renewal` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c0117c34637507b1", "name": "Frontend route `/:id/renewal` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx", "shortDescription": {"text": "Frontend route `/:id/renewal` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ba6d0292556c390", "name": "Frontend route `/:id/authenticate` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx", "shortDescription": {"text": "Frontend route `/:id/authenticate` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-66d0f59496736a7a", "name": "Frontend route `/:id/sign` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx", "shortDescription": {"text": "Frontend route `/:id/sign` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff49870c45c29e1e", "name": "Frontend route `/unified` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/unified` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f2302a1fb8a3fbbe", "name": "Frontend route `/landlord/dashboard` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/landlord/dashboard` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01dc3eb826633313", "name": "Frontend route `/tenant/dashboard` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/tenant/dashboard` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-87eb52fe81ecd5da", "name": "Frontend route `/invitation/:token` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/invitation/:token` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4da2f9d6565b919c", "name": "Frontend route `/landlord/*` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/landlord/*` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ccd44c62c0fc38b", "name": "Frontend route `/tenant/*` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/tenant/*` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cecd1b37e8047f5d", "name": "Frontend route `/view/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/view/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b80023b2a04052ba", "name": "Frontend route `/edit/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/edit/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9db17b79de45899", "name": "Frontend route `/create` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/create` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b0d44625f4e9225", "name": "Frontend route `/template` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/template` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4ad5c2ba30ee10e", "name": "Frontend route `/analytics` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/analytics` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9bcd0cf86c7e6434", "name": "Frontend route `/accept/:token` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/accept/:token` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5df52872d4dd236c", "name": "Frontend route `/data/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/data/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e94a6f12adfde393", "name": "Frontend route `/review/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/review/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-229dfae67ce5b63c", "name": "Frontend route `/objections/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/objections/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60af06ba4dd586ed", "name": "Frontend route `/success` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx", "shortDescription": {"text": "Frontend route `/success` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b3288025c56c40f", "name": "Django view `api_user_activity_summary` may be unauthenticated \u2014 users/user_views.py:252", "shortDescription": {"text": "Django view `api_user_activity_summary` may be unauthenticated \u2014 users/user_views.py:252"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6bbbcc8f2dcbe648", "name": "Django view `api_user_notifications` may be unauthenticated \u2014 users/user_views.py:265", "shortDescription": {"text": "Django view `api_user_notifications` may be unauthenticated \u2014 users/user_views.py:265"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a06ad109fb0ebb8d", "name": "Django view `api_admin_actions_on_user` may be unauthenticated \u2014 users/user_views.py:308", "shortDescription": {"text": "Django view `api_admin_actions_on_user` may be unauthenticated \u2014 users/user_views.py:308"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bd7e2c5aae8b3e99", "name": "Django view `api_mark_notification_read` may be unauthenticated \u2014 users/user_views.py:349", "shortDescription": {"text": "Django view `api_mark_notification_read` may be unauthenticated \u2014 users/user_views.py:349"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da97175a850bc3dd", "name": "Django view `create_interview_code` may be unauthenticated \u2014 users/api_views.py:1219", "shortDescription": {"text": "Django view `create_interview_code` may be unauthenticated \u2014 users/api_views.py:1219"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f010c64816b21e1", "name": "Django CBV `UserProfileView` lacks `LoginRequiredMixin` \u2014 users/api_views.py:88", "shortDescription": {"text": "Django CBV `UserProfileView` lacks `LoginRequiredMixin` \u2014 users/api_views.py:88"}, "fullDescription": {"text": "Class-based view defines mutating methods (post/put/delete) without inheriting `LoginRequiredMixin`. If auth is enforced via `dispatch()` override or middleware, dismiss this finding."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-801c65a7f729afe8", "name": "DRF view `InterviewCodeVerificationView` declares no `permission_classes` \u2014 users/api_views.py:821", "shortDescription": {"text": "DRF view `InterviewCodeVerificationView` declares no `permission_classes` \u2014 users/api_views.py:821"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5b870e99fb39943", "name": "Django CBV `CustomTokenObtainPairView` lacks `LoginRequiredMixin` \u2014 users/api_views.py:1369", "shortDescription": {"text": "Django CBV `CustomTokenObtainPairView` lacks `LoginRequiredMixin` \u2014 users/api_views.py:1369"}, "fullDescription": {"text": "Class-based view defines mutating methods (post/put/delete) without inheriting `LoginRequiredMixin`. If auth is enforced via `dispatch()` override or middleware, dismiss this finding."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12d8f5ecf0990b5a", "name": "Django view `delete_tenant_document` may be unauthenticated \u2014 requests/document_api_views.py:584", "shortDescription": {"text": "Django view `delete_tenant_document` may be unauthenticated \u2014 requests/document_api_views.py:584"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5944e09af0b17d6c", "name": "Django view `document_stats_for_landlord` may be unauthenticated \u2014 requests/document_api_views.py:619", "shortDescription": {"text": "Django view `document_stats_for_landlord` may be unauthenticated \u2014 requests/document_api_views.py:619"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3adc9d1674995205", "name": "Django view `document_access_history` may be unauthenticated \u2014 requests/document_api_views.py:919", "shortDescription": {"text": "Django view `document_access_history` may be unauthenticated \u2014 requests/document_api_views.py:919"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e398c432190f06d", "name": "Django CBV `StripeWebhookView` lacks `LoginRequiredMixin` \u2014 payments/views.py:363", "shortDescription": {"text": "Django CBV `StripeWebhookView` lacks `LoginRequiredMixin` \u2014 payments/views.py:363"}, "fullDescription": {"text": "Class-based view defines mutating methods (post/put/delete) without inheriting `LoginRequiredMixin`. If auth is enforced via `dispatch()` override or middleware, dismiss this finding."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d5db91acf58b2603", "name": "Django CBV `PayPalWebhookView` lacks `LoginRequiredMixin` \u2014 payments/views.py:370", "shortDescription": {"text": "Django CBV `PayPalWebhookView` lacks `LoginRequiredMixin` \u2014 payments/views.py:370"}, "fullDescription": {"text": "Class-based view defines mutating methods (post/put/delete) without inheriting `LoginRequiredMixin`. If auth is enforced via `dispatch()` override or middleware, dismiss this finding."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8916792b6660b457", "name": "DRF view `OptimizedPropertyViewSet` declares no `permission_classes` \u2014 core/optimizations.py:244", "shortDescription": {"text": "DRF view `OptimizedPropertyViewSet` declares no `permission_classes` \u2014 core/optimizations.py:244"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ea92ca1326551ad", "name": "DRF view `OptimizedContractViewSet` declares no `permission_classes` \u2014 core/optimizations.py:304", "shortDescription": {"text": "DRF view `OptimizedContractViewSet` declares no `permission_classes` \u2014 core/optimizations.py:304"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39235fcb2366df1d", "name": "DRF view `OptimizedTransactionViewSet` declares no `permission_classes` \u2014 core/optimizations.py:333", "shortDescription": {"text": "DRF view `OptimizedTransactionViewSet` declares no `permission_classes` \u2014 core/optimizations.py:333"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad9c157aa17f476b", "name": "DRF view `CachedStatsViewSet` declares no `permission_classes` \u2014 core/optimizations.py:389", "shortDescription": {"text": "DRF view `CachedStatsViewSet` declares no `permission_classes` \u2014 core/optimizations.py:389"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6bde442389f1ebcd", "name": "Django view `get_client_ip` may be unauthenticated \u2014 core/api_views.py:41", "shortDescription": {"text": "Django view `get_client_ip` may be unauthenticated \u2014 core/api_views.py:41"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3145564fb71cc80f", "name": "Django view `health_check` may be unauthenticated \u2014 core/api_views.py:689", "shortDescription": {"text": "Django view `health_check` may be unauthenticated \u2014 core/api_views.py:689"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44a0fdcc10b154c9", "name": "Django view `maintenance_health_check` may be unauthenticated \u2014 core/api_views.py:1173", "shortDescription": {"text": "Django view `maintenance_health_check` may be unauthenticated \u2014 core/api_views.py:1173"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6715b1113ac3cd21", "name": "Django view `maintenance_clear_logs` may be unauthenticated \u2014 core/api_views.py:1242", "shortDescription": {"text": "Django view `maintenance_clear_logs` may be unauthenticated \u2014 core/api_views.py:1242"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63699b21486fa51d", "name": "Django view `maintenance_clear_cache` may be unauthenticated \u2014 core/api_views.py:1259", "shortDescription": {"text": "Django view `maintenance_clear_cache` may be unauthenticated \u2014 core/api_views.py:1259"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b63ece78cc03f5ff", "name": "Django view `maintenance_clear_sessions` may be unauthenticated \u2014 core/api_views.py:1276", "shortDescription": {"text": "Django view `maintenance_clear_sessions` may be unauthenticated \u2014 core/api_views.py:1276"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64662a6cf7e8e7e5", "name": "Django view `maintenance_optimize_db` may be unauthenticated \u2014 core/api_views.py:1296", "shortDescription": {"text": "Django view `maintenance_optimize_db` may be unauthenticated \u2014 core/api_views.py:1296"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-712f8e895e9b9f5a", "name": "Django view `send_biometric_reminder` may be unauthenticated \u2014 contracts/api_views.py:3984", "shortDescription": {"text": "Django view `send_biometric_reminder` may be unauthenticated \u2014 contracts/api_views.py:3984"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a54fa802fb2358b", "name": "Django view `confirm_key_delivery` may be unauthenticated \u2014 contracts/api_views.py:4080", "shortDescription": {"text": "Django view `confirm_key_delivery` may be unauthenticated \u2014 contracts/api_views.py:4080"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71d2d3580df5974c", "name": "Django view `start_contract_execution` may be unauthenticated \u2014 contracts/api_views.py:4139", "shortDescription": {"text": "Django view `start_contract_execution` may be unauthenticated \u2014 contracts/api_views.py:4139"}, "fullDescription": {"text": "Function-view with `request` parameter has no `@login_required` or equivalent auth decorator within 5 lines above. If auth is enforced by middleware (`AUTHENTICATION_BACKENDS`), this is a false positive \u2014 dismiss with reason `by_design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a686f01b839cb5ab", "name": "DRF view `StartBiometricAuthenticationAPIView` declares no `permission_classes` \u2014 contracts/api_views.py:1517", "shortDescription": {"text": "DRF view `StartBiometricAuthenticationAPIView` declares no `permission_classes` \u2014 contracts/api_views.py:1517"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68140d8664d62d23", "name": "DRF view `PropertyViewSet` declares no `permission_classes` \u2014 properties/api_views.py:60", "shortDescription": {"text": "DRF view `PropertyViewSet` declares no `permission_classes` \u2014 properties/api_views.py:60"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6f9b0b271b11e0e", "name": "DRF view `OptimizedPropertyViewSet` declares no `permission_classes` \u2014 properties/optimized_views.py:57", "shortDescription": {"text": "DRF view `OptimizedPropertyViewSet` declares no `permission_classes` \u2014 properties/optimized_views.py:57"}, "fullDescription": {"text": "DRF defaults to AllowAny when `permission_classes` is unset, exposing the endpoint publicly. Add `permission_classes = [IsAuthenticated]` (or stricter) at class level, or set `DEFAULT_PERMISSION_CLASSES` in settings."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-252b9f81a8abdf1d", "name": "Dangling fetch: GET http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:18)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:18)"}, "fullDescription": {"text": "`frontend/scripts/testing/quick_test.js:18` calls `GET http://localhost:8000/api/properties/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:8000/api/properties`\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-6e08fc9e7706e503", "name": "Dangling fetch: POST http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:51)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:51)"}, "fullDescription": {"text": "`frontend/scripts/testing/quick_test.js:51` calls `POST http://localhost:8000/api/properties/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:8000/api/properties`\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-81f6bb05cb60f0df", "name": "Dangling fetch: GET http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:65)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:65)"}, "fullDescription": {"text": "`frontend/scripts/testing/quick_test.js:65` calls `GET http://localhost:8000/api/properties/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:8000/api/properties`\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-aad4133012419207", "name": "Dangling fetch: POST /api/v1/users/${candidateId}/evaluation/ (frontend/src/components/requests/CandidateEvaluationView.", "shortDescription": {"text": "Dangling fetch: POST /api/v1/users/${candidateId}/evaluation/ (frontend/src/components/requests/CandidateEvaluationView.tsx:234)"}, "fullDescription": {"text": "`frontend/src/components/requests/CandidateEvaluationView.tsx:234` calls `POST /api/v1/users/${candidateId}/evaluation/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/users/<p>/evaluation`\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-164bf1d259de0afa", "name": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/payments/PaymentsErrorBoundary.tsx:90)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/payments/PaymentsErrorBoundary.tsx:90)"}, "fullDescription": {"text": "`frontend/src/components/payments/PaymentsErrorBoundary.tsx:90` calls `POST /api/v1/core/log-error/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/core/log-error`\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-30b95236d1b85164", "name": "Dangling fetch: POST /api/v1/contracts/workflow-action/ (frontend/src/components/contracts/LandlordContractForm.tsx:1033", "shortDescription": {"text": "Dangling fetch: POST /api/v1/contracts/workflow-action/ (frontend/src/components/contracts/LandlordContractForm.tsx:1033)"}, "fullDescription": {"text": "`frontend/src/components/contracts/LandlordContractForm.tsx:1033` calls `POST /api/v1/contracts/workflow-action/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/contracts/workflow-action`\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-ad9581ca2e7f69e1", "name": "Dangling fetch: GET https://api.ipify.org?format=json (frontend/src/components/contracts/BiometricContractSigning.tsx:30", "shortDescription": {"text": "Dangling fetch: GET https://api.ipify.org?format=json (frontend/src/components/contracts/BiometricContractSigning.tsx:309)"}, "fullDescription": {"text": "`frontend/src/components/contracts/BiometricContractSigning.tsx:309` calls `GET https://api.ipify.org?format=json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.ipify.org`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa6d3f4ac5bc6809", "name": "Dangling fetch: PATCH /api/v1/requests/api/documents/process/${processId}/checklist/ (frontend/src/components/contracts/", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/requests/api/documents/process/${processId}/checklist/ (frontend/src/components/contracts/LandlordDocumentReview.tsx:122)"}, "fullDescription": {"text": "`frontend/src/components/contracts/LandlordDocumentReview.tsx:122` calls `PATCH /api/v1/requests/api/documents/process/${processId}/checklist/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/requests/api/documents/process/<p>/checklist`\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-d49d079350d04d76", "name": "Dangling fetch: GET /api/v1/contracts/${contractId}/additional-clauses/ (frontend/src/components/contracts/ContractClaus", "shortDescription": {"text": "Dangling fetch: GET /api/v1/contracts/${contractId}/additional-clauses/ (frontend/src/components/contracts/ContractClausesEditor.tsx:89)"}, "fullDescription": {"text": "`frontend/src/components/contracts/ContractClausesEditor.tsx:89` calls `GET /api/v1/contracts/${contractId}/additional-clauses/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/contracts/<p>/additional-clauses`\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-b4b932ed5f31b3f8", "name": "Dangling fetch: DELETE /api/v1/contracts/${contractId}/additional-clauses/${clause.id}/ (frontend/src/components/contrac", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/contracts/${contractId}/additional-clauses/${clause.id}/ (frontend/src/components/contracts/ContractClausesEditor.tsx:141)"}, "fullDescription": {"text": "`frontend/src/components/contracts/ContractClausesEditor.tsx:141` calls `DELETE /api/v1/contracts/${contractId}/additional-clauses/${clause.id}/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/contracts/<p>/additional-clauses/<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-e773aee4938093c1", "name": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/contracts/ContractsErrorBoundary.tsx:92)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/contracts/ContractsErrorBoundary.tsx:92)"}, "fullDescription": {"text": "`frontend/src/components/contracts/ContractsErrorBoundary.tsx:92` calls `POST /api/v1/core/log-error/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/core/log-error`\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-5165f720a1b6903f", "name": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/ratings/RatingsErrorBoundary.tsx:90)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/ratings/RatingsErrorBoundary.tsx:90)"}, "fullDescription": {"text": "`frontend/src/components/ratings/RatingsErrorBoundary.tsx:90` calls `POST /api/v1/core/log-error/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/core/log-error`\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-ba907a190e09803d", "name": "Dangling fetch: GET https://nominatim.openstreetmap.org/search (frontend/src/components/properties/PropertyForm.tsx:458)", "shortDescription": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search (frontend/src/components/properties/PropertyForm.tsx:458)"}, "fullDescription": {"text": "`frontend/src/components/properties/PropertyForm.tsx:458` calls `GET https://nominatim.openstreetmap.org/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/nominatim.openstreetmap.org/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c69ee318b9266ca", "name": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(addressInput)}.json (frontend", "shortDescription": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(addressInput)}.json (frontend/src/components/properties/PropertyForm.tsx:512)"}, "fullDescription": {"text": "`frontend/src/components/properties/PropertyForm.tsx:512` calls `GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(addressInput)}.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.mapbox.com/geocoding/v5/mapbox.places/<p>.json`\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-f0bc9cc6321dcd1f", "name": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${lng},${lat}.json (frontend/src/components/proper", "shortDescription": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${lng},${lat}.json (frontend/src/components/properties/PropertyForm.tsx:686)"}, "fullDescription": {"text": "`frontend/src/components/properties/PropertyForm.tsx:686` calls `GET https://api.mapbox.com/geocoding/v5/mapbox.places/${lng},${lat}.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.mapbox.com/geocoding/v5/mapbox.places/<p>,/<p>.json`\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-0cb8503c8ec88bf9", "name": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(query)}.json (frontend/src/co", "shortDescription": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(query)}.json (frontend/src/components/properties/PropertyForm.tsx:775)"}, "fullDescription": {"text": "`frontend/src/components/properties/PropertyForm.tsx:775` calls `GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(query)}.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.mapbox.com/geocoding/v5/mapbox.places/<p>.json`\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-30fe3dca02c0953e", "name": "Dangling fetch: POST /api/v1/users/auth/resend-confirmation/ (frontend/src/pages/auth/EmailVerification.tsx:31)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/users/auth/resend-confirmation/ (frontend/src/pages/auth/EmailVerification.tsx:31)"}, "fullDescription": {"text": "`frontend/src/pages/auth/EmailVerification.tsx:31` calls `POST /api/v1/users/auth/resend-confirmation/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/users/auth/resend-confirmation`\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-8acd4b9851ee387b", "name": "Dangling fetch: POST /api/v1/users/auth/validate-interview-code/ (frontend/src/pages/auth/RegisterWithCode.tsx:173)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/users/auth/validate-interview-code/ (frontend/src/pages/auth/RegisterWithCode.tsx:173)"}, "fullDescription": {"text": "`frontend/src/pages/auth/RegisterWithCode.tsx:173` calls `POST /api/v1/users/auth/validate-interview-code/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/users/auth/validate-interview-code`\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-0a88857e86af8d33", "name": "Dangling fetch: POST /api/v1/push/subscribe/ (frontend/src/hooks/useServiceWorker.ts:267)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/push/subscribe/ (frontend/src/hooks/useServiceWorker.ts:267)"}, "fullDescription": {"text": "`frontend/src/hooks/useServiceWorker.ts:267` calls `POST /api/v1/push/subscribe/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/push/subscribe`\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-a0e957969a9ac9c0", "name": "Dangling fetch: POST /api/v1/push/unsubscribe/ (frontend/src/hooks/useServiceWorker.ts:291)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/push/unsubscribe/ (frontend/src/hooks/useServiceWorker.ts:291)"}, "fullDescription": {"text": "`frontend/src/hooks/useServiceWorker.ts:291` calls `POST /api/v1/push/unsubscribe/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/push/unsubscribe`\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-5358b81ef05aabdc", "name": "Dangling fetch: HEAD /api/v1/users/auth/login/ (frontend/src/services/loggingService.ts:619)", "shortDescription": {"text": "Dangling fetch: HEAD /api/v1/users/auth/login/ (frontend/src/services/loggingService.ts:619)"}, "fullDescription": {"text": "`frontend/src/services/loggingService.ts:619` calls `HEAD /api/v1/users/auth/login/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/users/auth/login`\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-3b117fecf3d6ee90", "name": "Unused endpoint: ANY /usuarios/registro/seleccionar/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/registro/seleccionar/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/registro/seleccionar/` 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-c13f96fce92e8cd9", "name": "Unused endpoint: ANY /usuarios/registro/entrevista/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/registro/entrevista/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/registro/entrevista/` 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-fb9fcd34d47eee11", "name": "Unused endpoint: ANY /usuarios/perfil/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/perfil/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/perfil/` 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-fb986a19acdd6d84", "name": "Unused endpoint: ANY /usuarios/perfil/editar/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/perfil/editar/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/perfil/editar/` 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-d8c7f6adc0804809", "name": "Unused endpoint: ANY /usuarios/configuracion/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/configuracion/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/configuracion/` 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-d40613c20d953748", "name": "Unused endpoint: ANY /usuarios/hoja-vida/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/hoja-vida/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/hoja-vida/` 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-d546f49202c03b80", "name": "Unused endpoint: ANY /usuarios/hoja-vida/editar/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/hoja-vida/editar/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/hoja-vida/editar/` 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-6080d16bf9a32df0", "name": "Unused endpoint: ANY /usuarios/proveedores-servicios/", "shortDescription": {"text": "Unused endpoint: ANY /usuarios/proveedores-servicios/"}, "fullDescription": {"text": "`users/urls.py` declares `ANY /usuarios/proveedores-servicios/` 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-d4122ff290b2b608", "name": "Unused endpoint: ANY /activity/", "shortDescription": {"text": "Unused endpoint: ANY /activity/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /activity/` 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-b05cd6195cd8ac52", "name": "Unused endpoint: ANY /activity/history/", "shortDescription": {"text": "Unused endpoint: ANY /activity/history/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /activity/history/` 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-d36c3f9004bc12cb", "name": "Unused endpoint: ANY /activity/<int:activity_id>/", "shortDescription": {"text": "Unused endpoint: ANY /activity/<int:activity_id>/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /activity/<int:activity_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-933d54fc711c54e9", "name": "Unused endpoint: ANY /admin-actions/", "shortDescription": {"text": "Unused endpoint: ANY /admin-actions/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /admin-actions/` 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-9ad4e26e33e376fe", "name": "Unused endpoint: ANY /admin-actions/<int:action_id>/", "shortDescription": {"text": "Unused endpoint: ANY /admin-actions/<int:action_id>/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /admin-actions/<int:action_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-53ac11e6a6fe53c6", "name": "Unused endpoint: ANY /notifications/", "shortDescription": {"text": "Unused endpoint: ANY /notifications/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /notifications/` 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-c79b660a2cfe0f4a", "name": "Unused endpoint: ANY /notifications/<int:notification_id>/read/", "shortDescription": {"text": "Unused endpoint: ANY /notifications/<int:notification_id>/read/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /notifications/<int:notification_id>/read/` 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-425d5f3ff5c1b0a2", "name": "Unused endpoint: ANY /notifications/read-all/", "shortDescription": {"text": "Unused endpoint: ANY /notifications/read-all/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /notifications/read-all/` 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-30bfaef908309621", "name": "Unused endpoint: ANY /impersonation-history/", "shortDescription": {"text": "Unused endpoint: ANY /impersonation-history/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /impersonation-history/` 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-05f1e498b5830810", "name": "Unused endpoint: ANY /api/activity-summary/", "shortDescription": {"text": "Unused endpoint: ANY /api/activity-summary/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /api/activity-summary/` 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-e9a17834978cef33", "name": "Unused endpoint: ANY /api/notifications/", "shortDescription": {"text": "Unused endpoint: ANY /api/notifications/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /api/notifications/` 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-9f7b3d2a7c94cd81", "name": "Unused endpoint: ANY /api/admin-actions/", "shortDescription": {"text": "Unused endpoint: ANY /api/admin-actions/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /api/admin-actions/` 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-f73b32453d4ad2ba", "name": "Unused endpoint: ANY /api/notifications/<int:notification_id>/read/", "shortDescription": {"text": "Unused endpoint: ANY /api/notifications/<int:notification_id>/read/"}, "fullDescription": {"text": "`users/user_urls.py` declares `ANY /api/notifications/<int:notification_id>/read/` 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-d949087c1747c46e", "name": "Unused endpoint: ANY /interview/validate-interview-code/", "shortDescription": {"text": "Unused endpoint: ANY /interview/validate-interview-code/"}, "fullDescription": {"text": "`users/urls_interview.py` declares `ANY /interview/validate-interview-code/` 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-c4b87e9ebeab06b1", "name": "Unused endpoint: ANY /interview/contact/", "shortDescription": {"text": "Unused endpoint: ANY /interview/contact/"}, "fullDescription": {"text": "`users/urls_interview.py` declares `ANY /interview/contact/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db06572c075f679f", "name": "Unused endpoint: ANY /interview/register-with-code/", "shortDescription": {"text": "Unused endpoint: ANY /interview/register-with-code/"}, "fullDescription": {"text": "`users/urls_interview.py` declares `ANY /interview/register-with-code/` 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-36e1e761039e9553", "name": "Unused endpoint: ANY /interview/admin/", "shortDescription": {"text": "Unused endpoint: ANY /interview/admin/"}, "fullDescription": {"text": "`users/urls_interview.py` declares `ANY /interview/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-23200623d0053e2c", "name": "Unused endpoint: ANY /interview/codes", "shortDescription": {"text": "Unused endpoint: ANY /interview/codes"}, "fullDescription": {"text": "`users/urls_interview.py` declares `ANY /interview/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-6f3e025ba02c54c3", "name": "Unused endpoint: ANY /interview/contact-requests", "shortDescription": {"text": "Unused endpoint: ANY /interview/contact-requests"}, "fullDescription": {"text": "`users/urls_interview.py` declares `ANY /interview/contact-requests` 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-6f112f8c352002d5", "name": "Unused endpoint: ANY /users/activity-logs/stats/", "shortDescription": {"text": "Unused endpoint: ANY /users/activity-logs/stats/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/activity-logs/stats/` 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-7235087f79fb4aec", "name": "Unused endpoint: ANY /users/activity-logs/create/", "shortDescription": {"text": "Unused endpoint: ANY /users/activity-logs/create/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/activity-logs/create/` 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-85b521c74e581139", "name": "Unused endpoint: ANY /users/activity-logs/types/", "shortDescription": {"text": "Unused endpoint: ANY /users/activity-logs/types/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/activity-logs/types/` 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-31456975f08f322f", "name": "Unused endpoint: ANY /users/", "shortDescription": {"text": "Unused endpoint: ANY /users/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /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-74cfaa52eb54e5a7", "name": "Unused endpoint: ANY /users/auth/login/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/login/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/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-866632ed487efa9f", "name": "Unused endpoint: ANY /users/auth/refresh/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/refresh/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/refresh/` 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-e47738b52c45286a", "name": "Unused endpoint: ANY /users/auth/me/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/me/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/me/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6839ad52cff86c3", "name": "Unused endpoint: ANY /users/auth/logout/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/logout/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/logout/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e8d3af8fe488124", "name": "Unused endpoint: ANY /users/auth/confirm-email/<path:key>/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/confirm-email/<path:key>/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/confirm-email/<path:key>/` 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-2dc1e27d9c26bdef", "name": "Unused endpoint: ANY /users/auth/resend-confirmation/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/resend-confirmation/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/resend-confirmation/` 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-f96feaab3f9ee55d", "name": "Unused endpoint: ANY /users/interview/", "shortDescription": {"text": "Unused endpoint: ANY /users/interview/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/interview/` 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-7552f4d8add96754", "name": "Unused endpoint: ANY /users/auth/register/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/register/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/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-9e3c1a3f271e47b9", "name": "Unused endpoint: ANY /users/auth/register-with-interview/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/register-with-interview/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/register-with-interview/` 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-6c2583f74fb04793", "name": "Unused endpoint: ANY /users/auth/register-with-code/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/register-with-code/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/register-with-code/` 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-1e3937b77555dbe2", "name": "Unused endpoint: ANY /users/auth/validate-interview-code/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/validate-interview-code/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/validate-interview-code/` 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-60e89f3c03e0f2cc", "name": "Unused endpoint: ANY /users/auth/change-password/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/change-password/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/change-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-18e020aede51116d", "name": "Unused endpoint: ANY /users/auth/forgot-password/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/forgot-password/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/forgot-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-48f7b0e71252a8a1", "name": "Unused endpoint: ANY /users/auth/reset-password/", "shortDescription": {"text": "Unused endpoint: ANY /users/auth/reset-password/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/auth/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-892047e6dd493ca2", "name": "Unused endpoint: ANY /users/contact/", "shortDescription": {"text": "Unused endpoint: ANY /users/contact/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/contact/` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73e6ebbbecc03460", "name": "Unused endpoint: ANY /users/verification/request/", "shortDescription": {"text": "Unused endpoint: ANY /users/verification/request/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/verification/request/` 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-25c26454ea89fe26", "name": "Unused endpoint: ANY /users/verification/upload-documents/", "shortDescription": {"text": "Unused endpoint: ANY /users/verification/upload-documents/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/verification/upload-documents/` 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-78332954a6a678bd", "name": "Unused endpoint: ANY /users/verification/status/", "shortDescription": {"text": "Unused endpoint: ANY /users/verification/status/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/verification/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-5514ddbcb51f2864", "name": "Unused endpoint: ANY /users/search/", "shortDescription": {"text": "Unused endpoint: ANY /users/search/"}, "fullDescription": {"text": "`users/api_urls.py` declares `ANY /users/search/` 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/22793"}, "properties": {"repository": "wilsonA2000/NUEVOS-PROYECTOS", "repoUrl": "https://github.com/wilsonA2000/NUEVOS-PROYECTOS", "branch": "main"}, "results": [{"ruleId": "scanner-852d18b1a00d272e", "level": "note", "message": {"text": "Possibly dead Python function: lookups"}, "properties": {"repobilityId": "f0338bf3f2b1c2db", "scanner": "scanner-primary", "fingerprint": "852d18b1a00d272e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/admin_interview.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d3474b453ab561f0", "level": "note", "message": {"text": "Possibly dead Python function: queryset"}, "properties": {"repobilityId": "e400ab72cf7be975", "scanner": "scanner-primary", "fingerprint": "d3474b453ab561f0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/admin_interview.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6fd724859a12c32c", "level": "note", "message": {"text": "Possibly dead Python function: rating_display"}, "properties": {"repobilityId": "b013552d4fceacf8", "scanner": "scanner-primary", "fingerprint": "6fd724859a12c32c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/admin_interview.py:72"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-24bff5187281b166", "level": "note", "message": {"text": "Possibly dead Python function: is_open_for_signup"}, "properties": {"repobilityId": "8f12d862cb8d90c7", "scanner": "scanner-primary", "fingerprint": "24bff5187281b166", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/adapters.py:49"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45354bf011b58af8", "level": "note", "message": {"text": "Possibly dead Python function: send_interview_code_email"}, "properties": {"repobilityId": "c3092001c354e5a2", "scanner": "scanner-primary", "fingerprint": "45354bf011b58af8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/utils.py:84"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a219c8ff1fc7c3f", "level": "note", "message": {"text": "Possibly dead Python function: send_interview_notification_to_admin"}, "properties": {"repobilityId": "4f2e25502365d229", "scanner": "scanner-primary", "fingerprint": "9a219c8ff1fc7c3f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/utils.py:115"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b335902432710fc", "level": "note", "message": {"text": "Possibly dead Python function: validate_interview_code"}, "properties": {"repobilityId": "f6648163effc6229", "scanner": "scanner-primary", "fingerprint": "1b335902432710fc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/utils.py:149"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e712cb454a96463", "level": "note", "message": {"text": "Possibly dead Python function: cleanup_expired_codes"}, "properties": {"repobilityId": "fa7aeb52c25650d5", "scanner": "scanner-primary", "fingerprint": "6e712cb454a96463", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/utils.py:209"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ce72ff00140a782", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/vite.config.ts:423"}, "properties": {"repobilityId": "d541752fb399d970", "scanner": "scanner-primary", "fingerprint": "8ce72ff00140a782", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ccfd917d577e575a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/cypress.config.ts:19"}, "properties": {"repobilityId": "22fece724d39792b", "scanner": "scanner-primary", "fingerprint": "ccfd917d577e575a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9059dde1a6d7fc76", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/testing/verify-contract-fixes.js:27"}, "properties": {"repobilityId": "8f3b5f08632f3183", "scanner": "scanner-primary", "fingerprint": "9059dde1a6d7fc76", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9249ec306c1d2f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/testing/quick_test.js:4"}, "properties": {"repobilityId": "e9b590667085c2ec", "scanner": "scanner-primary", "fingerprint": "c9249ec306c1d2f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b9b8d582ef71c3f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/clear-browser-cache.js:28"}, "properties": {"repobilityId": "9cc67d31526a9bd0", "scanner": "scanner-primary", "fingerprint": "8b9b8d582ef71c3f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05b3e2f973c45d8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-cache-clear.js:4"}, "properties": {"repobilityId": "d230a55a5b2c6446", "scanner": "scanner-primary", "fingerprint": "05b3e2f973c45d8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8e76d2b30b76814", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-clear-cache.js:4"}, "properties": {"repobilityId": "b418b59fac031e53", "scanner": "scanner-primary", "fingerprint": "c8e76d2b30b76814", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65eab67bfd20b89f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/cleanup-console-logs.js:7"}, "properties": {"repobilityId": "d5c5ff42bf7ae761", "scanner": "scanner-primary", "fingerprint": "65eab67bfd20b89f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fea847ae5944d7ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/nuclear-cache-clear.js:16"}, "properties": {"repobilityId": "f4ac0a2ccf387adb", "scanner": "scanner-primary", "fingerprint": "fea847ae5944d7ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-889974c39cf50d85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/cache/force-cache-clear-complete.js:4"}, "properties": {"repobilityId": "d8742ffd3895cbb9", "scanner": "scanner-primary", "fingerprint": "889974c39cf50d85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d13fcf70a4818452", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/force-reload-contracts.js:28"}, "properties": {"repobilityId": "5546fd1133b65b4a", "scanner": "scanner-primary", "fingerprint": "d13fcf70a4818452", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eae72cac79b17018", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/fix-contract-errors.js:14"}, "properties": {"repobilityId": "f4c38e19e8288302", "scanner": "scanner-primary", "fingerprint": "eae72cac79b17018", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74a62d3b87e1e558", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/complete-contract-fix.js:31"}, "properties": {"repobilityId": "8e70dd5534260f5d", "scanner": "scanner-primary", "fingerprint": "74a62d3b87e1e558", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b07b443d0339498", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/scripts/fixes/fix-rollup.js:7"}, "properties": {"repobilityId": "1a7e100d3fe1bcd3", "scanner": "scanner-primary", "fingerprint": "4b07b443d0339498", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-02e25675633d5573", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/global-setup-e2e.ts:44"}, "properties": {"repobilityId": "7302cf163930dc9c", "scanner": "scanner-primary", "fingerprint": "02e25675633d5573", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-512e6581352aeaf2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/tests/contract-workflow.spec.ts:84"}, "properties": {"repobilityId": "52bf4e40d4435726", "scanner": "scanner-primary", "fingerprint": "512e6581352aeaf2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b82218786f5b19a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/tests/multi-user-contract-signing.spec.ts:290"}, "properties": {"repobilityId": "720195dde35bb292", "scanner": "scanner-primary", "fingerprint": "b82218786f5b19a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76a1ee507ec18f45", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/playwright/helpers/multi-user-logger.ts:126"}, "properties": {"repobilityId": "1a313c99a0da140e", "scanner": "scanner-primary", "fingerprint": "76a1ee507ec18f45", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba15f149d25def31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/utils/performanceMonitor.ts:262"}, "properties": {"repobilityId": "58c903a8c52ebe62", "scanner": "scanner-primary", "fingerprint": "ba15f149d25def31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29549be0110567e8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/ErrorBoundary.tsx:134"}, "properties": {"repobilityId": "1c6a9bc0becbfc0d", "scanner": "scanner-primary", "fingerprint": "29549be0110567e8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-978d56ebb3d544e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/testSuiteRunner.ts:106"}, "properties": {"repobilityId": "5bd35250adabcc49", "scanner": "scanner-primary", "fingerprint": "978d56ebb3d544e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45868da652c10dbb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/integrationSetup.ts:479"}, "properties": {"repobilityId": "9ef3e463609665e2", "scanner": "scanner-primary", "fingerprint": "45868da652c10dbb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af0867aa2d5a3523", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/test-utils/integrationTestRunner.ts:134"}, "properties": {"repobilityId": "89fadace0e5a5e30", "scanner": "scanner-primary", "fingerprint": "af0867aa2d5a3523", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b28ebe362b601193", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/maintenance/force_refresh_all.js:2"}, "properties": {"repobilityId": "415e96bcb3a170f2", "scanner": "scanner-primary", "fingerprint": "b28ebe362b601193", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60427b03771411b6", "level": "warning", "message": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "properties": {"repobilityId": "735c01d8531dfd2c", "scanner": "scanner-primary", "fingerprint": "60427b03771411b6", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-bfb1caa8d76b37a1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine"}, "properties": {"repobilityId": "8d1e610f0c3c24d5", "scanner": "scanner-primary", "fingerprint": "bfb1caa8d76b37a1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b048d166901fd868", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "81ddc774b72d3646", "scanner": "scanner-primary", "fingerprint": "b048d166901fd868", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 13}}}]}, {"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-25070323bd5a5e47", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/cache/cleanup-console-logs.js:5"}, "properties": {"repobilityId": "a2ac1af0ef90a59c", "scanner": "scanner-primary", "fingerprint": "25070323bd5a5e47", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/scripts/cache/cleanup-console-logs.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-16245497c9d13506", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/fixes/complete-contract-fix.js:11"}, "properties": {"repobilityId": "cdb7977eb4c7b665", "scanner": "scanner-primary", "fingerprint": "16245497c9d13506", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/scripts/fixes/complete-contract-fix.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-9d66caaac073bb5c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/fixes/fix-rollup.js:5"}, "properties": {"repobilityId": "38c126a40ff74131", "scanner": "scanner-primary", "fingerprint": "9d66caaac073bb5c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/scripts/fixes/fix-rollup.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-93d63179cf75df2f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/public/clear-cache.html:123"}, "properties": {"repobilityId": "3503f92bded9f4d5", "scanner": "scanner-primary", "fingerprint": "93d63179cf75df2f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/public/clear-cache.html"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-d6319a5540f02a6f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/playwright/global-setup-e2e.ts:11"}, "properties": {"repobilityId": "090241438c96e125", "scanner": "scanner-primary", "fingerprint": "d6319a5540f02a6f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/playwright/global-setup-e2e.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-c7e5f17d76687d75", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/playwright/helpers/multi-user-logger.ts:17"}, "properties": {"repobilityId": "5c0e03d62f38d936", "scanner": "scanner-primary", "fingerprint": "c7e5f17d76687d75", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/playwright/helpers/multi-user-logger.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-818938f74f6ffe42", "level": "error", "message": {"text": "Possible secret in frontend/playwright/helpers/mock-api.ts"}, "properties": {"repobilityId": "deb6e7d836990786", "scanner": "scanner-primary", "fingerprint": "818938f74f6ffe42", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/playwright/helpers/mock-api.ts"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-818938f74f6ffe42", "level": "error", "message": {"text": "Possible secret in frontend/playwright/helpers/mock-api.ts"}, "properties": {"repobilityId": "deb6e7d836990786", "scanner": "scanner-primary", "fingerprint": "818938f74f6ffe42", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/playwright/helpers/mock-api.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-818938f74f6ffe42", "level": "error", "message": {"text": "Possible secret in frontend/playwright/helpers/mock-api.ts"}, "properties": {"repobilityId": "deb6e7d836990786", "scanner": "scanner-primary", "fingerprint": "818938f74f6ffe42", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/playwright/helpers/mock-api.ts"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-583c480963f9b370", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/ErrorBoundary.tsx:134"}, "properties": {"repobilityId": "1893483d7ce4272e", "scanner": "scanner-primary", "fingerprint": "583c480963f9b370", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/ErrorBoundary.tsx"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-26487f416ed76ae5", "level": "note", "message": {"text": "Insecure pattern 'document_write' in frontend/src/components/ExportButton.tsx:214"}, "properties": {"repobilityId": "da1b97d14237dca8", "scanner": "scanner-primary", "fingerprint": "26487f416ed76ae5", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/ExportButton.tsx"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-8e8692a71aa40c9e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/src/test-utils/testSuiteRunner.ts:7"}, "properties": {"repobilityId": "f3b4461efec6ac8a", "scanner": "scanner-primary", "fingerprint": "8e8692a71aa40c9e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/test-utils/testSuiteRunner.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-c0d76f50d0dafdaf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/src/test-utils/integrationTestRunner.ts:7"}, "properties": {"repobilityId": "62dc1ea3e2d23354", "scanner": "scanner-primary", "fingerprint": "c0d76f50d0dafdaf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/test-utils/integrationTestRunner.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-0f5836e3cf2c45da", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/hooks/__tests__/useUser.test.ts:54"}, "properties": {"repobilityId": "bfa08ab139480492", "scanner": "scanner-primary", "fingerprint": "0f5836e3cf2c45da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/hooks/__tests__/useUser.test.ts"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-8cec428e72c012cb", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/services/authService.ts:141"}, "properties": {"repobilityId": "7beb2e5fbae97169", "scanner": "scanner-primary", "fingerprint": "8cec428e72c012cb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/services/authService.ts"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-ef66b9e1fe6a0955", "level": "error", "message": {"text": "Possible secret in scripts/testing/seed_e2e_multiuser.py"}, "properties": {"repobilityId": "5ce9b6b06a30498a", "scanner": "scanner-primary", "fingerprint": "ef66b9e1fe6a0955", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/testing/seed_e2e_multiuser.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-ef66b9e1fe6a0955", "level": "error", "message": {"text": "Possible secret in scripts/testing/seed_e2e_multiuser.py"}, "properties": {"repobilityId": "5ce9b6b06a30498a", "scanner": "scanner-primary", "fingerprint": "ef66b9e1fe6a0955", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/testing/seed_e2e_multiuser.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-a49cef5b6f384ec4", "level": "error", "message": {"text": "Possible secret in scripts/debug/diagnose_auth_issue.py"}, "properties": {"repobilityId": "13089763125e468c", "scanner": "scanner-primary", "fingerprint": "a49cef5b6f384ec4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/debug/diagnose_auth_issue.py"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-f017e9c4ddc8398e", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in scripts/debug/diagnose_auth_issue.py:90"}, "properties": {"repobilityId": "c4bd12c12823f62a", "scanner": "scanner-primary", "fingerprint": "f017e9c4ddc8398e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/debug/diagnose_auth_issue.py"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-ee2aab862ac6e688", "level": "error", "message": {"text": "Possible secret in payments/tests_models.py"}, "properties": {"repobilityId": "ab2115ae81bc7572", "scanner": "scanner-primary", "fingerprint": "ee2aab862ac6e688", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payments/tests_models.py"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-1c0a1f2219f369bb", "level": "error", "message": {"text": "Possible secret in payments/tests_api.py"}, "properties": {"repobilityId": "28c0711ad5fe1cdc", "scanner": "scanner-primary", "fingerprint": "1c0a1f2219f369bb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payments/tests_api.py"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-d5bbd33db9ebfa33", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in properties/serializers.py:355"}, "properties": {"repobilityId": "4395b0c202b9e5c9", "scanner": "scanner-primary", "fingerprint": "d5bbd33db9ebfa33", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "properties/serializers.py"}, "region": {"startLine": 355}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "247bb11baae34b61", "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": 50}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f5b6a561cfd8801", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2da2b5dc0d69cebc", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f5b6a561cfd8801", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2da2b5dc0d69cebc", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fd76fb0265b6e16d", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f5b6a561cfd8801", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c412dcef98f85b1f", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 209}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 247}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f5b6a561cfd8801", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 250}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 272}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f5b6a561cfd8801", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 275}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2da2b5dc0d69cebc", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 285}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 334}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f5b6a561cfd8801", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 337}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1f37420fcbc4160e", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 410}}}]}, {"ruleId": "scanner-e6670f32b5bd9075", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f5b6a561cfd8801", "scanner": "scanner-primary", "fingerprint": "e6670f32b5bd9075", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci-cd.yml"}, "region": {"startLine": 413}}}]}, {"ruleId": "scanner-c0840d07864313e3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "40147a52cdfcf13f", "scanner": "scanner-primary", "fingerprint": "c0840d07864313e3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/lighthouse.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-822baa44644a3cf2", "level": "note", "message": {"text": "Very large file: frontend/src/components/contracts/LandlordContractForm.tsx (5162 lines)"}, "properties": {"repobilityId": "6556fd35faeff8b0", "scanner": "scanner-primary", "fingerprint": "822baa44644a3cf2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-998e0b464fc73efd", "level": "note", "message": {"text": "Very large file: frontend/src/components/contracts/TenantContractsDashboard.tsx (1903 lines)"}, "properties": {"repobilityId": "baa4f4da8a77936b", "scanner": "scanner-primary", "fingerprint": "998e0b464fc73efd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-38f3e1c79aaf4ed5", "level": "note", "message": {"text": "Very large file: frontend/src/components/contracts/EnhancedTenantDocumentUpload.tsx (1781 lines)"}, "properties": {"repobilityId": "9fae80e287bab86c", "scanner": "scanner-primary", "fingerprint": "38f3e1c79aaf4ed5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-124a89e2b4f9b96c", "level": "note", "message": {"text": "Very large file: frontend/src/components/contracts/ContractDraftEditor.tsx (1540 lines)"}, "properties": {"repobilityId": "03a382e0f2861cde", "scanner": "scanner-primary", "fingerprint": "124a89e2b4f9b96c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-49be7a3327dbee98", "level": "note", "message": {"text": "Very large file: frontend/src/components/contracts/TenantDataForm.tsx (1406 lines)"}, "properties": {"repobilityId": "d69d3638cffa40d6", "scanner": "scanner-primary", "fingerprint": "49be7a3327dbee98", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d9a602209152bdf", "level": "note", "message": {"text": "Very large file: frontend/src/components/contracts/MatchedCandidatesView.tsx (2092 lines)"}, "properties": {"repobilityId": "3d43eb314e597355", "scanner": "scanner-primary", "fingerprint": "4d9a602209152bdf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3921dc37cacb066e", "level": "note", "message": {"text": "Very large file: frontend/src/components/contracts/TenantContractView.tsx (1481 lines)"}, "properties": {"repobilityId": "14fe88a0b2e49bc5", "scanner": "scanner-primary", "fingerprint": "3921dc37cacb066e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea0219ec6145a783", "level": "note", "message": {"text": "Very large file: frontend/src/components/properties/PropertyDetail.tsx (1919 lines)"}, "properties": {"repobilityId": "2d03289e288fb824", "scanner": "scanner-primary", "fingerprint": "ea0219ec6145a783", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-79ceb7131a1eba56", "level": "note", "message": {"text": "Very large file: frontend/src/components/properties/PropertyForm.tsx (2325 lines)"}, "properties": {"repobilityId": "7b5a1e0be891236e", "scanner": "scanner-primary", "fingerprint": "79ceb7131a1eba56", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f8406acad5a2a836", "level": "note", "message": {"text": "Very large file: frontend/src/components/matching/MatchesDashboard.tsx (1590 lines)"}, "properties": {"repobilityId": "81058bf798bebc78", "scanner": "scanner-primary", "fingerprint": "f8406acad5a2a836", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a43aa05fd30d534a", "level": "note", "message": {"text": "Very large file: frontend/src/pages/auth/RegisterWithCode.tsx (1716 lines)"}, "properties": {"repobilityId": "5abc2b6ca09fc9c6", "scanner": "scanner-primary", "fingerprint": "a43aa05fd30d534a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f51f945870082214", "level": "note", "message": {"text": "Very large file: frontend/src/pages/dashboard/NewDashboard.tsx (1738 lines)"}, "properties": {"repobilityId": "33d0024ce353b34f", "scanner": "scanner-primary", "fingerprint": "f51f945870082214", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5e4fa8a2fd44a83d", "level": "note", "message": {"text": "Very large file: users/api_views.py (2252 lines)"}, "properties": {"repobilityId": "c46b9aba1f6086c4", "scanner": "scanner-primary", "fingerprint": "5e4fa8a2fd44a83d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-045fd367fb65b903", "level": "note", "message": {"text": "Very large file: verification/tests.py (1827 lines)"}, "properties": {"repobilityId": "19d55485f7a6bcd3", "scanner": "scanner-primary", "fingerprint": "045fd367fb65b903", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fa3ae27558e7265e", "level": "note", "message": {"text": "Very large file: verification/api_views.py (1395 lines)"}, "properties": {"repobilityId": "317f00ec0e655000", "scanner": "scanner-primary", "fingerprint": "fa3ae27558e7265e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-111de1b4f4305169", "level": "note", "message": {"text": "Very large file: payments/api_views.py (2443 lines)"}, "properties": {"repobilityId": "e9d605fe6c1be61e", "scanner": "scanner-primary", "fingerprint": "111de1b4f4305169", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-39335c572f7a6b98", "level": "note", "message": {"text": "Very large file: contracts/biometric_service.py (1700 lines)"}, "properties": {"repobilityId": "12ee35a83912ced6", "scanner": "scanner-primary", "fingerprint": "39335c572f7a6b98", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d063ed43fe5b0bc0", "level": "note", "message": {"text": "Very large file: contracts/landlord_api_views.py (1883 lines)"}, "properties": {"repobilityId": "b103421e83c501fa", "scanner": "scanner-primary", "fingerprint": "d063ed43fe5b0bc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d745e8a1dd125dfc", "level": "note", "message": {"text": "Very large file: contracts/api_views.py (4209 lines)"}, "properties": {"repobilityId": "c7a31847abbf4c9a", "scanner": "scanner-primary", "fingerprint": "d745e8a1dd125dfc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a76d9a7ecdef848", "level": "note", "message": {"text": "Very large file: contracts/landlord_contract_models.py (2160 lines)"}, "properties": {"repobilityId": "61f49ecf29317a3b", "scanner": "scanner-primary", "fingerprint": "0a76d9a7ecdef848", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4fa72699405e30de", "level": "note", "message": {"text": "Very large file: contracts/pdf_generator.py (3719 lines)"}, "properties": {"repobilityId": "bd8e40aee1afddec", "scanner": "scanner-primary", "fingerprint": "4fa72699405e30de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f0b54bfd639b080b", "level": "note", "message": {"text": "Very large file: matching/api_views.py (1606 lines)"}, "properties": {"repobilityId": "2edb9bbe102e709f", "scanner": "scanner-primary", "fingerprint": "f0b54bfd639b080b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aba2095ac97be57e", "level": "note", "message": {"text": "50 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "aba2095ac97be57e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ba62a4f43971e2e0", "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": "20f94794906b0319", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "aaa224b4600903a1", "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": "00594d3a1a244033", "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": "46756b458c561a61", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8790c6e9ca1b93e1", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/vite.config.ts:159"}, "properties": {"repobilityId": "df639040224a2f1a", "scanner": "scanner-primary", "fingerprint": "8790c6e9ca1b93e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b168bc7b91a1d2c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/scripts/testing/quick_test.js:65"}, "properties": {"repobilityId": "a4b0e6c923483a54", "scanner": "scanner-primary", "fingerprint": "b168bc7b91a1d2c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-86d4d7ed789fc015", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/playwright/tests/fase-g1-websocket-messaging.spec.ts:95"}, "properties": {"repobilityId": "40b81b18581c1749", "scanner": "scanner-primary", "fingerprint": "86d4d7ed789fc015", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60c155512d629424", "level": "note", "message": {"text": "Legacy-named symbol `receipt_too_old` in frontend/playwright/tests/fase-c9-vhid-public-receipt.spec.ts:158"}, "properties": {"repobilityId": "c994c13d86120a43", "scanner": "scanner-primary", "fingerprint": "60c155512d629424", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a314934e19791821", "level": "none", "message": {"text": "Commented-code block (10 lines) in frontend/playwright/tests/fase-c9-vhid-public-receipt.spec.ts:127"}, "properties": {"repobilityId": "8758e6662ac0e60c", "scanner": "scanner-primary", "fingerprint": "a314934e19791821", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73446af7057e57e3", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/playwright/tests/fase-c8-vhid-email-otp.spec.ts:106"}, "properties": {"repobilityId": "81bcd999271d24fc", "scanner": "scanner-primary", "fingerprint": "73446af7057e57e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebf6529cc7dbf510", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/playwright/tests/button-audit.spec.ts:285"}, "properties": {"repobilityId": "64ca3bef814578ae", "scanner": "scanner-primary", "fingerprint": "ebf6529cc7dbf510", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e6030951a3ddb6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/playwright/tests/multi-user-contract-signing.spec.ts:151"}, "properties": {"repobilityId": "c7a4d6af0cb57d58", "scanner": "scanner-primary", "fingerprint": "8e6030951a3ddb6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ff90ce4f59858b3", "level": "note", "message": {"text": "Legacy-named symbol `id_copy` in frontend/src/types/landlordContract.ts:418"}, "properties": {"repobilityId": "5c599b7daa2f463c", "scanner": "scanner-primary", "fingerprint": "4ff90ce4f59858b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-484c2a5c38a33913", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/utils/contractPdfUtils.ts:20"}, "properties": {"repobilityId": "8f98def24b1a0827", "scanner": "scanner-primary", "fingerprint": "484c2a5c38a33913", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2924c02139875e35", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/requests/CandidateEvaluationView.tsx:202"}, "properties": {"repobilityId": "aad6f36d83562c08", "scanner": "scanner-primary", "fingerprint": "2924c02139875e35", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07fefbce539b7b8a", "level": "note", "message": {"text": "Legacy-named symbol `receipt_too_old` in frontend/src/components/verihome-id/PublicReceiptUploader.tsx:50"}, "properties": {"repobilityId": "e90722126b3ff80e", "scanner": "scanner-primary", "fingerprint": "07fefbce539b7b8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a3daf8da9611d9bf", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/contracts/LandlordContractForm.tsx:1058"}, "properties": {"repobilityId": "7f9eea5dad13dcb2", "scanner": "scanner-primary", "fingerprint": "a3daf8da9611d9bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32edb46218642264", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/EnhancedTenantDocumentUpload.tsx:698"}, "properties": {"repobilityId": "d5ebe5b3cce6d1d2", "scanner": "scanner-primary", "fingerprint": "32edb46218642264", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ede887ee9fba9644", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/LandlordDocumentReview.tsx:190"}, "properties": {"repobilityId": "14e4183f261cda32", "scanner": "scanner-primary", "fingerprint": "ede887ee9fba9644", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d978af4aa06c1302", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/contracts/ContractClausesEditor.tsx:186"}, "properties": {"repobilityId": "377b248bb9458262", "scanner": "scanner-primary", "fingerprint": "d978af4aa06c1302", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e6e2543e7cc99317", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/hooks/useServiceWorker.ts:267"}, "properties": {"repobilityId": "2c21d6cdfcbea2a1", "scanner": "scanner-primary", "fingerprint": "e6e2543e7cc99317", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51e2bf4265d23dcd", "level": "note", "message": {"text": "Legacy-named symbol `receipt_too_old` in frontend/src/services/publicReceiptApi.ts:14"}, "properties": {"repobilityId": "130c3e4525a7e6ad", "scanner": "scanner-primary", "fingerprint": "51e2bf4265d23dcd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e98147a0a2f4936", "level": "note", "message": {"text": "Legacy-named symbol `receipt_too_old` in verification/tests.py:1743"}, "properties": {"repobilityId": "ac74e27b1ba6bf53", "scanner": "scanner-primary", "fingerprint": "9e98147a0a2f4936", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e079d7069542bcf7", "level": "note", "message": {"text": "Legacy-named symbol `receipt_too_old` in verification/api_views.py:1353"}, "properties": {"repobilityId": "629fa3c53c26d09f", "scanner": "scanner-primary", "fingerprint": "e079d7069542bcf7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-91a1b08327796d2e", "level": "warning", "message": {"text": "Likely N+1 query: `for act in \u2026` triggers a query per row \u2014 verification/api_views.py:911"}, "properties": {"repobilityId": "11c0b402654f1d19", "scanner": "scanner-primary", "fingerprint": "91a1b08327796d2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verification/api_views.py"}, "region": {"startLine": 911}}}]}, {"ruleId": "scanner-0beed2b56e26be5f", "level": "warning", "message": {"text": "Likely N+1 query: `for request_obj in \u2026` triggers a query per row \u2014 verification/management/commands/auto_assign_agents.py:78"}, "properties": {"repobilityId": "98888c402347d078", "scanner": "scanner-primary", "fingerprint": "0beed2b56e26be5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verification/management/commands/auto_assign_agents.py"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-a858d28bc1a4f8e0", "level": "warning", "message": {"text": "Likely N+1 query: `for act in \u2026` triggers a query per row \u2014 verification/services/hash_chain.py:151"}, "properties": {"repobilityId": "caad2d05e4fcfb4b", "scanner": "scanner-primary", "fingerprint": "a858d28bc1a4f8e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verification/services/hash_chain.py"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-5d7bfb9d7188686a", "level": "none", "message": {"text": "Commented-code block (5 lines) in requests/__init__.py:3"}, "properties": {"repobilityId": "89efd8ec6402564a", "scanner": "scanner-primary", "fingerprint": "5d7bfb9d7188686a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a219204c88d1470", "level": "warning", "message": {"text": "Likely N+1 query: `for doc in \u2026` triggers a query per row \u2014 requests/document_api_views.py:386"}, "properties": {"repobilityId": "06e059f9ce1c6d7a", "scanner": "scanner-primary", "fingerprint": "9a219204c88d1470", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "requests/document_api_views.py"}, "region": {"startLine": 386}}}]}, {"ruleId": "scanner-5a6394713c9811e1", "level": "warning", "message": {"text": "Likely N+1 query: `for doc in \u2026` triggers a query per row \u2014 requests/document_api_views.py:646"}, "properties": {"repobilityId": "cdb9d2a5d7eb4d9d", "scanner": "scanner-primary", "fingerprint": "5a6394713c9811e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "requests/document_api_views.py"}, "region": {"startLine": 646}}}]}, {"ruleId": "scanner-93730c1d9808ee88", "level": "warning", "message": {"text": "Likely N+1 query: `for prop in \u2026` triggers a query per row \u2014 scripts/fixes/clean_matching_processes.py:94"}, "properties": {"repobilityId": "cfd3c76b9bc61617", "scanner": "scanner-primary", "fingerprint": "93730c1d9808ee88", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fixes/clean_matching_processes.py"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-4b8386c07f21b958", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/utilities/verify_optimizations.py:21"}, "properties": {"repobilityId": "c8675d41b63849ca", "scanner": "scanner-primary", "fingerprint": "4b8386c07f21b958", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c1c661fcf8eac597", "level": "warning", "message": {"text": "Likely N+1 query: `for video in \u2026` triggers a query per row \u2014 scripts/debug/debug_video_issue.py:116"}, "properties": {"repobilityId": "ecace299cffa8277", "scanner": "scanner-primary", "fingerprint": "c1c661fcf8eac597", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/debug/debug_video_issue.py"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-538e5d73cb80d564", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 scripts/debug/debug_contract_404.py:65"}, "properties": {"repobilityId": "c0fd4f1b4ba16974", "scanner": "scanner-primary", "fingerprint": "538e5d73cb80d564", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/debug/debug_contract_404.py"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-cd078423e5976c84", "level": "warning", "message": {"text": "Likely N+1 query: `for mr in \u2026` triggers a query per row \u2014 scripts/debug/debug_contract_approval.py:51"}, "properties": {"repobilityId": "e323edcddaa54427", "scanner": "scanner-primary", "fingerprint": "cd078423e5976c84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/debug/debug_contract_approval.py"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-5e552749dec54b13", "level": "warning", "message": {"text": "Likely N+1 query: `for mr in \u2026` triggers a query per row \u2014 scripts/debug/check_workflow_status.py:36"}, "properties": {"repobilityId": "aec3e053201e35fb", "scanner": "scanner-primary", "fingerprint": "5e552749dec54b13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/debug/check_workflow_status.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-e5a8356d67ecbbbd", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 scripts/debug/check_workflow_status.py:52"}, "properties": {"repobilityId": "e1fabd738de68d1b", "scanner": "scanner-primary", "fingerprint": "e5a8356d67ecbbbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/debug/check_workflow_status.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-efbd403a59f8e638", "level": "warning", "message": {"text": "Likely N+1 query: `for payment in \u2026` triggers a query per row \u2014 dashboard/views.py:570"}, "properties": {"repobilityId": "40b6a737ab7e2dcb", "scanner": "scanner-primary", "fingerprint": "efbd403a59f8e638", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 570}}}]}, {"ruleId": "scanner-ea8100e7919e446f", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:596"}, "properties": {"repobilityId": "7591606fccdb33f6", "scanner": "scanner-primary", "fingerprint": "ea8100e7919e446f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 596}}}]}, {"ruleId": "scanner-4f3d58f0153edff2", "level": "warning", "message": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:765"}, "properties": {"repobilityId": "834eb8133684e4bc", "scanner": "scanner-primary", "fingerprint": "4f3d58f0153edff2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 765}}}]}, {"ruleId": "scanner-7a65abbf44fed840", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:784"}, "properties": {"repobilityId": "a7cf0bea98409507", "scanner": "scanner-primary", "fingerprint": "7a65abbf44fed840", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 784}}}]}, {"ruleId": "scanner-91a3cf16d7cea49d", "level": "warning", "message": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:809"}, "properties": {"repobilityId": "136b9b5d8bde8015", "scanner": "scanner-primary", "fingerprint": "91a3cf16d7cea49d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 809}}}]}, {"ruleId": "scanner-571b7d5a7feccdb9", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 dashboard/views.py:826"}, "properties": {"repobilityId": "a3d3234e10591dda", "scanner": "scanner-primary", "fingerprint": "571b7d5a7feccdb9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 826}}}]}, {"ruleId": "scanner-28bd63eac1f5c374", "level": "warning", "message": {"text": "Likely N+1 query: `for sr in \u2026` triggers a query per row \u2014 dashboard/views.py:861"}, "properties": {"repobilityId": "1c8652d69792ca70", "scanner": "scanner-primary", "fingerprint": "28bd63eac1f5c374", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 861}}}]}, {"ruleId": "scanner-12c5d9841d093cae", "level": "warning", "message": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:882"}, "properties": {"repobilityId": "ecd6b7ecdd7f5eeb", "scanner": "scanner-primary", "fingerprint": "12c5d9841d093cae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 882}}}]}, {"ruleId": "scanner-1abc2d479ebec64b", "level": "warning", "message": {"text": "Likely N+1 query: `for transaction in \u2026` triggers a query per row \u2014 dashboard/views.py:903"}, "properties": {"repobilityId": "abc466c80a717578", "scanner": "scanner-primary", "fingerprint": "1abc2d479ebec64b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/views.py"}, "region": {"startLine": 903}}}]}, {"ruleId": "scanner-53c198b32b26397f", "level": "note", "message": {"text": "Legacy-named symbol `days_old` in messaging/notifications.py:553"}, "properties": {"repobilityId": "bb36142a13b58cf2", "scanner": "scanner-primary", "fingerprint": "53c198b32b26397f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb516e8ae0e61ebf", "level": "warning", "message": {"text": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/notifications.py:117"}, "properties": {"repobilityId": "03a670f399afa4eb", "scanner": "scanner-primary", "fingerprint": "eb516e8ae0e61ebf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "messaging/notifications.py"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-529bdf27ee9a6a0f", "level": "warning", "message": {"text": "Likely N+1 query: `for question in \u2026` triggers a query per row \u2014 messaging/advanced_messaging.py:423"}, "properties": {"repobilityId": "f3c6a0e5d16627fd", "scanner": "scanner-primary", "fingerprint": "529bdf27ee9a6a0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "messaging/advanced_messaging.py"}, "region": {"startLine": 423}}}]}, {"ruleId": "scanner-58cd678404643f81", "level": "warning", "message": {"text": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/advanced_api_views.py:564"}, "properties": {"repobilityId": "ee35b7c34f6aa2a3", "scanner": "scanner-primary", "fingerprint": "58cd678404643f81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "messaging/advanced_api_views.py"}, "region": {"startLine": 564}}}]}, {"ruleId": "scanner-f95b78517857becf", "level": "warning", "message": {"text": "Likely N+1 query: `for message in \u2026` triggers a query per row \u2014 messaging/consumers.py:318"}, "properties": {"repobilityId": "695ea3a7736ec151", "scanner": "scanner-primary", "fingerprint": "f95b78517857becf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "messaging/consumers.py"}, "region": {"startLine": 318}}}]}, {"ruleId": "scanner-4e32e72a31f83ddb", "level": "warning", "message": {"text": "Likely N+1 query: `for payment in \u2026` triggers a query per row \u2014 payments/reminder_service.py:453"}, "properties": {"repobilityId": "33d93697c377aac9", "scanner": "scanner-primary", "fingerprint": "4e32e72a31f83ddb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payments/reminder_service.py"}, "region": {"startLine": 453}}}]}, {"ruleId": "scanner-b4a5cff89f260e60", "level": "warning", "message": {"text": "Likely N+1 query: `for schedule in \u2026` triggers a query per row \u2014 payments/auto_charge_service.py:46"}, "properties": {"repobilityId": "a8a384357dca748a", "scanner": "scanner-primary", "fingerprint": "b4a5cff89f260e60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payments/auto_charge_service.py"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-c9b0c77f527adf84", "level": "none", "message": {"text": "Commented-code block (6 lines) in payments/models.py:783"}, "properties": {"repobilityId": "737d2315a0a21c1b", "scanner": "scanner-primary", "fingerprint": "c9b0c77f527adf84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad429fa84822c393", "level": "none", "message": {"text": "Commented-code block (6 lines) in payments/dian_invoice_service.py:364"}, "properties": {"repobilityId": "aa189cd2780d9918", "scanner": "scanner-primary", "fingerprint": "ad429fa84822c393", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e8c651c10ea31a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in payments/api_views.py:792"}, "properties": {"repobilityId": "8e3fc181940a5ac8", "scanner": "scanner-primary", "fingerprint": "5e8c651c10ea31a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7d0888e75d0f331", "level": "warning", "message": {"text": "Likely N+1 query: `for schedule in \u2026` triggers a query per row \u2014 payments/api_views.py:1591"}, "properties": {"repobilityId": "43363963dfeea529", "scanner": "scanner-primary", "fingerprint": "b7d0888e75d0f331", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payments/api_views.py"}, "region": {"startLine": 1591}}}]}, {"ruleId": "scanner-da57ad17ce954442", "level": "none", "message": {"text": "Commented-code block (5 lines) in core/urls.py:32"}, "properties": {"repobilityId": "af9da6eb88c9bd7e", "scanner": "scanner-primary", "fingerprint": "da57ad17ce954442", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9afeeb9681830bb", "level": "none", "message": {"text": "Commented-code block (8 lines) in core/api_views.py:381"}, "properties": {"repobilityId": "0cc414e446de032c", "scanner": "scanner-primary", "fingerprint": "f9afeeb9681830bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34256042a3b845e1", "level": "warning", "message": {"text": "Likely N+1 query: `for c in \u2026` triggers a query per row \u2014 core/api_views.py:607"}, "properties": {"repobilityId": "31f22f9cf82f6443", "scanner": "scanner-primary", "fingerprint": "34256042a3b845e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 607}}}]}, {"ruleId": "scanner-1281efd9f8fcae84", "level": "none", "message": {"text": "Commented-code block (5 lines) in contracts/biometric_service.py:89"}, "properties": {"repobilityId": "73f36d12736db740", "scanner": "scanner-primary", "fingerprint": "1281efd9f8fcae84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a855fba0728fa32c", "level": "none", "message": {"text": "Commented-code block (6 lines) in contracts/constants.py:65"}, "properties": {"repobilityId": "3abde3f2e0516161", "scanner": "scanner-primary", "fingerprint": "a855fba0728fa32c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79ebfbb6a93bd3d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in contracts/landlord_api_views.py:475"}, "properties": {"repobilityId": "7d35d3d57d14cb1d", "scanner": "scanner-primary", "fingerprint": "79ebfbb6a93bd3d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79da2469b5f57213", "level": "note", "message": {"text": "Legacy-named symbol `var_copy` in contracts/admin.py:720"}, "properties": {"repobilityId": "caafc8018b936162", "scanner": "scanner-primary", "fingerprint": "79da2469b5f57213", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5add63b3311aba47", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/tasks.py:67"}, "properties": {"repobilityId": "e8a153b3e89c3e8d", "scanner": "scanner-primary", "fingerprint": "5add63b3311aba47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/tasks.py"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-b136ae0569d491ad", "level": "none", "message": {"text": "Commented-code block (7 lines) in contracts/tenant_serializers.py:141"}, "properties": {"repobilityId": "e7fc4887cb5a064f", "scanner": "scanner-primary", "fingerprint": "b136ae0569d491ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33558c73e0da78f2", "level": "none", "message": {"text": "Commented-code block (9 lines) in contracts/test_biometric.py:644"}, "properties": {"repobilityId": "3ae5b85e774bef87", "scanner": "scanner-primary", "fingerprint": "33558c73e0da78f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab794731344e21c4", "level": "warning", "message": {"text": "Likely N+1 query: `for clause in \u2026` triggers a query per row \u2014 contracts/api_views.py:1118"}, "properties": {"repobilityId": "f4c6175e7dc1b316", "scanner": "scanner-primary", "fingerprint": "ab794731344e21c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/api_views.py"}, "region": {"startLine": 1118}}}]}, {"ruleId": "scanner-d81905e88537fc0b", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/admin_approval_api.py:55"}, "properties": {"repobilityId": "e6f19b543df25a25", "scanner": "scanner-primary", "fingerprint": "d81905e88537fc0b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/admin_approval_api.py"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-fc1d081bd6c192eb", "level": "note", "message": {"text": "Legacy-named symbol `heuristic_v1` in contracts/biometric_providers/local.py:183"}, "properties": {"repobilityId": "85df4091c2134dbe", "scanner": "scanner-primary", "fingerprint": "fc1d081bd6c192eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-46439913aed41de1", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 contracts/management/commands/process_contract_notifications.py:145"}, "properties": {"repobilityId": "a1e9e3e1a4d94f25", "scanner": "scanner-primary", "fingerprint": "46439913aed41de1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/management/commands/process_contract_notifications.py"}, "region": {"startLine": 145}}}]}, {"ruleId": "scanner-33073fc135353277", "level": "warning", "message": {"text": "Likely N+1 query: `for contract in \u2026` triggers a query per row \u2014 ratings/analytics.py:644"}, "properties": {"repobilityId": "bd8f0be56ebd5249", "scanner": "scanner-primary", "fingerprint": "33073fc135353277", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ratings/analytics.py"}, "region": {"startLine": 644}}}]}, {"ruleId": "scanner-b54a138940155232", "level": "none", "message": {"text": "Commented-code block (5 lines) in ratings/models.py:120"}, "properties": {"repobilityId": "fb7eb66b069e333d", "scanner": "scanner-primary", "fingerprint": "b54a138940155232", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cdb302585399588", "level": "warning", "message": {"text": "Likely N+1 query: `for profile in \u2026` triggers a query per row \u2014 ratings/management/commands/update_rating_profiles.py:129"}, "properties": {"repobilityId": "a74b68835000ad31", "scanner": "scanner-primary", "fingerprint": "1cdb302585399588", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ratings/management/commands/update_rating_profiles.py"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-273baec73fa160e6", "level": "warning", "message": {"text": "Likely N+1 query: `for match in \u2026` triggers a query per row \u2014 matching/services.py:492"}, "properties": {"repobilityId": "5a6d180ed47537e0", "scanner": "scanner-primary", "fingerprint": "273baec73fa160e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "matching/services.py"}, "region": {"startLine": 492}}}]}, {"ruleId": "scanner-8b48123ffade902e", "level": "note", "message": {"text": "Legacy-named symbol `test_can_follow_up_true_old` in matching/tests.py:209"}, "properties": {"repobilityId": "f024bf9faf020901", "scanner": "scanner-primary", "fingerprint": "8b48123ffade902e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7c9db4ddc8870cd0", "level": "warning", "message": {"text": "Likely N+1 query: `for property in \u2026` triggers a query per row \u2014 matching/api_views.py:669"}, "properties": {"repobilityId": "bd2491e6978bcb8d", "scanner": "scanner-primary", "fingerprint": "7c9db4ddc8870cd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "n-plus-one", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "matching/api_views.py"}, "region": {"startLine": 669}}}]}, {"ruleId": "scanner-20fa8afe678782dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in verihome/settings.py:157"}, "properties": {"repobilityId": "22a24bd342d5ee80", "scanner": "scanner-primary", "fingerprint": "20fa8afe678782dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1662ae7a5bb4e048", "level": "note", "message": {"text": "33 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "90293c220e284644", "scanner": "scanner-primary", "fingerprint": "1662ae7a5bb4e048", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "33f57340220bb74a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "40032a1cc4b62836", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "00963149d54c2a39", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "13421bc141fce7a9", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "0d04027686ffe436", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "b8b650e3e1aa8d54", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9715a6abd03d8410", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "60fa22de0225050e", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "9df50c4ab1ec5ff5", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "37735df272906b06", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "d6bc96d11b68fbbc", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-122053f21232d80c", "level": "note", "message": {"text": "Near-duplicate function bodies in 14 places"}, "properties": {"repobilityId": "679a97cddef4ee1c", "scanner": "scanner-primary", "fingerprint": "122053f21232d80c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "855e73577c103153", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-4a118a3aa3e47973", "level": "note", "message": {"text": "Near-duplicate function bodies in 19 places"}, "properties": {"repobilityId": "0c6f25a232d2dcdf", "scanner": "scanner-primary", "fingerprint": "4a118a3aa3e47973", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "65403312e2473ce2", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-380b7cb95b387b9c", "level": "note", "message": {"text": "Near-duplicate function bodies in 11 places"}, "properties": {"repobilityId": "d2db3fb00bc7c0bb", "scanner": "scanner-primary", "fingerprint": "380b7cb95b387b9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-76a2f6818267a9a8", "level": "note", "message": {"text": "Near-duplicate function bodies in 8 places"}, "properties": {"repobilityId": "1f09dbdad2a3875f", "scanner": "scanner-primary", "fingerprint": "76a2f6818267a9a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2acfbe494670ad66", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-f341860ab6a90be6", "level": "note", "message": {"text": "Near-duplicate function bodies in 17 places"}, "properties": {"repobilityId": "781185677b3d2f74", "scanner": "scanner-primary", "fingerprint": "f341860ab6a90be6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "8ca6cc0c7e90dee2", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-b44b16ce25caa438", "level": "warning", "message": {"text": "Frontend route `/app/admin/*` has no Link/navigate to it \u2014 frontend/src/components/auth/AdminProtectedRoute.tsx"}, "properties": {"repobilityId": "0540e407474a19b7", "scanner": "scanner-primary", "fingerprint": "b44b16ce25caa438", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6e53fa0e1aaaa5a0", "level": "warning", "message": {"text": "Frontend route `/confirm-email/:key` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "75db4fe357840ceb", "scanner": "scanner-primary", "fingerprint": "6e53fa0e1aaaa5a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-df252bd84261ac9a", "level": "warning", "message": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "5b83b10ded505e09", "scanner": "scanner-primary", "fingerprint": "df252bd84261ac9a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2b20833f4c1aa201", "level": "warning", "message": {"text": "Frontend route `/tenant/invitation/:token` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "1814def43c74278c", "scanner": "scanner-primary", "fingerprint": "2b20833f4c1aa201", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ee0994455c507a37", "level": "warning", "message": {"text": "Frontend route `/codeudor-auth/:token` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "properties": {"repobilityId": "5e55f644e4a46233", "scanner": "scanner-primary", "fingerprint": "ee0994455c507a37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-966baad2d97d5310", "level": "warning", "message": {"text": "Frontend route `/app` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "062f9e6625743cad", "scanner": "scanner-primary", "fingerprint": "966baad2d97d5310", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a22a981167e51e20", "level": "warning", "message": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "2697c45caa4e0336", "scanner": "scanner-primary", "fingerprint": "a22a981167e51e20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2b8ff836c31c5198", "level": "warning", "message": {"text": "Frontend route `properties` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "7c9797b6ee494be7", "scanner": "scanner-primary", "fingerprint": "2b8ff836c31c5198", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b3f2f79a72c3ea76", "level": "warning", "message": {"text": "Frontend route `new` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "b137dd5308237df2", "scanner": "scanner-primary", "fingerprint": "b3f2f79a72c3ea76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-848cde31e0e99685", "level": "warning", "message": {"text": "Frontend route `:id` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "4507ddb67477aa22", "scanner": "scanner-primary", "fingerprint": "848cde31e0e99685", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0faf0b9530d5e04a", "level": "warning", "message": {"text": "Frontend route `:id/edit` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "60b3911b3cd051a4", "scanner": "scanner-primary", "fingerprint": "0faf0b9530d5e04a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-18d8135a25ee3966", "level": "warning", "message": {"text": "Frontend route `contracts` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "1810bde02617d6da", "scanner": "scanner-primary", "fingerprint": "18d8135a25ee3966", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f191b957ce8aaff5", "level": "warning", "message": {"text": "Frontend route `:id/authenticate` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "properties": {"repobilityId": "4633bae6af57c3c5", "scanner": "scanner-primary", "fingerprint": "f191b957ce8aaff5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5eb9e98698394601", "level": "warning", "message": {"text": "Frontend route `:id/sign` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "properties": {"repobilityId": "49d8ec9aa35ff2e9", "scanner": "scanner-primary", "fingerprint": "5eb9e98698394601", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8e2e65d914cce2fe", "level": "warning", "message": {"text": "Frontend route `payments` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "a3ba8dfdded3cbda", "scanner": "scanner-primary", "fingerprint": "8e2e65d914cce2fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fd3fc84d86ddd20e", "level": "warning", "message": {"text": "Frontend route `transactions` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "properties": {"repobilityId": "b830c85d5acfa933", "scanner": "scanner-primary", "fingerprint": "fd3fc84d86ddd20e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f7340b470774ffaa", "level": "warning", "message": {"text": "Frontend route `messages` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "0d7cd25864945af3", "scanner": "scanner-primary", "fingerprint": "f7340b470774ffaa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-841b3d284cd15cab", "level": "warning", "message": {"text": "Frontend route `reply` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "58535c951a845c09", "scanner": "scanner-primary", "fingerprint": "841b3d284cd15cab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5c25ddddd04edc71", "level": "warning", "message": {"text": "Frontend route `ratings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "7835a0681e9914fb", "scanner": "scanner-primary", "fingerprint": "5c25ddddd04edc71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-76d5b83102f3aca1", "level": "warning", "message": {"text": "Frontend route `profile` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "cf5912fb6419bfc8", "scanner": "scanner-primary", "fingerprint": "76d5b83102f3aca1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-222ba17320953c37", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "c12476c10e82d648", "scanner": "scanner-primary", "fingerprint": "222ba17320953c37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-16510bc806067df6", "level": "warning", "message": {"text": "Frontend route `resume` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "701d8ab2f5c70857", "scanner": "scanner-primary", "fingerprint": "16510bc806067df6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-64341b4aa9fd3f12", "level": "warning", "message": {"text": "Frontend route `resume/edit` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "e7b2d610e14754f9", "scanner": "scanner-primary", "fingerprint": "64341b4aa9fd3f12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6b6e0d487f5ef9a3", "level": "warning", "message": {"text": "Frontend route `services` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "78cc4c169b753fd9", "scanner": "scanner-primary", "fingerprint": "6b6e0d487f5ef9a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c0ee97b0e4ef0e1b", "level": "warning", "message": {"text": "Frontend route `service-requests` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "46e5587d6cb5351d", "scanner": "scanner-primary", "fingerprint": "c0ee97b0e4ef0e1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-30df496459eef4fc", "level": "warning", "message": {"text": "Frontend route `maintenance` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "197992fcd5299371", "scanner": "scanner-primary", "fingerprint": "30df496459eef4fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7746bdbf84cc30f1", "level": "warning", "message": {"text": "Frontend route `requests` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "768ec035afdb3c6a", "scanner": "scanner-primary", "fingerprint": "7746bdbf84cc30f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-36e00a7354c65b8a", "level": "warning", "message": {"text": "Frontend route `subscriptions` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "16de4bb959843ad2", "scanner": "scanner-primary", "fingerprint": "36e00a7354c65b8a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b5ff2231fc1381b6", "level": "warning", "message": {"text": "Frontend route `contracts/signing-demo` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "41e94963d66cf032", "scanner": "scanner-primary", "fingerprint": "b5ff2231fc1381b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ee94fd31f1b18008", "level": "warning", "message": {"text": "Frontend route `help` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "a9bc027fe503bdf4", "scanner": "scanner-primary", "fingerprint": "ee94fd31f1b18008", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-67f47dc873f481ea", "level": "warning", "message": {"text": "Frontend route `blog` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "264b09b5473bda1f", "scanner": "scanner-primary", "fingerprint": "67f47dc873f481ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d0c6fcb9c4e19092", "level": "warning", "message": {"text": "Frontend route `events` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "7bf0b31c15f55887", "scanner": "scanner-primary", "fingerprint": "d0c6fcb9c4e19092", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-45c479d9b6bcf106", "level": "warning", "message": {"text": "Frontend route `partners` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "2013cebc51eba762", "scanner": "scanner-primary", "fingerprint": "45c479d9b6bcf106", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-67e1a163f3141135", "level": "warning", "message": {"text": "Frontend route `careers` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "04278bb36dd1e649", "scanner": "scanner-primary", "fingerprint": "67e1a163f3141135", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4f0e3754601b41d5", "level": "warning", "message": {"text": "Frontend route `verihome-id/onboarding` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "properties": {"repobilityId": "2ec20973981f13dc", "scanner": "scanner-primary", "fingerprint": "4f0e3754601b41d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ffccf440d44dbe50", "level": "warning", "message": {"text": "Frontend route `agente/visitas` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "properties": {"repobilityId": "baa0a177f436755b", "scanner": "scanner-primary", "fingerprint": "ffccf440d44dbe50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b33e32db84875408", "level": "warning", "message": {"text": "Frontend route `contracts/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "c329bd8d387c7196", "scanner": "scanner-primary", "fingerprint": "b33e32db84875408", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-003a8958a4d5ea08", "level": "warning", "message": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "ab96c7fb45cd8e8b", "scanner": "scanner-primary", "fingerprint": "003a8958a4d5ea08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1c54124023fd0495", "level": "warning", "message": {"text": "Frontend route `security` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "abecd395461fc855", "scanner": "scanner-primary", "fingerprint": "1c54124023fd0495", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a5f94ec9470356d5", "level": "warning", "message": {"text": "Frontend route `logs` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "ff979f23c4da7b9d", "scanner": "scanner-primary", "fingerprint": "a5f94ec9470356d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d8fe175ce9d4ff04", "level": "warning", "message": {"text": "Frontend route `audit-logs` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "bf8d7a79c76d54e4", "scanner": "scanner-primary", "fingerprint": "d8fe175ce9d4ff04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b57dadbbe337593d", "level": "warning", "message": {"text": "Frontend route `tickets` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "b85539d6f24bb23f", "scanner": "scanner-primary", "fingerprint": "b57dadbbe337593d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-07a9a114926ed39f", "level": "warning", "message": {"text": "Frontend route `verification` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "8d727e051d9cabb7", "scanner": "scanner-primary", "fingerprint": "07a9a114926ed39f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-219f4f50c935abd9", "level": "warning", "message": {"text": "Frontend route `visitas` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "f200dac5f2371bc8", "scanner": "scanner-primary", "fingerprint": "219f4f50c935abd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-120cf4d595daf9ee", "level": "warning", "message": {"text": "Frontend route `visitas/:actId` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "6c4c7bc1f4cd24f9", "scanner": "scanner-primary", "fingerprint": "120cf4d595daf9ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c1058cffa250f6c8", "level": "warning", "message": {"text": "Frontend route `verihome-id/scoring` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "fd14a874f4f49119", "scanner": "scanner-primary", "fingerprint": "c1058cffa250f6c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a6186e52ee69dbba", "level": "warning", "message": {"text": "Frontend route `verihome-id/analytics` has no Link/navigate to it \u2014 frontend/src/routes/admin.tsx"}, "properties": {"repobilityId": "daa8d4459aae71e5", "scanner": "scanner-primary", "fingerprint": "a6186e52ee69dbba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c4a9db2663330208", "level": "warning", "message": {"text": "Frontend route `/payments` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "53be2a2f2f1199e3", "scanner": "scanner-primary", "fingerprint": "c4a9db2663330208", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4fdf1c2a55133355", "level": "warning", "message": {"text": "Frontend route `/ratings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "d72b4d7917277aa8", "scanner": "scanner-primary", "fingerprint": "4fdf1c2a55133355", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e81e54df1cb58959", "level": "warning", "message": {"text": "Frontend route `/settings` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "4139b4393ce88992", "scanner": "scanner-primary", "fingerprint": "e81e54df1cb58959", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-df4313abf0e79b3d", "level": "warning", "message": {"text": "Frontend route `/maintenance` has no Link/navigate to it \u2014 frontend/src/routes/index.lazy.tsx"}, "properties": {"repobilityId": "3774aaa04a5a4390", "scanner": "scanner-primary", "fingerprint": "df4313abf0e79b3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-04e86ae911d39ffc", "level": "warning", "message": {"text": "Frontend route `/thread/:threadId` has no Link/navigate to it \u2014 frontend/src/routes/messages.tsx"}, "properties": {"repobilityId": "df43155359485dc9", "scanner": "scanner-primary", "fingerprint": "04e86ae911d39ffc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ac9f94b0e51b48f2", "level": "warning", "message": {"text": "Frontend route `/compose` has no Link/navigate to it \u2014 frontend/src/routes/messages.tsx"}, "properties": {"repobilityId": "2be9bd78d442a3ec", "scanner": "scanner-primary", "fingerprint": "ac9f94b0e51b48f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-160ecb38cf1bc7a3", "level": "warning", "message": {"text": "Frontend route `/new` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx"}, "properties": {"repobilityId": "7c8ccb5644b8bf30", "scanner": "scanner-primary", "fingerprint": "160ecb38cf1bc7a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ed5e2c55a97ad74a", "level": "warning", "message": {"text": "Frontend route `/:id` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx"}, "properties": {"repobilityId": "1077f8e171007da0", "scanner": "scanner-primary", "fingerprint": "ed5e2c55a97ad74a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3b071a0dfd7633f6", "level": "warning", "message": {"text": "Frontend route `/:id/edit` has no Link/navigate to it \u2014 frontend/src/routes/properties.tsx"}, "properties": {"repobilityId": "c15f2d02a9ff58bf", "scanner": "scanner-primary", "fingerprint": "3b071a0dfd7633f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8767179b45f0c8b0", "level": "warning", "message": {"text": "Frontend route `contracts/*` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "abcaee3778768d0c", "scanner": "scanner-primary", "fingerprint": "8767179b45f0c8b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f3c8c1b8dc36d336", "level": "warning", "message": {"text": "Frontend route `admin/*` has no Link/navigate to it \u2014 frontend/src/routes/index.tsx"}, "properties": {"repobilityId": "01a4a3b87a80440a", "scanner": "scanner-primary", "fingerprint": "f3c8c1b8dc36d336", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5b602178aaf30d70", "level": "warning", "message": {"text": "Frontend route `/matched-candidates` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "properties": {"repobilityId": "c9482c16ef74187d", "scanner": "scanner-primary", "fingerprint": "5b602178aaf30d70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2c7247e3104848c2", "level": "warning", "message": {"text": "Frontend route `/my-processes` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "properties": {"repobilityId": "f439b49ad32ee055", "scanner": "scanner-primary", "fingerprint": "2c7247e3104848c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a43755b07781ae9f", "level": "warning", "message": {"text": "Frontend route `/renewal` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "properties": {"repobilityId": "99149e672eee1cfc", "scanner": "scanner-primary", "fingerprint": "a43755b07781ae9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c0117c34637507b1", "level": "warning", "message": {"text": "Frontend route `/:id/renewal` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "properties": {"repobilityId": "9b74923161ae8725", "scanner": "scanner-primary", "fingerprint": "c0117c34637507b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3ba6d0292556c390", "level": "warning", "message": {"text": "Frontend route `/:id/authenticate` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "properties": {"repobilityId": "4460af43a993b2ce", "scanner": "scanner-primary", "fingerprint": "3ba6d0292556c390", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-66d0f59496736a7a", "level": "warning", "message": {"text": "Frontend route `/:id/sign` has no Link/navigate to it \u2014 frontend/src/routes/contracts.tsx"}, "properties": {"repobilityId": "986796994ad6481e", "scanner": "scanner-primary", "fingerprint": "66d0f59496736a7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ff49870c45c29e1e", "level": "warning", "message": {"text": "Frontend route `/unified` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "0ab2477f70c88ccf", "scanner": "scanner-primary", "fingerprint": "ff49870c45c29e1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f2302a1fb8a3fbbe", "level": "warning", "message": {"text": "Frontend route `/landlord/dashboard` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "378eaeac154fe159", "scanner": "scanner-primary", "fingerprint": "f2302a1fb8a3fbbe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-01dc3eb826633313", "level": "warning", "message": {"text": "Frontend route `/tenant/dashboard` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "caade0ac12764a9a", "scanner": "scanner-primary", "fingerprint": "01dc3eb826633313", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-87eb52fe81ecd5da", "level": "warning", "message": {"text": "Frontend route `/invitation/:token` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "ddfb5f22628e0e07", "scanner": "scanner-primary", "fingerprint": "87eb52fe81ecd5da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4da2f9d6565b919c", "level": "warning", "message": {"text": "Frontend route `/landlord/*` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "539c48b461601693", "scanner": "scanner-primary", "fingerprint": "4da2f9d6565b919c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3ccd44c62c0fc38b", "level": "warning", "message": {"text": "Frontend route `/tenant/*` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "317aa74185da5c6f", "scanner": "scanner-primary", "fingerprint": "3ccd44c62c0fc38b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cecd1b37e8047f5d", "level": "warning", "message": {"text": "Frontend route `/view/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "e534282805d06638", "scanner": "scanner-primary", "fingerprint": "cecd1b37e8047f5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b80023b2a04052ba", "level": "warning", "message": {"text": "Frontend route `/edit/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "bf98577599c1fb00", "scanner": "scanner-primary", "fingerprint": "b80023b2a04052ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b9db17b79de45899", "level": "warning", "message": {"text": "Frontend route `/create` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "01ee035aa5671fbe", "scanner": "scanner-primary", "fingerprint": "b9db17b79de45899", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8b0d44625f4e9225", "level": "warning", "message": {"text": "Frontend route `/template` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "9e08073de7f6ee02", "scanner": "scanner-primary", "fingerprint": "8b0d44625f4e9225", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c4ad5c2ba30ee10e", "level": "warning", "message": {"text": "Frontend route `/analytics` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "0a7516c67475bf09", "scanner": "scanner-primary", "fingerprint": "c4ad5c2ba30ee10e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9bcd0cf86c7e6434", "level": "warning", "message": {"text": "Frontend route `/accept/:token` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "e31be6c46a3bd0c0", "scanner": "scanner-primary", "fingerprint": "9bcd0cf86c7e6434", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5df52872d4dd236c", "level": "warning", "message": {"text": "Frontend route `/data/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "479d6308cd7ddd54", "scanner": "scanner-primary", "fingerprint": "5df52872d4dd236c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e94a6f12adfde393", "level": "warning", "message": {"text": "Frontend route `/review/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "af67a596f44578f4", "scanner": "scanner-primary", "fingerprint": "e94a6f12adfde393", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-229dfae67ce5b63c", "level": "warning", "message": {"text": "Frontend route `/objections/:contractId` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "062aad1f785c74ed", "scanner": "scanner-primary", "fingerprint": "229dfae67ce5b63c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-60af06ba4dd586ed", "level": "warning", "message": {"text": "Frontend route `/success` has no Link/navigate to it \u2014 frontend/src/routes/contractsDashboard.tsx"}, "properties": {"repobilityId": "491b51c7761b99eb", "scanner": "scanner-primary", "fingerprint": "60af06ba4dd586ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1b3288025c56c40f", "level": "warning", "message": {"text": "Django view `api_user_activity_summary` may be unauthenticated \u2014 users/user_views.py:252"}, "properties": {"repobilityId": "7e590d3d1141795e", "scanner": "scanner-primary", "fingerprint": "1b3288025c56c40f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/user_views.py"}, "region": {"startLine": 252}}}]}, {"ruleId": "scanner-6bbbcc8f2dcbe648", "level": "warning", "message": {"text": "Django view `api_user_notifications` may be unauthenticated \u2014 users/user_views.py:265"}, "properties": {"repobilityId": "bd413bbb562cd2a4", "scanner": "scanner-primary", "fingerprint": "6bbbcc8f2dcbe648", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/user_views.py"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-a06ad109fb0ebb8d", "level": "warning", "message": {"text": "Django view `api_admin_actions_on_user` may be unauthenticated \u2014 users/user_views.py:308"}, "properties": {"repobilityId": "50e5c0009fe334ae", "scanner": "scanner-primary", "fingerprint": "a06ad109fb0ebb8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/user_views.py"}, "region": {"startLine": 308}}}]}, {"ruleId": "scanner-bd7e2c5aae8b3e99", "level": "warning", "message": {"text": "Django view `api_mark_notification_read` may be unauthenticated \u2014 users/user_views.py:349"}, "properties": {"repobilityId": "218117c4ef99a8cd", "scanner": "scanner-primary", "fingerprint": "bd7e2c5aae8b3e99", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/user_views.py"}, "region": {"startLine": 349}}}]}, {"ruleId": "scanner-da97175a850bc3dd", "level": "warning", "message": {"text": "Django view `create_interview_code` may be unauthenticated \u2014 users/api_views.py:1219"}, "properties": {"repobilityId": "779e0c1b8396b18c", "scanner": "scanner-primary", "fingerprint": "da97175a850bc3dd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/api_views.py"}, "region": {"startLine": 1219}}}]}, {"ruleId": "scanner-3f010c64816b21e1", "level": "warning", "message": {"text": "Django CBV `UserProfileView` lacks `LoginRequiredMixin` \u2014 users/api_views.py:88"}, "properties": {"repobilityId": "78954cf43d8a8fc4", "scanner": "scanner-primary", "fingerprint": "3f010c64816b21e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/api_views.py"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-801c65a7f729afe8", "level": "error", "message": {"text": "DRF view `InterviewCodeVerificationView` declares no `permission_classes` \u2014 users/api_views.py:821"}, "properties": {"repobilityId": "a809f32a3e8e5b69", "scanner": "scanner-primary", "fingerprint": "801c65a7f729afe8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/api_views.py"}, "region": {"startLine": 821}}}]}, {"ruleId": "scanner-a5b870e99fb39943", "level": "warning", "message": {"text": "Django CBV `CustomTokenObtainPairView` lacks `LoginRequiredMixin` \u2014 users/api_views.py:1369"}, "properties": {"repobilityId": "21d77bf820b00e17", "scanner": "scanner-primary", "fingerprint": "a5b870e99fb39943", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "users/api_views.py"}, "region": {"startLine": 1369}}}]}, {"ruleId": "scanner-12d8f5ecf0990b5a", "level": "warning", "message": {"text": "Django view `delete_tenant_document` may be unauthenticated \u2014 requests/document_api_views.py:584"}, "properties": {"repobilityId": "bbfd3bb39d855955", "scanner": "scanner-primary", "fingerprint": "12d8f5ecf0990b5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "requests/document_api_views.py"}, "region": {"startLine": 584}}}]}, {"ruleId": "scanner-5944e09af0b17d6c", "level": "warning", "message": {"text": "Django view `document_stats_for_landlord` may be unauthenticated \u2014 requests/document_api_views.py:619"}, "properties": {"repobilityId": "6362de1291d949df", "scanner": "scanner-primary", "fingerprint": "5944e09af0b17d6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "requests/document_api_views.py"}, "region": {"startLine": 619}}}]}, {"ruleId": "scanner-3adc9d1674995205", "level": "warning", "message": {"text": "Django view `document_access_history` may be unauthenticated \u2014 requests/document_api_views.py:919"}, "properties": {"repobilityId": "a71d60869f89a090", "scanner": "scanner-primary", "fingerprint": "3adc9d1674995205", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "requests/document_api_views.py"}, "region": {"startLine": 919}}}]}, {"ruleId": "scanner-9e398c432190f06d", "level": "warning", "message": {"text": "Django CBV `StripeWebhookView` lacks `LoginRequiredMixin` \u2014 payments/views.py:363"}, "properties": {"repobilityId": "a69cfbd5bfa3e985", "scanner": "scanner-primary", "fingerprint": "9e398c432190f06d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payments/views.py"}, "region": {"startLine": 363}}}]}, {"ruleId": "scanner-d5db91acf58b2603", "level": "warning", "message": {"text": "Django CBV `PayPalWebhookView` lacks `LoginRequiredMixin` \u2014 payments/views.py:370"}, "properties": {"repobilityId": "7b5a749f24c1aea7", "scanner": "scanner-primary", "fingerprint": "d5db91acf58b2603", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "payments/views.py"}, "region": {"startLine": 370}}}]}, {"ruleId": "scanner-8916792b6660b457", "level": "error", "message": {"text": "DRF view `OptimizedPropertyViewSet` declares no `permission_classes` \u2014 core/optimizations.py:244"}, "properties": {"repobilityId": "3c7e4cdcd0f68bc5", "scanner": "scanner-primary", "fingerprint": "8916792b6660b457", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/optimizations.py"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-3ea92ca1326551ad", "level": "error", "message": {"text": "DRF view `OptimizedContractViewSet` declares no `permission_classes` \u2014 core/optimizations.py:304"}, "properties": {"repobilityId": "6d1d7d72c0f7ae66", "scanner": "scanner-primary", "fingerprint": "3ea92ca1326551ad", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/optimizations.py"}, "region": {"startLine": 304}}}]}, {"ruleId": "scanner-39235fcb2366df1d", "level": "error", "message": {"text": "DRF view `OptimizedTransactionViewSet` declares no `permission_classes` \u2014 core/optimizations.py:333"}, "properties": {"repobilityId": "0c61ab77956ab98b", "scanner": "scanner-primary", "fingerprint": "39235fcb2366df1d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/optimizations.py"}, "region": {"startLine": 333}}}]}, {"ruleId": "scanner-ad9c157aa17f476b", "level": "error", "message": {"text": "DRF view `CachedStatsViewSet` declares no `permission_classes` \u2014 core/optimizations.py:389"}, "properties": {"repobilityId": "e08d5b7a3c39feb5", "scanner": "scanner-primary", "fingerprint": "ad9c157aa17f476b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/optimizations.py"}, "region": {"startLine": 389}}}]}, {"ruleId": "scanner-6bde442389f1ebcd", "level": "warning", "message": {"text": "Django view `get_client_ip` may be unauthenticated \u2014 core/api_views.py:41"}, "properties": {"repobilityId": "a6a39152ef07910d", "scanner": "scanner-primary", "fingerprint": "6bde442389f1ebcd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-3145564fb71cc80f", "level": "warning", "message": {"text": "Django view `health_check` may be unauthenticated \u2014 core/api_views.py:689"}, "properties": {"repobilityId": "5eb68cd333508ae4", "scanner": "scanner-primary", "fingerprint": "3145564fb71cc80f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 689}}}]}, {"ruleId": "scanner-44a0fdcc10b154c9", "level": "warning", "message": {"text": "Django view `maintenance_health_check` may be unauthenticated \u2014 core/api_views.py:1173"}, "properties": {"repobilityId": "6af953395b9b7091", "scanner": "scanner-primary", "fingerprint": "44a0fdcc10b154c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 1173}}}]}, {"ruleId": "scanner-6715b1113ac3cd21", "level": "warning", "message": {"text": "Django view `maintenance_clear_logs` may be unauthenticated \u2014 core/api_views.py:1242"}, "properties": {"repobilityId": "e11f4f542fe70a8e", "scanner": "scanner-primary", "fingerprint": "6715b1113ac3cd21", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 1242}}}]}, {"ruleId": "scanner-63699b21486fa51d", "level": "warning", "message": {"text": "Django view `maintenance_clear_cache` may be unauthenticated \u2014 core/api_views.py:1259"}, "properties": {"repobilityId": "c390cf31a887c0e9", "scanner": "scanner-primary", "fingerprint": "63699b21486fa51d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 1259}}}]}, {"ruleId": "scanner-b63ece78cc03f5ff", "level": "warning", "message": {"text": "Django view `maintenance_clear_sessions` may be unauthenticated \u2014 core/api_views.py:1276"}, "properties": {"repobilityId": "e1ef30009db4a423", "scanner": "scanner-primary", "fingerprint": "b63ece78cc03f5ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 1276}}}]}, {"ruleId": "scanner-64662a6cf7e8e7e5", "level": "warning", "message": {"text": "Django view `maintenance_optimize_db` may be unauthenticated \u2014 core/api_views.py:1296"}, "properties": {"repobilityId": "f500cf06c2801085", "scanner": "scanner-primary", "fingerprint": "64662a6cf7e8e7e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/api_views.py"}, "region": {"startLine": 1296}}}]}, {"ruleId": "scanner-712f8e895e9b9f5a", "level": "warning", "message": {"text": "Django view `send_biometric_reminder` may be unauthenticated \u2014 contracts/api_views.py:3984"}, "properties": {"repobilityId": "93c1d756831f9b59", "scanner": "scanner-primary", "fingerprint": "712f8e895e9b9f5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/api_views.py"}, "region": {"startLine": 3984}}}]}, {"ruleId": "scanner-8a54fa802fb2358b", "level": "warning", "message": {"text": "Django view `confirm_key_delivery` may be unauthenticated \u2014 contracts/api_views.py:4080"}, "properties": {"repobilityId": "f36bb513bb8deb2c", "scanner": "scanner-primary", "fingerprint": "8a54fa802fb2358b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/api_views.py"}, "region": {"startLine": 4080}}}]}, {"ruleId": "scanner-71d2d3580df5974c", "level": "warning", "message": {"text": "Django view `start_contract_execution` may be unauthenticated \u2014 contracts/api_views.py:4139"}, "properties": {"repobilityId": "5dbd04eff2c09e17", "scanner": "scanner-primary", "fingerprint": "71d2d3580df5974c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["auth", "owasp", "auth.django.unauth_view"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/api_views.py"}, "region": {"startLine": 4139}}}]}, {"ruleId": "scanner-a686f01b839cb5ab", "level": "error", "message": {"text": "DRF view `StartBiometricAuthenticationAPIView` declares no `permission_classes` \u2014 contracts/api_views.py:1517"}, "properties": {"repobilityId": "e27302cf2781eeeb", "scanner": "scanner-primary", "fingerprint": "a686f01b839cb5ab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contracts/api_views.py"}, "region": {"startLine": 1517}}}]}, {"ruleId": "scanner-68140d8664d62d23", "level": "error", "message": {"text": "DRF view `PropertyViewSet` declares no `permission_classes` \u2014 properties/api_views.py:60"}, "properties": {"repobilityId": "d06a2cf737ae5239", "scanner": "scanner-primary", "fingerprint": "68140d8664d62d23", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "properties/api_views.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-f6f9b0b271b11e0e", "level": "error", "message": {"text": "DRF view `OptimizedPropertyViewSet` declares no `permission_classes` \u2014 properties/optimized_views.py:57"}, "properties": {"repobilityId": "dfba1a2e3122a5b3", "scanner": "scanner-primary", "fingerprint": "f6f9b0b271b11e0e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.drf.no_permission_classes"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "properties/optimized_views.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-252b9f81a8abdf1d", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:18)"}, "properties": {"repobilityId": "57b27688c50d3544", "scanner": "scanner-primary", "fingerprint": "252b9f81a8abdf1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e08fc9e7706e503", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:51)"}, "properties": {"repobilityId": "5203e7c28111b94b", "scanner": "scanner-primary", "fingerprint": "6e08fc9e7706e503", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81f6bb05cb60f0df", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:8000/api/properties/ (frontend/scripts/testing/quick_test.js:65)"}, "properties": {"repobilityId": "0dcc7818e03cb449", "scanner": "scanner-primary", "fingerprint": "81f6bb05cb60f0df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aad4133012419207", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/users/${candidateId}/evaluation/ (frontend/src/components/requests/CandidateEvaluationView.tsx:234)"}, "properties": {"repobilityId": "4d4099c895a94ade", "scanner": "scanner-primary", "fingerprint": "aad4133012419207", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-164bf1d259de0afa", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/payments/PaymentsErrorBoundary.tsx:90)"}, "properties": {"repobilityId": "c9af74dce2c31f68", "scanner": "scanner-primary", "fingerprint": "164bf1d259de0afa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30b95236d1b85164", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/contracts/workflow-action/ (frontend/src/components/contracts/LandlordContractForm.tsx:1033)"}, "properties": {"repobilityId": "88237a1a157027c6", "scanner": "scanner-primary", "fingerprint": "30b95236d1b85164", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad9581ca2e7f69e1", "level": "error", "message": {"text": "Dangling fetch: GET https://api.ipify.org?format=json (frontend/src/components/contracts/BiometricContractSigning.tsx:309)"}, "properties": {"repobilityId": "8938369f5e0236b4", "scanner": "scanner-primary", "fingerprint": "ad9581ca2e7f69e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa6d3f4ac5bc6809", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/requests/api/documents/process/${processId}/checklist/ (frontend/src/components/contracts/LandlordDocumentReview.tsx:122)"}, "properties": {"repobilityId": "12e7e4b780b2e757", "scanner": "scanner-primary", "fingerprint": "aa6d3f4ac5bc6809", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d49d079350d04d76", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/contracts/${contractId}/additional-clauses/ (frontend/src/components/contracts/ContractClausesEditor.tsx:89)"}, "properties": {"repobilityId": "a9ad54e9219675cb", "scanner": "scanner-primary", "fingerprint": "d49d079350d04d76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4b932ed5f31b3f8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/contracts/${contractId}/additional-clauses/${clause.id}/ (frontend/src/components/contracts/ContractClausesEditor.tsx:141)"}, "properties": {"repobilityId": "506b66369d661740", "scanner": "scanner-primary", "fingerprint": "b4b932ed5f31b3f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e773aee4938093c1", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/contracts/ContractsErrorBoundary.tsx:92)"}, "properties": {"repobilityId": "2696dfed82155623", "scanner": "scanner-primary", "fingerprint": "e773aee4938093c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5165f720a1b6903f", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/core/log-error/ (frontend/src/components/ratings/RatingsErrorBoundary.tsx:90)"}, "properties": {"repobilityId": "0544e1e6e1210ded", "scanner": "scanner-primary", "fingerprint": "5165f720a1b6903f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba907a190e09803d", "level": "error", "message": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search (frontend/src/components/properties/PropertyForm.tsx:458)"}, "properties": {"repobilityId": "0e99c9fc45e589fb", "scanner": "scanner-primary", "fingerprint": "ba907a190e09803d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-9c69ee318b9266ca", "level": "error", "message": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(addressInput)}.json (frontend/src/components/properties/PropertyForm.tsx:512)"}, "properties": {"repobilityId": "067614e8eb74333b", "scanner": "scanner-primary", "fingerprint": "9c69ee318b9266ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f0bc9cc6321dcd1f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${lng},${lat}.json (frontend/src/components/properties/PropertyForm.tsx:686)"}, "properties": {"repobilityId": "f3ae10d9222a04b4", "scanner": "scanner-primary", "fingerprint": "f0bc9cc6321dcd1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-0cb8503c8ec88bf9", "level": "error", "message": {"text": "Dangling fetch: GET https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(query)}.json (frontend/src/components/properties/PropertyForm.tsx:775)"}, "properties": {"repobilityId": "db1fd0139839aa4b", "scanner": "scanner-primary", "fingerprint": "0cb8503c8ec88bf9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-30fe3dca02c0953e", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/users/auth/resend-confirmation/ (frontend/src/pages/auth/EmailVerification.tsx:31)"}, "properties": {"repobilityId": "db430b2100b764e8", "scanner": "scanner-primary", "fingerprint": "30fe3dca02c0953e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8acd4b9851ee387b", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/users/auth/validate-interview-code/ (frontend/src/pages/auth/RegisterWithCode.tsx:173)"}, "properties": {"repobilityId": "1ba9a3ea7e9d3efa", "scanner": "scanner-primary", "fingerprint": "8acd4b9851ee387b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a88857e86af8d33", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/push/subscribe/ (frontend/src/hooks/useServiceWorker.ts:267)"}, "properties": {"repobilityId": "c87d0dbf7ccb2911", "scanner": "scanner-primary", "fingerprint": "0a88857e86af8d33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0e957969a9ac9c0", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/push/unsubscribe/ (frontend/src/hooks/useServiceWorker.ts:291)"}, "properties": {"repobilityId": "3d481b0213e352d1", "scanner": "scanner-primary", "fingerprint": "a0e957969a9ac9c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5358b81ef05aabdc", "level": "error", "message": {"text": "Dangling fetch: HEAD /api/v1/users/auth/login/ (frontend/src/services/loggingService.ts:619)"}, "properties": {"repobilityId": "e8ec849fc457e40a", "scanner": "scanner-primary", "fingerprint": "5358b81ef05aabdc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b117fecf3d6ee90", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/registro/seleccionar/"}, "properties": {"repobilityId": "b3e5738506afe083", "scanner": "scanner-primary", "fingerprint": "3b117fecf3d6ee90", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c13f96fce92e8cd9", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/registro/entrevista/"}, "properties": {"repobilityId": "a743524227dcdee3", "scanner": "scanner-primary", "fingerprint": "c13f96fce92e8cd9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb9fcd34d47eee11", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/perfil/"}, "properties": {"repobilityId": "39f3ba93f85555e5", "scanner": "scanner-primary", "fingerprint": "fb9fcd34d47eee11", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb986a19acdd6d84", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/perfil/editar/"}, "properties": {"repobilityId": "0ed369beb3cca9ba", "scanner": "scanner-primary", "fingerprint": "fb986a19acdd6d84", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8c7f6adc0804809", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/configuracion/"}, "properties": {"repobilityId": "85b4cfbb8fe3859e", "scanner": "scanner-primary", "fingerprint": "d8c7f6adc0804809", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d40613c20d953748", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/hoja-vida/"}, "properties": {"repobilityId": "a9b5282a87721496", "scanner": "scanner-primary", "fingerprint": "d40613c20d953748", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d546f49202c03b80", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/hoja-vida/editar/"}, "properties": {"repobilityId": "bf5838f98da35889", "scanner": "scanner-primary", "fingerprint": "d546f49202c03b80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6080d16bf9a32df0", "level": "note", "message": {"text": "Unused endpoint: ANY /usuarios/proveedores-servicios/"}, "properties": {"repobilityId": "62e4118b319b0e62", "scanner": "scanner-primary", "fingerprint": "6080d16bf9a32df0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4122ff290b2b608", "level": "note", "message": {"text": "Unused endpoint: ANY /activity/"}, "properties": {"repobilityId": "a903482abe2041c4", "scanner": "scanner-primary", "fingerprint": "d4122ff290b2b608", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b05cd6195cd8ac52", "level": "note", "message": {"text": "Unused endpoint: ANY /activity/history/"}, "properties": {"repobilityId": "9f8d48f5384532e0", "scanner": "scanner-primary", "fingerprint": "b05cd6195cd8ac52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d36c3f9004bc12cb", "level": "note", "message": {"text": "Unused endpoint: ANY /activity/<int:activity_id>/"}, "properties": {"repobilityId": "fa3ece52c5d585f5", "scanner": "scanner-primary", "fingerprint": "d36c3f9004bc12cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-933d54fc711c54e9", "level": "note", "message": {"text": "Unused endpoint: ANY /admin-actions/"}, "properties": {"repobilityId": "85952fd8f74b3778", "scanner": "scanner-primary", "fingerprint": "933d54fc711c54e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ad4e26e33e376fe", "level": "note", "message": {"text": "Unused endpoint: ANY /admin-actions/<int:action_id>/"}, "properties": {"repobilityId": "1826f52ba24b5b86", "scanner": "scanner-primary", "fingerprint": "9ad4e26e33e376fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53ac11e6a6fe53c6", "level": "note", "message": {"text": "Unused endpoint: ANY /notifications/"}, "properties": {"repobilityId": "28af35a647d72a01", "scanner": "scanner-primary", "fingerprint": "53ac11e6a6fe53c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c79b660a2cfe0f4a", "level": "note", "message": {"text": "Unused endpoint: ANY /notifications/<int:notification_id>/read/"}, "properties": {"repobilityId": "f0dd1ef08c2ebbc4", "scanner": "scanner-primary", "fingerprint": "c79b660a2cfe0f4a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-425d5f3ff5c1b0a2", "level": "note", "message": {"text": "Unused endpoint: ANY /notifications/read-all/"}, "properties": {"repobilityId": "2ad804782d56afdb", "scanner": "scanner-primary", "fingerprint": "425d5f3ff5c1b0a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-30bfaef908309621", "level": "note", "message": {"text": "Unused endpoint: ANY /impersonation-history/"}, "properties": {"repobilityId": "e9125f03de8e9a75", "scanner": "scanner-primary", "fingerprint": "30bfaef908309621", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05f1e498b5830810", "level": "note", "message": {"text": "Unused endpoint: ANY /api/activity-summary/"}, "properties": {"repobilityId": "f1dac6637e5c1934", "scanner": "scanner-primary", "fingerprint": "05f1e498b5830810", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9a17834978cef33", "level": "note", "message": {"text": "Unused endpoint: ANY /api/notifications/"}, "properties": {"repobilityId": "ed207196187ca0bd", "scanner": "scanner-primary", "fingerprint": "e9a17834978cef33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9f7b3d2a7c94cd81", "level": "note", "message": {"text": "Unused endpoint: ANY /api/admin-actions/"}, "properties": {"repobilityId": "02e0fd24634e2bc1", "scanner": "scanner-primary", "fingerprint": "9f7b3d2a7c94cd81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f73b32453d4ad2ba", "level": "note", "message": {"text": "Unused endpoint: ANY /api/notifications/<int:notification_id>/read/"}, "properties": {"repobilityId": "b5d4711dc6714f5a", "scanner": "scanner-primary", "fingerprint": "f73b32453d4ad2ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d949087c1747c46e", "level": "note", "message": {"text": "Unused endpoint: ANY /interview/validate-interview-code/"}, "properties": {"repobilityId": "a46d55663a47aab7", "scanner": "scanner-primary", "fingerprint": "d949087c1747c46e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4b87e9ebeab06b1", "level": "note", "message": {"text": "Unused endpoint: ANY /interview/contact/"}, "properties": {"repobilityId": "4f041f55de33e18f", "scanner": "scanner-primary", "fingerprint": "c4b87e9ebeab06b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db06572c075f679f", "level": "note", "message": {"text": "Unused endpoint: ANY /interview/register-with-code/"}, "properties": {"repobilityId": "7bab9918b0a153fb", "scanner": "scanner-primary", "fingerprint": "db06572c075f679f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36e1e761039e9553", "level": "note", "message": {"text": "Unused endpoint: ANY /interview/admin/"}, "properties": {"repobilityId": "04650904acb51b05", "scanner": "scanner-primary", "fingerprint": "36e1e761039e9553", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23200623d0053e2c", "level": "note", "message": {"text": "Unused endpoint: ANY /interview/codes"}, "properties": {"repobilityId": "96feb9d4f28ffd81", "scanner": "scanner-primary", "fingerprint": "23200623d0053e2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f3e025ba02c54c3", "level": "note", "message": {"text": "Unused endpoint: ANY /interview/contact-requests"}, "properties": {"repobilityId": "dd0a3bcb4ca16d30", "scanner": "scanner-primary", "fingerprint": "6f3e025ba02c54c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f112f8c352002d5", "level": "note", "message": {"text": "Unused endpoint: ANY /users/activity-logs/stats/"}, "properties": {"repobilityId": "89eb03c4b2d8d0e8", "scanner": "scanner-primary", "fingerprint": "6f112f8c352002d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7235087f79fb4aec", "level": "note", "message": {"text": "Unused endpoint: ANY /users/activity-logs/create/"}, "properties": {"repobilityId": "a8600cf96ce468f8", "scanner": "scanner-primary", "fingerprint": "7235087f79fb4aec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85b521c74e581139", "level": "note", "message": {"text": "Unused endpoint: ANY /users/activity-logs/types/"}, "properties": {"repobilityId": "748f3986c939026e", "scanner": "scanner-primary", "fingerprint": "85b521c74e581139", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-31456975f08f322f", "level": "note", "message": {"text": "Unused endpoint: ANY /users/"}, "properties": {"repobilityId": "e017211a820fdffb", "scanner": "scanner-primary", "fingerprint": "31456975f08f322f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74cfaa52eb54e5a7", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/login/"}, "properties": {"repobilityId": "36e0462bb4f15073", "scanner": "scanner-primary", "fingerprint": "74cfaa52eb54e5a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-866632ed487efa9f", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/refresh/"}, "properties": {"repobilityId": "7f244d8c56a07bee", "scanner": "scanner-primary", "fingerprint": "866632ed487efa9f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e47738b52c45286a", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/me/"}, "properties": {"repobilityId": "df70e8e0950db349", "scanner": "scanner-primary", "fingerprint": "e47738b52c45286a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d6839ad52cff86c3", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/logout/"}, "properties": {"repobilityId": "a950c6071765f989", "scanner": "scanner-primary", "fingerprint": "d6839ad52cff86c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e8d3af8fe488124", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/confirm-email/<path:key>/"}, "properties": {"repobilityId": "cf836099d3f1d5a0", "scanner": "scanner-primary", "fingerprint": "6e8d3af8fe488124", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2dc1e27d9c26bdef", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/resend-confirmation/"}, "properties": {"repobilityId": "7ff5aaa9e90a6143", "scanner": "scanner-primary", "fingerprint": "2dc1e27d9c26bdef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f96feaab3f9ee55d", "level": "note", "message": {"text": "Unused endpoint: ANY /users/interview/"}, "properties": {"repobilityId": "41e4da8a03591c43", "scanner": "scanner-primary", "fingerprint": "f96feaab3f9ee55d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7552f4d8add96754", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/register/"}, "properties": {"repobilityId": "ce24179e52602f1e", "scanner": "scanner-primary", "fingerprint": "7552f4d8add96754", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e3c1a3f271e47b9", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/register-with-interview/"}, "properties": {"repobilityId": "9057528497400ac2", "scanner": "scanner-primary", "fingerprint": "9e3c1a3f271e47b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c2583f74fb04793", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/register-with-code/"}, "properties": {"repobilityId": "22d25b7b79e9acf8", "scanner": "scanner-primary", "fingerprint": "6c2583f74fb04793", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1e3937b77555dbe2", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/validate-interview-code/"}, "properties": {"repobilityId": "6c627e86385cca81", "scanner": "scanner-primary", "fingerprint": "1e3937b77555dbe2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60e89f3c03e0f2cc", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/change-password/"}, "properties": {"repobilityId": "fb5169c4d1b9387f", "scanner": "scanner-primary", "fingerprint": "60e89f3c03e0f2cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18e020aede51116d", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/forgot-password/"}, "properties": {"repobilityId": "b43685b822eff383", "scanner": "scanner-primary", "fingerprint": "18e020aede51116d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48f7b0e71252a8a1", "level": "note", "message": {"text": "Unused endpoint: ANY /users/auth/reset-password/"}, "properties": {"repobilityId": "12065d6c5daaaa1a", "scanner": "scanner-primary", "fingerprint": "48f7b0e71252a8a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-892047e6dd493ca2", "level": "note", "message": {"text": "Unused endpoint: ANY /users/contact/"}, "properties": {"repobilityId": "05ce750cea774f62", "scanner": "scanner-primary", "fingerprint": "892047e6dd493ca2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-73e6ebbbecc03460", "level": "note", "message": {"text": "Unused endpoint: ANY /users/verification/request/"}, "properties": {"repobilityId": "7803aee6e5b2c567", "scanner": "scanner-primary", "fingerprint": "73e6ebbbecc03460", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25c26454ea89fe26", "level": "note", "message": {"text": "Unused endpoint: ANY /users/verification/upload-documents/"}, "properties": {"repobilityId": "e24bf8d1aebd4ff0", "scanner": "scanner-primary", "fingerprint": "25c26454ea89fe26", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-78332954a6a678bd", "level": "note", "message": {"text": "Unused endpoint: ANY /users/verification/status/"}, "properties": {"repobilityId": "209c6fcf7c11b191", "scanner": "scanner-primary", "fingerprint": "78332954a6a678bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5514ddbcb51f2864", "level": "note", "message": {"text": "Unused endpoint: ANY /users/search/"}, "properties": {"repobilityId": "953924e5acda18e8", "scanner": "scanner-primary", "fingerprint": "5514ddbcb51f2864", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}