{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3d738af96ae16a3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Navbar.tsx:463", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Navbar.tsx:463"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbaa67df4c448e02", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/legal/ConsentScripts.tsx:34", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/legal/ConsentScripts.tsx:34"}, "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-8a678dd212c96691", "name": "`truncate` class without `title=` for hover reveal \u2014 components/move-in/SearchFields.tsx:304", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/move-in/SearchFields.tsx:304"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a339fb1b60ee848", "name": "`truncate` class without `title=` for hover reveal \u2014 components/move-in/StepLease.tsx:188", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/move-in/StepLease.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b64a26c1a6553f87", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/home/FAQSection.tsx:103", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/home/FAQSection.tsx:103"}, "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-00dfc7f78d847c08", "name": "`truncate` class without `title=` for hover reveal \u2014 components/home/MapSection.tsx:196", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/home/MapSection.tsx:196"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb00801ca4fbcb25", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ui/Modal.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ui/Modal.tsx:71"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32452c02eaf109e5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/seo/StructuredData.tsx:8", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/seo/StructuredData.tsx:8"}, "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-32ae76fe938efb85", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/daily/route.ts:869", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/daily/route.ts:869"}, "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-ab8ff34790ef58cb", "name": "TODO/FIXME marker in shipping code \u2014 app/api/checkin/route.ts:199", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/checkin/route.ts:199"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7209f5e0b4c9cae", "name": "Stray `console.log` in TS/JS \u2014 app/api/checkin/route.ts:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/checkin/route.ts:127"}, "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-994701a21839fcf4", "name": "`truncate` class without `title=` for hover reveal \u2014 app/locations/[slug]/page.tsx:1290", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/locations/[slug]/page.tsx:1290"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25339a93562c9eee", "name": "`truncate` class without `title=` for hover reveal \u2014 app/preview/page.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/preview/page.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6992e011424a0219", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/BookingsPage.tsx:1024", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/BookingsPage.tsx:1024"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d164a6943adb7cf4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/admin/layout.tsx:26", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/admin/layout.tsx:26"}, "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-4f9fe05f4d9afb84", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/AdminShell.tsx:517", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/AdminShell.tsx:517"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b3d4740f7d399e6", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 app/admin/AdminShell.tsx:344", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 app/admin/AdminShell.tsx:344"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-82b7b33848084653", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/mist/MistConsole.tsx:946", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/mist/MistConsole.tsx:946"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e57922d93d1cd9b3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/housekeeping/HousekeepingPage.tsx:1061", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/housekeeping/HousekeepingPage.tsx:1061"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-306342f1a4255c81", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/tenants/TenantsPage.tsx:878", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/tenants/TenantsPage.tsx:878"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf73e3a5c90ab40f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/tenants/[id]/TenantFolioPage.tsx:1395", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/tenants/[id]/TenantFolioPage.tsx:1395"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ebfac7b5c1ab156", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/audit/AuditPage.tsx:631", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/audit/AuditPage.tsx:631"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8cfcc2dfb92ec304", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/emails/EmailsPage.tsx:896", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/emails/EmailsPage.tsx:896"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd02260648387b47", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/deposits/DepositsPage.tsx:1272", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/deposits/DepositsPage.tsx:1272"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa25ae1dff6bef32", "name": "\"active\" state uses light bg in a dark theme \u2014 app/admin/deposits/DepositsPage.tsx:1859", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 app/admin/deposits/DepositsPage.tsx:1859"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c69a87262105e70f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/rooms/RoomsPage.tsx:945", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/rooms/RoomsPage.tsx:945"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14d07500054bc45b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/pricing/PricingPage.tsx:306", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/pricing/PricingPage.tsx:306"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1219df3831ce9c61", "name": "Stray `console.log` in TS/JS \u2014 lib/observability.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/observability.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e989407fb9e996c", "name": "Stray `console.log` in TS/JS \u2014 lib/test-mode.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/test-mode.ts: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-940a712a823a2a9d", "name": "Insecure pattern 'exec_used' in scripts/test-mietvertrag.mjs:120", "shortDescription": {"text": "Insecure pattern 'exec_used' in scripts/test-mietvertrag.mjs:120"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e2c1ff67a724d64", "name": "Insecure pattern 'node_child_process' in scripts/test-mietvertrag.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/test-mietvertrag.mjs: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-9bcd841c2e30df5d", "name": "Insecure pattern 'dangerous_innerhtml' in components/legal/ConsentScripts.tsx:34", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/legal/ConsentScripts.tsx:34"}, "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-a0429a44eae74991", "name": "Insecure pattern 'direct_innerhtml_assignment' in components/ui/LocationMap.tsx:87", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in components/ui/LocationMap.tsx:87"}, "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-c2274cd539a897a4", "name": "Insecure pattern 'dangerous_innerhtml' in components/home/FAQSection.tsx:103", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/home/FAQSection.tsx:103"}, "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-96720bbad52f72ae", "name": "Insecure pattern 'direct_innerhtml_assignment' in app/locations/[slug]/page.tsx:153", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app/locations/[slug]/page.tsx:153"}, "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-dce7cf279d25064b", "name": "Insecure pattern 'local_storage_auth_token' in app/admin/BookingsPage.tsx:1361", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in app/admin/BookingsPage.tsx:1361"}, "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-78c5b0a44a0a75e9", "name": "Insecure pattern 'dangerous_innerhtml' in app/admin/layout.tsx:26", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/admin/layout.tsx:26"}, "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-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e475b8e3b4ee26e", "name": "Very large file: app/api/cron/daily/route.ts (1538 lines)", "shortDescription": {"text": "Very large file: app/api/cron/daily/route.ts (1538 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-b6ac2d828d12f003", "name": "Very large file: app/api/webhooks/stripe/route.ts (1553 lines)", "shortDescription": {"text": "Very large file: app/api/webhooks/stripe/route.ts (1553 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-5b6e10001034d828", "name": "Very large file: app/move-in/page.tsx (1932 lines)", "shortDescription": {"text": "Very large file: app/move-in/page.tsx (1932 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-a829727ed8ab9d85", "name": "Very large file: app/locations/[slug]/page.tsx (1409 lines)", "shortDescription": {"text": "Very large file: app/locations/[slug]/page.tsx (1409 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-df720dedaa74fa06", "name": "Very large file: app/admin/BookingsPage.tsx (2353 lines)", "shortDescription": {"text": "Very large file: app/admin/BookingsPage.tsx (2353 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-bc7ef0b0e529c005", "name": "Very large file: app/admin/tenants/TenantsPage.tsx (1463 lines)", "shortDescription": {"text": "Very large file: app/admin/tenants/TenantsPage.tsx (1463 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-f15c3de0e20740e5", "name": "Very large file: app/admin/tenants/[id]/TenantFolioPage.tsx (5572 lines)", "shortDescription": {"text": "Very large file: app/admin/tenants/[id]/TenantFolioPage.tsx (5572 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-501c47546c66c88b", "name": "Very large file: app/admin/finance/FinancePage.tsx (2525 lines)", "shortDescription": {"text": "Very large file: app/admin/finance/FinancePage.tsx (2525 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-03c5fac12e280282", "name": "Very large file: app/admin/deposits/DepositsPage.tsx (1952 lines)", "shortDescription": {"text": "Very large file: app/admin/deposits/DepositsPage.tsx (1952 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-88937db96ffc6038", "name": "Very large file: app/admin/rooms/RoomsPage.tsx (2322 lines)", "shortDescription": {"text": "Very large file: app/admin/rooms/RoomsPage.tsx (2322 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-f77a230375cbb66e", "name": "Very large file: lib/apaleo.ts (1609 lines)", "shortDescription": {"text": "Very large file: lib/apaleo.ts (1609 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-ad16c4a74b44f789", "name": "Very large file: lib/data.ts (1322 lines)", "shortDescription": {"text": "Very large file: lib/data.ts (1322 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "17 test file(s) for 323 source file(s) (ratio 0.05). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 99 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 322 placeholder/mock markers across 41 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07d4a26774225679", "name": "Commented-code block (5 lines) in eslint.config.mjs:18", "shortDescription": {"text": "Commented-code block (5 lines) in eslint.config.mjs:18"}, "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-72b693a9aeb4b9f3", "name": "Commented-code block (6 lines) in next.config.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in next.config.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-128e9b8673e9b8b0", "name": "Commented-code block (5 lines) in scripts/golive-cron-safety-check.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/golive-cron-safety-check.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e266a6eb37014e4d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backup-originals-to-drive.mjs:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backup-originals-to-drive.mjs:55"}, "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-1279f6031f1b189b", "name": "Commented-code block (6 lines) in scripts/seed-golive-cron-fixtures.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/seed-golive-cron-fixtures.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef297236f68d0dbc", "name": "Commented-code block (6 lines) in components/layout/Navbar.tsx:60", "shortDescription": {"text": "Commented-code block (6 lines) in components/layout/Navbar.tsx:60"}, "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-bb451351e083ed3a", "name": "Commented-code block (6 lines) in components/ui/LocationMap.tsx:213", "shortDescription": {"text": "Commented-code block (6 lines) in components/ui/LocationMap.tsx:213"}, "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-1874176f6494cd3e", "name": "Commented-code block (11 lines) in components/move-in/SearchFields.tsx:65", "shortDescription": {"text": "Commented-code block (11 lines) in components/move-in/SearchFields.tsx: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-14d0e7e11a65ab21", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/move-in/SearchFields.tsx:129", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/move-in/SearchFields.tsx:129"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c7deab91916a725", "name": "Commented-code block (5 lines) in components/move-in/StepLease.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in components/move-in/StepLease.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7b6d74d8c5c488b", "name": "Commented-code block (5 lines) in components/move-in/StepAboutYou.tsx:390", "shortDescription": {"text": "Commented-code block (5 lines) in components/move-in/StepAboutYou.tsx:390"}, "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-ad047d23c183a55a", "name": "Commented-code block (6 lines) in components/home/FAQSection.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in components/home/FAQSection.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88964673960bb581", "name": "Commented-code block (6 lines) in components/home/VideoSection.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in components/home/VideoSection.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d4c32fc5c0c8d1e", "name": "Commented-code block (5 lines) in components/home/MapSection.tsx:23", "shortDescription": {"text": "Commented-code block (5 lines) in components/home/MapSection.tsx:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8375e574e4e72afb", "name": "Commented-code block (5 lines) in components/admin/ui/portal.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in components/admin/ui/portal.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7c7155386849970", "name": "Commented-code block (5 lines) in components/admin/ui/DataTable.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in components/admin/ui/DataTable.tsx: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-9ade2ff2eca673c3", "name": "Commented-code block (5 lines) in components/admin/ui/Toast.tsx:49", "shortDescription": {"text": "Commented-code block (5 lines) in components/admin/ui/Toast.tsx:49"}, "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-db111f57b48396bf", "name": "Commented-code block (5 lines) in components/seo/StructuredData.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in components/seo/StructuredData.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bbf34fb4be8a40d", "name": "Commented-code block (5 lines) in app/robots.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in app/robots.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8aa5f7302ed4427b", "name": "Commented-code block (6 lines) in app/template.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in app/template.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cbb0cb8f04a5db3", "name": "Commented-code block (5 lines) in app/page.tsx:63", "shortDescription": {"text": "Commented-code block (5 lines) in app/page.tsx:63"}, "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-f6d86cb3659f83f2", "name": "Commented-code block (5 lines) in app/api/short-availability-calendar/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/short-availability-calendar/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5e7ada3129a249d", "name": "Commented-code block (6 lines) in app/api/move-out/refund-iban/route.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/move-out/refund-iban/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fca08e3671cbf082", "name": "Commented-code block (9 lines) in app/api/locations/stats/route.ts:7", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/locations/stats/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41991ea1397923db", "name": "Commented-code block (5 lines) in app/api/recent-bookings/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/recent-bookings/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9a9071da3377f13", "name": "Commented-code block (5 lines) in app/api/booking/route.ts:183", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/booking/route.ts:183"}, "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-2a84fbaaa9e68700", "name": "Commented-code block (5 lines) in app/api/admin/rent/route.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/rent/route.ts:62"}, "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-2781aec418854a59", "name": "Commented-code block (6 lines) in app/api/admin/tenants/route.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/tenants/route.ts:33"}, "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-60121212df6200a5", "name": "Commented-code block (5 lines) in app/api/admin/tenants/[id]/withdraw/route.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/tenants/[id]/withdraw/route.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-c32000280063e7af", "name": "Commented-code block (5 lines) in app/api/admin/ota-ops/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/ota-ops/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-078b860a3bf6d9aa", "name": "Commented-code block (7 lines) in app/api/admin/emails/send-test/route.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/admin/emails/send-test/route.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-062fe9923283a8b8", "name": "Commented-code block (6 lines) in app/api/admin/rooms/[id]/place-tenant/route.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/rooms/[id]/place-tenant/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d7db170f0eb0c96", "name": "Commented-code block (7 lines) in app/api/dev/test-slack-alert/route.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/dev/test-slack-alert/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f224d9918f2c6d5", "name": "Commented-code block (7 lines) in app/api/dev/test-drive/route.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/dev/test-drive/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9e6bc8b3b7b2509", "name": "Commented-code block (5 lines) in app/api/payment-setup/sepa/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/payment-setup/sepa/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22bd75eee090656d", "name": "Commented-code block (5 lines) in app/api/cron/daily/route.ts:50", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cron/daily/route.ts:50"}, "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-8d14690a31ee066a", "name": "Commented-code block (5 lines) in app/api/checkin/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/checkin/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da0c7a951c1af45b", "name": "Legacy-named symbol `card_backup` in app/api/deposit/card/route.ts:64", "shortDescription": {"text": "Legacy-named symbol `card_backup` in app/api/deposit/card/route.ts:64"}, "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-db00de46a858abfc", "name": "Commented-code block (5 lines) in app/api/deposit/card/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/deposit/card/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0c57bf18fafa429", "name": "Commented-code block (5 lines) in app/api/deposit/sepa/route.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/deposit/sepa/route.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ae6e7f01baaaf58", "name": "Commented-code block (7 lines) in app/api/webhooks/apaleo/route.ts:17", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/webhooks/apaleo/route.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b081ebc149e53f7", "name": "Legacy-named symbol `card_backup` in app/api/webhooks/stripe/route.ts:457", "shortDescription": {"text": "Legacy-named symbol `card_backup` in app/api/webhooks/stripe/route.ts:457"}, "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-924cd9a91230fb1b", "name": "Commented-code block (7 lines) in app/api/webhooks/stripe/route.ts:40", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/webhooks/stripe/route.ts:40"}, "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-cedd1b2c882c3400", "name": "Commented-code block (5 lines) in app/api/feedback/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/feedback/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e294f1cfb4914363", "name": "Commented-code block (5 lines) in app/move-in/page.tsx:147", "shortDescription": {"text": "Commented-code block (5 lines) in app/move-in/page.tsx:147"}, "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-cfb87289d52b12e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/page.tsx:540", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/page.tsx:540"}, "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-7eae6c24832383ab", "name": "Commented-code block (5 lines) in app/move-in/layout.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/move-in/layout.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61a3dcaa0002ec9a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/_hooks/useAvailability.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/_hooks/useAvailability.ts:75"}, "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-f0bb2a9ad440b351", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/_hooks/usePaymentConfirmation.ts:149", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/_hooks/usePaymentConfirmation.ts:149"}, "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-83ab53204c454daa", "name": "Commented-code block (8 lines) in app/move-in/deposit-payment/page.tsx:69", "shortDescription": {"text": "Commented-code block (8 lines) in app/move-in/deposit-payment/page.tsx:69"}, "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-043ffa12872ba7a9", "name": "Commented-code block (5 lines) in app/move-in/payment-setup/page.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/move-in/payment-setup/page.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4db00871ca82e788", "name": "Commented-code block (6 lines) in app/move-in/deposit-success/page.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in app/move-in/deposit-success/page.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42a909699e082593", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/locations/[slug]/page.tsx:202", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/locations/[slug]/page.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-4103a230f2baecaf", "name": "Commented-code block (7 lines) in app/preview/page.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in app/preview/page.tsx: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-f7f80622dfcdf92c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/BookingsPage.tsx:1373", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/BookingsPage.tsx:1373"}, "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-eeaa778952b694c1", "name": "Commented-code block (5 lines) in app/admin/dashboard-data.ts:356", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/dashboard-data.ts:356"}, "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-547ca35d6f3e82c1", "name": "Commented-code block (6 lines) in app/admin/MistLauncher.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in app/admin/MistLauncher.tsx: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-243c7669db4ce9f0", "name": "Commented-code block (5 lines) in app/admin/mist/MistOrb.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/mist/MistOrb.tsx: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-ffe7e1da3fd7f292", "name": "Commented-code block (8 lines) in app/admin/bookings/page.tsx:9", "shortDescription": {"text": "Commented-code block (8 lines) in app/admin/bookings/page.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e5227f21e60e776", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/housekeeping/HousekeepingPage.tsx:561", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/housekeeping/HousekeepingPage.tsx:561"}, "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-d35b352b8d979d5e", "name": "Commented-code block (6 lines) in app/admin/tenants/[id]/TenantFolioPage.tsx:265", "shortDescription": {"text": "Commented-code block (6 lines) in app/admin/tenants/[id]/TenantFolioPage.tsx:265"}, "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-55e5db8c062e6244", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/tenants/[id]/TenantFolioPage.tsx:2136", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/tenants/[id]/TenantFolioPage.tsx:2136"}, "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-8f9c97430b8a18ee", "name": "Commented-code block (5 lines) in app/admin/tenants/[id]/page.tsx:39", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/tenants/[id]/page.tsx:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39edd12eea7c36cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/finance/FinancePage.tsx:1370", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/finance/FinancePage.tsx:1370"}, "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-a97f06f3d8c664ed", "name": "Legacy-named symbol `deposit_confirmation_card_backup` in app/admin/emails/EmailsPage.tsx:101", "shortDescription": {"text": "Legacy-named symbol `deposit_confirmation_card_backup` in app/admin/emails/EmailsPage.tsx:101"}, "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-598acdba48844b8e", "name": "Legacy-named symbol `deposit_confirmation_card_backup` in app/admin/emails/flow/catalog.ts:132", "shortDescription": {"text": "Legacy-named symbol `deposit_confirmation_card_backup` in app/admin/emails/flow/catalog.ts:132"}, "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-912ffa9dd1c95941", "name": "Legacy-named symbol `card_backup` in app/admin/emails/flow/journeys.ts:261", "shortDescription": {"text": "Legacy-named symbol `card_backup` in app/admin/emails/flow/journeys.ts:261"}, "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-7346dbe28d78a513", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/deposits/DepositsPage.tsx:1027", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/deposits/DepositsPage.tsx:1027"}, "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-81ff3cb91270ab72", "name": "Commented-code block (5 lines) in app/admin/rooms/page.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/rooms/page.tsx:12"}, "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-8800288f9092db87", "name": "Commented-code block (5 lines) in app/admin/rooms/RoomsPage.tsx:320", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/rooms/RoomsPage.tsx:320"}, "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-5abd9808c3590071", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/rooms/RoomsPage.tsx:2016", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/rooms/RoomsPage.tsx:2016"}, "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-b46fcaef707afdc6", "name": "Legacy-named symbol `totalOld` in app/dev/image-compare/page.tsx:83", "shortDescription": {"text": "Legacy-named symbol `totalOld` in app/dev/image-compare/page.tsx:83"}, "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-b84fa0b625321cbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/feedback/page.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/feedback/page.tsx:35"}, "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-e6b4ea906e7eb534", "name": "Commented-code block (5 lines) in lib/legal-content.ts:54", "shortDescription": {"text": "Commented-code block (5 lines) in lib/legal-content.ts:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c37feb95a1bfd9ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-drive.ts:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-drive.ts:45"}, "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-a2782b1683f8b2c3", "name": "Commented-code block (5 lines) in lib/stripe.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in lib/stripe.ts:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97c3cad789540ac2", "name": "Commented-code block (7 lines) in lib/rent-failure-alert.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in lib/rent-failure-alert.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8ca843430c5b411", "name": "Commented-code block (5 lines) in lib/apaleo.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in lib/apaleo.ts:121"}, "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-5c0ac38bce35ad91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/apaleo.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/apaleo.ts:23"}, "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-25352a779474bac0", "name": "Commented-code block (6 lines) in lib/rate-limit.ts:15", "shortDescription": {"text": "Commented-code block (6 lines) in lib/rate-limit.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74e1253d7d224283", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/yousign.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/yousign.ts:14"}, "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-0de74ad49dab9a44", "name": "Commented-code block (5 lines) in lib/availability.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/availability.ts: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-9992670af2f0b4d1", "name": "Commented-code block (5 lines) in lib/rent-charge.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in lib/rent-charge.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3056fea2aae21a23", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/mist/tools.ts:724", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/mist/tools.ts:724"}, "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-680f5a45adfdb4e2", "name": "Commented-code block (5 lines) in lib/email/team.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in lib/email/team.ts:20"}, "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-88e26de0c15d8a69", "name": "Legacy-named symbol `isOld` in lib/email/email-change.ts:30", "shortDescription": {"text": "Legacy-named symbol `isOld` in lib/email/email-change.ts:30"}, "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-6aa662a7491f3c8c", "name": "Commented-code block (5 lines) in lib/email/email-change.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in lib/email/email-change.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7045f4cd095b7945", "name": "Legacy-named symbol `deposit_confirmation_card_backup` in lib/email/deposit.ts:298", "shortDescription": {"text": "Legacy-named symbol `deposit_confirmation_card_backup` in lib/email/deposit.ts:298"}, "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-2eb72ce5166ad9d9", "name": "Commented-code block (5 lines) in lib/email/move-out-reminder.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in lib/email/move-out-reminder.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c31eb5e99925c06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/hooks/useShortCalendar.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/hooks/useShortCalendar.ts:18"}, "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-59b992d62d86a65a", "name": "25 env vars used in code but missing from .env.example", "shortDescription": {"text": "25 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_API_KEY`, `ENABLE_SHORT_STAY_EMAILS`, `GH_TOKEN`, `GITHUB_TOKEN`, `GOOGLE_DRIVE_FOLDER_ID`, `GOOGLE_DRIVE_LONGSTAY_FOLDER_ID`, `GOOGLE_SERVICE_ACCOUNT_EMAIL`, `GOOGLE_SERVICE_ACCOUNT_KEY` + 17 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}}]}}, "automationDetails": {"id": "repobility/20207"}, "properties": {"repository": "staceycoliving/stacey-website", "repoUrl": "https://github.com/staceycoliving/stacey-website", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d3d738af96ae16a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Navbar.tsx:463"}, "properties": {"repobilityId": "7fbb7f05ef2a1334", "scanner": "scanner-primary", "fingerprint": "d3d738af96ae16a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dbaa67df4c448e02", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/legal/ConsentScripts.tsx:34"}, "properties": {"repobilityId": "c6443e5fac253aea", "scanner": "scanner-primary", "fingerprint": "dbaa67df4c448e02", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8a678dd212c96691", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/move-in/SearchFields.tsx:304"}, "properties": {"repobilityId": "e44228cb9a50390c", "scanner": "scanner-primary", "fingerprint": "8a678dd212c96691", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a339fb1b60ee848", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/move-in/StepLease.tsx:188"}, "properties": {"repobilityId": "c95fda8badd274f5", "scanner": "scanner-primary", "fingerprint": "4a339fb1b60ee848", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b64a26c1a6553f87", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/home/FAQSection.tsx:103"}, "properties": {"repobilityId": "03ea6724edd40122", "scanner": "scanner-primary", "fingerprint": "b64a26c1a6553f87", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-00dfc7f78d847c08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/home/MapSection.tsx:196"}, "properties": {"repobilityId": "66ef52f20739e123", "scanner": "scanner-primary", "fingerprint": "00dfc7f78d847c08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb00801ca4fbcb25", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ui/Modal.tsx:71"}, "properties": {"repobilityId": "e6a269c12f4ed5da", "scanner": "scanner-primary", "fingerprint": "fb00801ca4fbcb25", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32452c02eaf109e5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/seo/StructuredData.tsx:8"}, "properties": {"repobilityId": "cb2a6691c291ba24", "scanner": "scanner-primary", "fingerprint": "32452c02eaf109e5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-32ae76fe938efb85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/daily/route.ts:869"}, "properties": {"repobilityId": "ad7c1ad047e5b327", "scanner": "scanner-primary", "fingerprint": "32ae76fe938efb85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab8ff34790ef58cb", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/checkin/route.ts:199"}, "properties": {"repobilityId": "7947abab3c7864b6", "scanner": "scanner-primary", "fingerprint": "ab8ff34790ef58cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c7209f5e0b4c9cae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/checkin/route.ts:127"}, "properties": {"repobilityId": "6e893651072eaae6", "scanner": "scanner-primary", "fingerprint": "c7209f5e0b4c9cae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-994701a21839fcf4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/locations/[slug]/page.tsx:1290"}, "properties": {"repobilityId": "71d9dadd3aec4505", "scanner": "scanner-primary", "fingerprint": "994701a21839fcf4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25339a93562c9eee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/preview/page.tsx:114"}, "properties": {"repobilityId": "bddcd3558bba5e55", "scanner": "scanner-primary", "fingerprint": "25339a93562c9eee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6992e011424a0219", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/BookingsPage.tsx:1024"}, "properties": {"repobilityId": "ba22fb3003b16e90", "scanner": "scanner-primary", "fingerprint": "6992e011424a0219", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d164a6943adb7cf4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/admin/layout.tsx:26"}, "properties": {"repobilityId": "d9a523b756d1075b", "scanner": "scanner-primary", "fingerprint": "d164a6943adb7cf4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4f9fe05f4d9afb84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/AdminShell.tsx:517"}, "properties": {"repobilityId": "faa4f9d9b6978864", "scanner": "scanner-primary", "fingerprint": "4f9fe05f4d9afb84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b3d4740f7d399e6", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 app/admin/AdminShell.tsx:344"}, "properties": {"repobilityId": "640728f920953b78", "scanner": "scanner-primary", "fingerprint": "9b3d4740f7d399e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-82b7b33848084653", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/mist/MistConsole.tsx:946"}, "properties": {"repobilityId": "d64fd51115fd08ad", "scanner": "scanner-primary", "fingerprint": "82b7b33848084653", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e57922d93d1cd9b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/housekeeping/HousekeepingPage.tsx:1061"}, "properties": {"repobilityId": "2ed44032edb6f2b3", "scanner": "scanner-primary", "fingerprint": "e57922d93d1cd9b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-306342f1a4255c81", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/tenants/TenantsPage.tsx:878"}, "properties": {"repobilityId": "113a43a2e5b4e4c5", "scanner": "scanner-primary", "fingerprint": "306342f1a4255c81", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cf73e3a5c90ab40f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/tenants/[id]/TenantFolioPage.tsx:1395"}, "properties": {"repobilityId": "1153784a11c9211f", "scanner": "scanner-primary", "fingerprint": "cf73e3a5c90ab40f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ebfac7b5c1ab156", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/audit/AuditPage.tsx:631"}, "properties": {"repobilityId": "fbba6c9c13459f9f", "scanner": "scanner-primary", "fingerprint": "3ebfac7b5c1ab156", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8cfcc2dfb92ec304", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/emails/EmailsPage.tsx:896"}, "properties": {"repobilityId": "f676b05c2d325be2", "scanner": "scanner-primary", "fingerprint": "8cfcc2dfb92ec304", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd02260648387b47", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/deposits/DepositsPage.tsx:1272"}, "properties": {"repobilityId": "77306c36aba09afd", "scanner": "scanner-primary", "fingerprint": "bd02260648387b47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa25ae1dff6bef32", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 app/admin/deposits/DepositsPage.tsx:1859"}, "properties": {"repobilityId": "8d5ee78372280f81", "scanner": "scanner-primary", "fingerprint": "fa25ae1dff6bef32", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-c69a87262105e70f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/rooms/RoomsPage.tsx:945"}, "properties": {"repobilityId": "a4ea19fe949263b9", "scanner": "scanner-primary", "fingerprint": "c69a87262105e70f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14d07500054bc45b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/pricing/PricingPage.tsx:306"}, "properties": {"repobilityId": "f765b76ad1100bc2", "scanner": "scanner-primary", "fingerprint": "14d07500054bc45b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1219df3831ce9c61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/observability.ts:49"}, "properties": {"repobilityId": "55cd7b7bf8357fb6", "scanner": "scanner-primary", "fingerprint": "1219df3831ce9c61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e989407fb9e996c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/test-mode.ts:27"}, "properties": {"repobilityId": "7f9eb4c329d224db", "scanner": "scanner-primary", "fingerprint": "8e989407fb9e996c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-940a712a823a2a9d", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in scripts/test-mietvertrag.mjs:120"}, "properties": {"repobilityId": "842750bd2c9bf7f0", "scanner": "scanner-primary", "fingerprint": "940a712a823a2a9d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-mietvertrag.mjs"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-6e2c1ff67a724d64", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/test-mietvertrag.mjs:7"}, "properties": {"repobilityId": "ebbdaeaa8a50419c", "scanner": "scanner-primary", "fingerprint": "6e2c1ff67a724d64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-mietvertrag.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-9bcd841c2e30df5d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/legal/ConsentScripts.tsx:34"}, "properties": {"repobilityId": "79e8b723c9eee5dd", "scanner": "scanner-primary", "fingerprint": "9bcd841c2e30df5d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/legal/ConsentScripts.tsx"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-a0429a44eae74991", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in components/ui/LocationMap.tsx:87"}, "properties": {"repobilityId": "7ca7e17a9ce0f349", "scanner": "scanner-primary", "fingerprint": "a0429a44eae74991", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ui/LocationMap.tsx"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-c2274cd539a897a4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/home/FAQSection.tsx:103"}, "properties": {"repobilityId": "0823a0e0a11fc58f", "scanner": "scanner-primary", "fingerprint": "c2274cd539a897a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/home/FAQSection.tsx"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-96720bbad52f72ae", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app/locations/[slug]/page.tsx:153"}, "properties": {"repobilityId": "8c2d3948ec4b4a3a", "scanner": "scanner-primary", "fingerprint": "96720bbad52f72ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/locations/[slug]/page.tsx"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-dce7cf279d25064b", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in app/admin/BookingsPage.tsx:1361"}, "properties": {"repobilityId": "c926d33694fc2de5", "scanner": "scanner-primary", "fingerprint": "dce7cf279d25064b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/admin/BookingsPage.tsx"}, "region": {"startLine": 1361}}}]}, {"ruleId": "scanner-78c5b0a44a0a75e9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/admin/layout.tsx:26"}, "properties": {"repobilityId": "40a71118b713fe01", "scanner": "scanner-primary", "fingerprint": "78c5b0a44a0a75e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/admin/layout.tsx"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "714673743ff59cef", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5e475b8e3b4ee26e", "level": "note", "message": {"text": "Very large file: app/api/cron/daily/route.ts (1538 lines)"}, "properties": {"repobilityId": "6a11ac5871965b24", "scanner": "scanner-primary", "fingerprint": "5e475b8e3b4ee26e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b6ac2d828d12f003", "level": "note", "message": {"text": "Very large file: app/api/webhooks/stripe/route.ts (1553 lines)"}, "properties": {"repobilityId": "c68cd6a33262f7ae", "scanner": "scanner-primary", "fingerprint": "b6ac2d828d12f003", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5b6e10001034d828", "level": "note", "message": {"text": "Very large file: app/move-in/page.tsx (1932 lines)"}, "properties": {"repobilityId": "4340464988490228", "scanner": "scanner-primary", "fingerprint": "5b6e10001034d828", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a829727ed8ab9d85", "level": "note", "message": {"text": "Very large file: app/locations/[slug]/page.tsx (1409 lines)"}, "properties": {"repobilityId": "0a1cfa9d6246c9c0", "scanner": "scanner-primary", "fingerprint": "a829727ed8ab9d85", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-df720dedaa74fa06", "level": "note", "message": {"text": "Very large file: app/admin/BookingsPage.tsx (2353 lines)"}, "properties": {"repobilityId": "fc8ff6d60cebdd18", "scanner": "scanner-primary", "fingerprint": "df720dedaa74fa06", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bc7ef0b0e529c005", "level": "note", "message": {"text": "Very large file: app/admin/tenants/TenantsPage.tsx (1463 lines)"}, "properties": {"repobilityId": "1f47822f0cd8dca8", "scanner": "scanner-primary", "fingerprint": "bc7ef0b0e529c005", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f15c3de0e20740e5", "level": "note", "message": {"text": "Very large file: app/admin/tenants/[id]/TenantFolioPage.tsx (5572 lines)"}, "properties": {"repobilityId": "f5636100698d14cc", "scanner": "scanner-primary", "fingerprint": "f15c3de0e20740e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-501c47546c66c88b", "level": "note", "message": {"text": "Very large file: app/admin/finance/FinancePage.tsx (2525 lines)"}, "properties": {"repobilityId": "0709cee9de91f5b1", "scanner": "scanner-primary", "fingerprint": "501c47546c66c88b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-03c5fac12e280282", "level": "note", "message": {"text": "Very large file: app/admin/deposits/DepositsPage.tsx (1952 lines)"}, "properties": {"repobilityId": "12efc5cfcadf240f", "scanner": "scanner-primary", "fingerprint": "03c5fac12e280282", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-88937db96ffc6038", "level": "note", "message": {"text": "Very large file: app/admin/rooms/RoomsPage.tsx (2322 lines)"}, "properties": {"repobilityId": "6a8ea9c5593d5956", "scanner": "scanner-primary", "fingerprint": "88937db96ffc6038", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f77a230375cbb66e", "level": "note", "message": {"text": "Very large file: lib/apaleo.ts (1609 lines)"}, "properties": {"repobilityId": "9829eb9487d24d90", "scanner": "scanner-primary", "fingerprint": "f77a230375cbb66e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ad16c4a74b44f789", "level": "note", "message": {"text": "Very large file: lib/data.ts (1322 lines)"}, "properties": {"repobilityId": "a31a541508dc1266", "scanner": "scanner-primary", "fingerprint": "ad16c4a74b44f789", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "7c0338ae556fc474", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "1b2262cb27fe5642", "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": "a984420cf69bc3bd", "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": "b258211990c3c0d4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "c6cb8bfbac01d322", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "d2d50ecd2b8ad15d", "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": "96a1f049290ad857", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-07d4a26774225679", "level": "none", "message": {"text": "Commented-code block (5 lines) in eslint.config.mjs:18"}, "properties": {"repobilityId": "f4908834c9ba3104", "scanner": "scanner-primary", "fingerprint": "07d4a26774225679", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72b693a9aeb4b9f3", "level": "none", "message": {"text": "Commented-code block (6 lines) in next.config.ts:4"}, "properties": {"repobilityId": "f964601771274302", "scanner": "scanner-primary", "fingerprint": "72b693a9aeb4b9f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-128e9b8673e9b8b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/golive-cron-safety-check.mjs:1"}, "properties": {"repobilityId": "2751561169f14518", "scanner": "scanner-primary", "fingerprint": "128e9b8673e9b8b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e266a6eb37014e4d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/backup-originals-to-drive.mjs:55"}, "properties": {"repobilityId": "ca4c184d82690c2b", "scanner": "scanner-primary", "fingerprint": "e266a6eb37014e4d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1279f6031f1b189b", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/seed-golive-cron-fixtures.mjs:1"}, "properties": {"repobilityId": "0831c1c2acb5c222", "scanner": "scanner-primary", "fingerprint": "1279f6031f1b189b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef297236f68d0dbc", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/layout/Navbar.tsx:60"}, "properties": {"repobilityId": "ec30a3a3c5efffea", "scanner": "scanner-primary", "fingerprint": "ef297236f68d0dbc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb451351e083ed3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/ui/LocationMap.tsx:213"}, "properties": {"repobilityId": "7c1863602abc4a8a", "scanner": "scanner-primary", "fingerprint": "bb451351e083ed3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1874176f6494cd3e", "level": "none", "message": {"text": "Commented-code block (11 lines) in components/move-in/SearchFields.tsx:65"}, "properties": {"repobilityId": "26847ff97e83abec", "scanner": "scanner-primary", "fingerprint": "1874176f6494cd3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14d0e7e11a65ab21", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/move-in/SearchFields.tsx:129"}, "properties": {"repobilityId": "b7135491d07b380f", "scanner": "scanner-primary", "fingerprint": "14d0e7e11a65ab21", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c7deab91916a725", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/move-in/StepLease.tsx:19"}, "properties": {"repobilityId": "3d3bff1275365b8e", "scanner": "scanner-primary", "fingerprint": "2c7deab91916a725", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7b6d74d8c5c488b", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/move-in/StepAboutYou.tsx:390"}, "properties": {"repobilityId": "bea15b59e4c0cdbe", "scanner": "scanner-primary", "fingerprint": "e7b6d74d8c5c488b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad047d23c183a55a", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/home/FAQSection.tsx:9"}, "properties": {"repobilityId": "7e50adbde5a320fd", "scanner": "scanner-primary", "fingerprint": "ad047d23c183a55a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88964673960bb581", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/home/VideoSection.tsx:11"}, "properties": {"repobilityId": "c2420923691a4f13", "scanner": "scanner-primary", "fingerprint": "88964673960bb581", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d4c32fc5c0c8d1e", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/home/MapSection.tsx:23"}, "properties": {"repobilityId": "cdde50c0bbd3002d", "scanner": "scanner-primary", "fingerprint": "1d4c32fc5c0c8d1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8375e574e4e72afb", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/admin/ui/portal.ts:1"}, "properties": {"repobilityId": "bf828737802177db", "scanner": "scanner-primary", "fingerprint": "8375e574e4e72afb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7c7155386849970", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/admin/ui/DataTable.tsx:3"}, "properties": {"repobilityId": "7012fc1c006b8d2b", "scanner": "scanner-primary", "fingerprint": "f7c7155386849970", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ade2ff2eca673c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/admin/ui/Toast.tsx:49"}, "properties": {"repobilityId": "4db9308f831c758a", "scanner": "scanner-primary", "fingerprint": "9ade2ff2eca673c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db111f57b48396bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/seo/StructuredData.tsx:1"}, "properties": {"repobilityId": "94c3804c7bf3fe33", "scanner": "scanner-primary", "fingerprint": "db111f57b48396bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bbf34fb4be8a40d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/robots.ts:4"}, "properties": {"repobilityId": "8f8141f3d34dcd71", "scanner": "scanner-primary", "fingerprint": "7bbf34fb4be8a40d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aa5f7302ed4427b", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/template.tsx:11"}, "properties": {"repobilityId": "f1f2acf81a435d8f", "scanner": "scanner-primary", "fingerprint": "8aa5f7302ed4427b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cbb0cb8f04a5db3", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/page.tsx:63"}, "properties": {"repobilityId": "8166216f5fa68af1", "scanner": "scanner-primary", "fingerprint": "7cbb0cb8f04a5db3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6d86cb3659f83f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/short-availability-calendar/route.ts:4"}, "properties": {"repobilityId": "b26877f0d50c2ed1", "scanner": "scanner-primary", "fingerprint": "f6d86cb3659f83f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5e7ada3129a249d", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/move-out/refund-iban/route.ts:8"}, "properties": {"repobilityId": "1cd9a2954a3c1939", "scanner": "scanner-primary", "fingerprint": "c5e7ada3129a249d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fca08e3671cbf082", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/locations/stats/route.ts:7"}, "properties": {"repobilityId": "2f2aaf2c885666ab", "scanner": "scanner-primary", "fingerprint": "fca08e3671cbf082", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41991ea1397923db", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/recent-bookings/route.ts:6"}, "properties": {"repobilityId": "3a811dc7bc87effe", "scanner": "scanner-primary", "fingerprint": "41991ea1397923db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9a9071da3377f13", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/booking/route.ts:183"}, "properties": {"repobilityId": "d2533cddf316f14f", "scanner": "scanner-primary", "fingerprint": "c9a9071da3377f13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a84fbaaa9e68700", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/rent/route.ts:62"}, "properties": {"repobilityId": "7e987edb6979df0c", "scanner": "scanner-primary", "fingerprint": "2a84fbaaa9e68700", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2781aec418854a59", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/tenants/route.ts:33"}, "properties": {"repobilityId": "c5f2c445bafaea96", "scanner": "scanner-primary", "fingerprint": "2781aec418854a59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60121212df6200a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/tenants/[id]/withdraw/route.ts:95"}, "properties": {"repobilityId": "4521c5644f5a838d", "scanner": "scanner-primary", "fingerprint": "60121212df6200a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c32000280063e7af", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/ota-ops/route.ts:5"}, "properties": {"repobilityId": "3556caeea3ac9c48", "scanner": "scanner-primary", "fingerprint": "c32000280063e7af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-078b860a3bf6d9aa", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/admin/emails/send-test/route.ts:11"}, "properties": {"repobilityId": "efb95a23498fd33e", "scanner": "scanner-primary", "fingerprint": "078b860a3bf6d9aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-062fe9923283a8b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/rooms/[id]/place-tenant/route.ts:6"}, "properties": {"repobilityId": "9644405d71d37a42", "scanner": "scanner-primary", "fingerprint": "062fe9923283a8b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d7db170f0eb0c96", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/dev/test-slack-alert/route.ts:5"}, "properties": {"repobilityId": "258cecd0f8521314", "scanner": "scanner-primary", "fingerprint": "7d7db170f0eb0c96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f224d9918f2c6d5", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/dev/test-drive/route.ts:4"}, "properties": {"repobilityId": "907344453c25fb77", "scanner": "scanner-primary", "fingerprint": "5f224d9918f2c6d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9e6bc8b3b7b2509", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/payment-setup/sepa/route.ts:8"}, "properties": {"repobilityId": "bbed2d6605065341", "scanner": "scanner-primary", "fingerprint": "b9e6bc8b3b7b2509", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22bd75eee090656d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cron/daily/route.ts:50"}, "properties": {"repobilityId": "fa162c2809f6d06b", "scanner": "scanner-primary", "fingerprint": "22bd75eee090656d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d14690a31ee066a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/checkin/route.ts:4"}, "properties": {"repobilityId": "62dc7e967070b858", "scanner": "scanner-primary", "fingerprint": "8d14690a31ee066a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da0c7a951c1af45b", "level": "note", "message": {"text": "Legacy-named symbol `card_backup` in app/api/deposit/card/route.ts:64"}, "properties": {"repobilityId": "a3d709536de305e4", "scanner": "scanner-primary", "fingerprint": "da0c7a951c1af45b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-db00de46a858abfc", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/deposit/card/route.ts:8"}, "properties": {"repobilityId": "8badfd3e1a8cab3b", "scanner": "scanner-primary", "fingerprint": "db00de46a858abfc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0c57bf18fafa429", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/deposit/sepa/route.ts:26"}, "properties": {"repobilityId": "7029620171d45902", "scanner": "scanner-primary", "fingerprint": "f0c57bf18fafa429", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ae6e7f01baaaf58", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/webhooks/apaleo/route.ts:17"}, "properties": {"repobilityId": "602cc3b2285a0517", "scanner": "scanner-primary", "fingerprint": "8ae6e7f01baaaf58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b081ebc149e53f7", "level": "note", "message": {"text": "Legacy-named symbol `card_backup` in app/api/webhooks/stripe/route.ts:457"}, "properties": {"repobilityId": "bbc46d2ae1bd3f78", "scanner": "scanner-primary", "fingerprint": "1b081ebc149e53f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-924cd9a91230fb1b", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/webhooks/stripe/route.ts:40"}, "properties": {"repobilityId": "5e677ad495a451a9", "scanner": "scanner-primary", "fingerprint": "924cd9a91230fb1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cedd1b2c882c3400", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/feedback/route.ts:7"}, "properties": {"repobilityId": "eca96d1b3d2f7e88", "scanner": "scanner-primary", "fingerprint": "cedd1b2c882c3400", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e294f1cfb4914363", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/move-in/page.tsx:147"}, "properties": {"repobilityId": "4e118db0713f0c1f", "scanner": "scanner-primary", "fingerprint": "e294f1cfb4914363", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfb87289d52b12e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/page.tsx:540"}, "properties": {"repobilityId": "7e546bc0f1ea91e0", "scanner": "scanner-primary", "fingerprint": "cfb87289d52b12e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7eae6c24832383ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/move-in/layout.tsx:7"}, "properties": {"repobilityId": "ba45494f7954e933", "scanner": "scanner-primary", "fingerprint": "7eae6c24832383ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61a3dcaa0002ec9a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/_hooks/useAvailability.ts:75"}, "properties": {"repobilityId": "45feef741c4df7bc", "scanner": "scanner-primary", "fingerprint": "61a3dcaa0002ec9a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0bb2a9ad440b351", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/move-in/_hooks/usePaymentConfirmation.ts:149"}, "properties": {"repobilityId": "553e6e7324596862", "scanner": "scanner-primary", "fingerprint": "f0bb2a9ad440b351", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83ab53204c454daa", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/move-in/deposit-payment/page.tsx:69"}, "properties": {"repobilityId": "bf54c8ae5b6073c6", "scanner": "scanner-primary", "fingerprint": "83ab53204c454daa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-043ffa12872ba7a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/move-in/payment-setup/page.tsx:13"}, "properties": {"repobilityId": "877759dd399d9603", "scanner": "scanner-primary", "fingerprint": "043ffa12872ba7a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4db00871ca82e788", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/move-in/deposit-success/page.tsx:6"}, "properties": {"repobilityId": "278efaa03ea840f6", "scanner": "scanner-primary", "fingerprint": "4db00871ca82e788", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42a909699e082593", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/locations/[slug]/page.tsx:202"}, "properties": {"repobilityId": "f0563f8e144562e0", "scanner": "scanner-primary", "fingerprint": "42a909699e082593", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4103a230f2baecaf", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/preview/page.tsx:3"}, "properties": {"repobilityId": "f230678c6be5c08d", "scanner": "scanner-primary", "fingerprint": "4103a230f2baecaf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7f80622dfcdf92c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/BookingsPage.tsx:1373"}, "properties": {"repobilityId": "b6ef491a0a642263", "scanner": "scanner-primary", "fingerprint": "f7f80622dfcdf92c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eeaa778952b694c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/dashboard-data.ts:356"}, "properties": {"repobilityId": "482cd9b35d7b507b", "scanner": "scanner-primary", "fingerprint": "eeaa778952b694c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-547ca35d6f3e82c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/admin/MistLauncher.tsx:3"}, "properties": {"repobilityId": "0a48c21ae4e692d6", "scanner": "scanner-primary", "fingerprint": "547ca35d6f3e82c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-243c7669db4ce9f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/mist/MistOrb.tsx:3"}, "properties": {"repobilityId": "c56e20d4b7a87878", "scanner": "scanner-primary", "fingerprint": "243c7669db4ce9f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffe7e1da3fd7f292", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/admin/bookings/page.tsx:9"}, "properties": {"repobilityId": "b8607b74259a8256", "scanner": "scanner-primary", "fingerprint": "ffe7e1da3fd7f292", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e5227f21e60e776", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/housekeeping/HousekeepingPage.tsx:561"}, "properties": {"repobilityId": "afb0b2b5a59408c4", "scanner": "scanner-primary", "fingerprint": "8e5227f21e60e776", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d35b352b8d979d5e", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/admin/tenants/[id]/TenantFolioPage.tsx:265"}, "properties": {"repobilityId": "9c95b23ab4a2c9e2", "scanner": "scanner-primary", "fingerprint": "d35b352b8d979d5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55e5db8c062e6244", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/tenants/[id]/TenantFolioPage.tsx:2136"}, "properties": {"repobilityId": "99f88589aca1a56d", "scanner": "scanner-primary", "fingerprint": "55e5db8c062e6244", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f9c97430b8a18ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/tenants/[id]/page.tsx:39"}, "properties": {"repobilityId": "c7e8a39601783b40", "scanner": "scanner-primary", "fingerprint": "8f9c97430b8a18ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39edd12eea7c36cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/finance/FinancePage.tsx:1370"}, "properties": {"repobilityId": "493422052bdaa1dd", "scanner": "scanner-primary", "fingerprint": "39edd12eea7c36cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a97f06f3d8c664ed", "level": "note", "message": {"text": "Legacy-named symbol `deposit_confirmation_card_backup` in app/admin/emails/EmailsPage.tsx:101"}, "properties": {"repobilityId": "b7d229b0f5b5e718", "scanner": "scanner-primary", "fingerprint": "a97f06f3d8c664ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-598acdba48844b8e", "level": "note", "message": {"text": "Legacy-named symbol `deposit_confirmation_card_backup` in app/admin/emails/flow/catalog.ts:132"}, "properties": {"repobilityId": "b1c404a382abf68d", "scanner": "scanner-primary", "fingerprint": "598acdba48844b8e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-912ffa9dd1c95941", "level": "note", "message": {"text": "Legacy-named symbol `card_backup` in app/admin/emails/flow/journeys.ts:261"}, "properties": {"repobilityId": "41447ecb77a6e5c2", "scanner": "scanner-primary", "fingerprint": "912ffa9dd1c95941", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7346dbe28d78a513", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/deposits/DepositsPage.tsx:1027"}, "properties": {"repobilityId": "e88f4a8ca4a813cf", "scanner": "scanner-primary", "fingerprint": "7346dbe28d78a513", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81ff3cb91270ab72", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/rooms/page.tsx:12"}, "properties": {"repobilityId": "efb8ca3bf1160a6f", "scanner": "scanner-primary", "fingerprint": "81ff3cb91270ab72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8800288f9092db87", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/rooms/RoomsPage.tsx:320"}, "properties": {"repobilityId": "bcd92fa2ae24cc76", "scanner": "scanner-primary", "fingerprint": "8800288f9092db87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5abd9808c3590071", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/rooms/RoomsPage.tsx:2016"}, "properties": {"repobilityId": "37591cfab759cba5", "scanner": "scanner-primary", "fingerprint": "5abd9808c3590071", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b46fcaef707afdc6", "level": "note", "message": {"text": "Legacy-named symbol `totalOld` in app/dev/image-compare/page.tsx:83"}, "properties": {"repobilityId": "9f3ffcc2d98a49b6", "scanner": "scanner-primary", "fingerprint": "b46fcaef707afdc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b84fa0b625321cbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/feedback/page.tsx:35"}, "properties": {"repobilityId": "ac6e088ed559539c", "scanner": "scanner-primary", "fingerprint": "b84fa0b625321cbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e6b4ea906e7eb534", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/legal-content.ts:54"}, "properties": {"repobilityId": "efcdf433d1f7b7a8", "scanner": "scanner-primary", "fingerprint": "e6b4ea906e7eb534", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c37feb95a1bfd9ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-drive.ts:45"}, "properties": {"repobilityId": "ff281be9a25c9159", "scanner": "scanner-primary", "fingerprint": "c37feb95a1bfd9ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a2782b1683f8b2c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/stripe.ts:24"}, "properties": {"repobilityId": "9dda30a89387d3a4", "scanner": "scanner-primary", "fingerprint": "a2782b1683f8b2c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97c3cad789540ac2", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/rent-failure-alert.ts:6"}, "properties": {"repobilityId": "dcbadcf9a4505cec", "scanner": "scanner-primary", "fingerprint": "97c3cad789540ac2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8ca843430c5b411", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/apaleo.ts:121"}, "properties": {"repobilityId": "199ff5eb86be057b", "scanner": "scanner-primary", "fingerprint": "d8ca843430c5b411", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c0ac38bce35ad91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/apaleo.ts:23"}, "properties": {"repobilityId": "cd66ad1130b630b1", "scanner": "scanner-primary", "fingerprint": "5c0ac38bce35ad91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25352a779474bac0", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/rate-limit.ts:15"}, "properties": {"repobilityId": "2cba224a1a669f3b", "scanner": "scanner-primary", "fingerprint": "25352a779474bac0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74e1253d7d224283", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/yousign.ts:14"}, "properties": {"repobilityId": "59cf0c626a8c5089", "scanner": "scanner-primary", "fingerprint": "74e1253d7d224283", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0de74ad49dab9a44", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/availability.ts:3"}, "properties": {"repobilityId": "3df1a8cce91e3ed7", "scanner": "scanner-primary", "fingerprint": "0de74ad49dab9a44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9992670af2f0b4d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/rent-charge.ts:7"}, "properties": {"repobilityId": "f50796183d0f3d44", "scanner": "scanner-primary", "fingerprint": "9992670af2f0b4d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3056fea2aae21a23", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/mist/tools.ts:724"}, "properties": {"repobilityId": "15be76955714bd8b", "scanner": "scanner-primary", "fingerprint": "3056fea2aae21a23", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-680f5a45adfdb4e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/email/team.ts:20"}, "properties": {"repobilityId": "cfe9b8859678b9d2", "scanner": "scanner-primary", "fingerprint": "680f5a45adfdb4e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88e26de0c15d8a69", "level": "note", "message": {"text": "Legacy-named symbol `isOld` in lib/email/email-change.ts:30"}, "properties": {"repobilityId": "1ae515e3832dc14e", "scanner": "scanner-primary", "fingerprint": "88e26de0c15d8a69", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6aa662a7491f3c8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/email/email-change.ts:14"}, "properties": {"repobilityId": "2e06f51a923fcec9", "scanner": "scanner-primary", "fingerprint": "6aa662a7491f3c8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7045f4cd095b7945", "level": "note", "message": {"text": "Legacy-named symbol `deposit_confirmation_card_backup` in lib/email/deposit.ts:298"}, "properties": {"repobilityId": "21f1208abae12a35", "scanner": "scanner-primary", "fingerprint": "7045f4cd095b7945", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2eb72ce5166ad9d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/email/move-out-reminder.ts:16"}, "properties": {"repobilityId": "fad9f55937ce9869", "scanner": "scanner-primary", "fingerprint": "2eb72ce5166ad9d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c31eb5e99925c06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/hooks/useShortCalendar.ts:18"}, "properties": {"repobilityId": "984f8c661b5efc28", "scanner": "scanner-primary", "fingerprint": "8c31eb5e99925c06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59b992d62d86a65a", "level": "note", "message": {"text": "25 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "58b9516d72ffa8ba", "scanner": "scanner-primary", "fingerprint": "59b992d62d86a65a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}