{"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-a7c6d31cd6a01bb0", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AddressFieldAutocomplete.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AddressFieldAutocomplete.tsx:194"}, "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-68591dcf81c6eb78", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/MessageListingCard.tsx:36", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/MessageListingCard.tsx:36"}, "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-e2092d00038b301a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ChatWidget.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ChatWidget.tsx:172"}, "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-bcbbdc627b3c93c6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/BookShowingModal.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/BookShowingModal.tsx:108"}, "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-320776a4aabdd970", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AddressAutocomplete.tsx:203", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AddressAutocomplete.tsx:203"}, "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-b414e144704ed2fb", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ListingsMap.tsx:949", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ListingsMap.tsx:949"}, "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-aedb6ef3faecd119", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ListingCard.tsx:365", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ListingCard.tsx:365"}, "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-8ef3a4eaa82b091e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/PropertyConfirmModal.tsx:528", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/PropertyConfirmModal.tsx:528"}, "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-ed655e0f4d849baf", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/Header.tsx:299", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/Header.tsx:299"}, "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-5c808c8ce63eb6ae", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AskQuestionModal.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AskQuestionModal.tsx:60"}, "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-e3e1d0b341ee047f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/UserLayout.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/UserLayout.tsx:206"}, "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-d5ff2547dc023e17", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/AgentLayout.tsx:186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/AgentLayout.tsx:186"}, "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-b6de31b42345376b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/AdminLayout.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/AdminLayout.tsx:279"}, "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-2f973745b0e90dad", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MarketAnalysis.tsx:847", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MarketAnalysis.tsx:847"}, "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-b2c9198a5e79483f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Messages.tsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Messages.tsx:122"}, "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-1443473be5e219f1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Dashboard.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Dashboard.tsx:245"}, "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-b3d2356349e970f5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/PropertyEstimate.tsx:1062", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/PropertyEstimate.tsx:1062"}, "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-7cd1f710fa2cdb2b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/SavedSearches.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/SavedSearches.tsx:81"}, "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-b079ddcedaab2b31", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Welcome.tsx:290", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Welcome.tsx:290"}, "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-30ad05914412271e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/HomeV2.tsx:347", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/HomeV2.tsx:347"}, "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-1c11af7838af6fd5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Cma.tsx:629", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Cma.tsx:629"}, "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-a35a52326c54a93d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/PropertyDetails.tsx:277", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/PropertyDetails.tsx:277"}, "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-2b70ad94e3f0ee14", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MyEnquiries.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MyEnquiries.tsx:216"}, "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-feb0f35ee63c9967", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MyProperties.tsx:369", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MyProperties.tsx:369"}, "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-765ff49cc24fc5c3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MapSearch.tsx:1962", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MapSearch.tsx:1962"}, "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-1de90e712100576d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Blog/Index.tsx:227", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Blog/Index.tsx:227"}, "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-efef30991c150a29", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Dashboard.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Dashboard.tsx:233"}, "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-36388d2292ac1b09", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ActivityLog.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ActivityLog.tsx:107"}, "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-6f1fb9b2831d48f7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/ActivityLog.tsx:141", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/ActivityLog.tsx:141"}, "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-835c2e9e31721a7d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Analytics.tsx:311", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Analytics.tsx:311"}, "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-e3d7b2e002579bc4", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ListingRequests/Index.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ListingRequests/Index.tsx:103"}, "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-38f29372c031ccc5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Blog/Index.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Blog/Index.tsx:142"}, "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-0487c6a3310424c2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Blog/Index.tsx:208", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Blog/Index.tsx:208"}, "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-4d5a2389de85e245", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Enquiries/Index.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Enquiries/Index.tsx:106"}, "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-45bd0f026fd59cbc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Enquiries/Index.tsx:228", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Enquiries/Index.tsx:228"}, "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-cd92062550910b04", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Listings/Index.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Listings/Index.tsx:148"}, "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-eb2dc006bc3b0423", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Listings/Featured.tsx:69", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Listings/Featured.tsx:69"}, "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-b47b8bcdf3f3cb40", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Listings/Featured.tsx:97", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Listings/Featured.tsx:97"}, "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-b605c65ee9c98502", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Users/Index.tsx:239", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Users/Index.tsx:239"}, "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-e6bcb1ccc0f5b15e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/CmaRequests/Index.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/CmaRequests/Index.tsx:75"}, "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-d194b827ad244571", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ValuationRequests/Index.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ValuationRequests/Index.tsx:105"}, "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-536f9671ab65b74c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ShowingRequests/Index.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ShowingRequests/Index.tsx:124"}, "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-98e01340feffbb21", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/ShowingRequests/Index.tsx:238", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/ShowingRequests/Index.tsx:238"}, "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-3cf2e501339a427a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Messages/Index.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Messages/Index.tsx:177"}, "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-e6df3e07d337eb7c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Listings.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Listings.tsx:155"}, "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-c5354d93e2669ba8", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/CmaRequestShow.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/CmaRequestShow.tsx:131"}, "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-def4a091473b1c43", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Dashboard.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Dashboard.tsx:211"}, "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-160ebe790507fe53", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/ListingRequests.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/ListingRequests.tsx:113"}, "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-ff30aa08554abb6d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Leads.tsx:141", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Leads.tsx:141"}, "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-6e3fae315836756d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/CmaRequests.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/CmaRequests.tsx:73"}, "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-0001bfc5d9869d5d", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Blog/Index.tsx:227", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Blog/Index.tsx:227"}, "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-ff8763845a969cc6", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/ActivityLog.tsx:141", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/ActivityLog.tsx:141"}, "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-90b781a082838384", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Blog/Index.tsx:208", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Blog/Index.tsx:208"}, "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-9c49feab5405c719", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Enquiries/Index.tsx:228", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Enquiries/Index.tsx:228"}, "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-589031e0e6f77736", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Listings/Featured.tsx:97", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Listings/Featured.tsx:97"}, "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-6a4287cbec5c8cfa", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Users/Index.tsx:239", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Users/Index.tsx:239"}, "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-f92d4af1a58a128d", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/ShowingRequests/Index.tsx:238", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/ShowingRequests/Index.tsx:238"}, "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-845ec753d649463e", "name": "Very large file: resources/js/Components/ChatWidget.tsx (1280 lines)", "shortDescription": {"text": "Very large file: resources/js/Components/ChatWidget.tsx (1280 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-c211752c30921418", "name": "Very large file: resources/js/Components/ListingsMap.tsx (1063 lines)", "shortDescription": {"text": "Very large file: resources/js/Components/ListingsMap.tsx (1063 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-cabaab762568cfaa", "name": "Very large file: resources/js/Pages/Sell.tsx (1131 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/Sell.tsx (1131 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-3c43629a17b3d84e", "name": "Very large file: resources/js/Pages/MarketAnalysis.tsx (932 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/MarketAnalysis.tsx (932 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-27834eab5f57c71e", "name": "Very large file: resources/js/Pages/PropertyEstimate.tsx (1123 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/PropertyEstimate.tsx (1123 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-f90c97ee1f09d9b9", "name": "Very large file: resources/js/Pages/MarketTrends.tsx (1078 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/MarketTrends.tsx (1078 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-16540cf8a05bbbd4", "name": "Very large file: resources/js/Pages/Welcome.tsx (1189 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/Welcome.tsx (1189 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-890133923146a3e4", "name": "Very large file: resources/js/Pages/HomeV2.tsx (1279 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/HomeV2.tsx (1279 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-ad5073cc0d8349d3", "name": "Very large file: resources/js/Pages/Cma.tsx (1095 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/Cma.tsx (1095 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-4f8b8c10b730fa27", "name": "Very large file: resources/js/Pages/PropertyDetails.tsx (2705 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/PropertyDetails.tsx (2705 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-d1ea47f36d782a48", "name": "Very large file: resources/js/Pages/MapSearch.tsx (2687 lines)", "shortDescription": {"text": "Very large file: resources/js/Pages/MapSearch.tsx (2687 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 135 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01f96f71d9907a8c", "name": "README lacks setup or run instructions", "shortDescription": {"text": "README lacks setup or run instructions"}, "fullDescription": {"text": "A README exists, but it does not contain common install/setup/run markers. This matches a frequent generated-code pattern: UI is present, operational handoff is thin."}, "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 182 placeholder/mock markers across 48 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c68d5041f783c084", "name": "Commented-code block (5 lines) in vite.config.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in vite.config.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-506bf063cd011786", "name": "Commented-code block (6 lines) in resources/js/Components/ListingsMap.tsx:610", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/Components/ListingsMap.tsx:610"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72a61078abb9144f", "name": "Commented-code block (7 lines) in resources/js/Components/ListingCard.tsx:143", "shortDescription": {"text": "Commented-code block (7 lines) in resources/js/Components/ListingCard.tsx:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8acb96ffbfd018b6", "name": "Commented-code block (6 lines) in resources/js/Components/PropertyConfirmModal.tsx:249", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/Components/PropertyConfirmModal.tsx:249"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae80ad74fd8af3dc", "name": "Commented-code block (5 lines) in resources/js/utils/propertyFields.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/utils/propertyFields.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-a49d8341fc452621", "name": "Commented-code block (6 lines) in resources/js/Pages/PropertyEstimate.tsx:780", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/Pages/PropertyEstimate.tsx:780"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d32c664c4a2aab07", "name": "Commented-code block (6 lines) in resources/js/Pages/PropertyDetails.tsx:889", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/Pages/PropertyDetails.tsx:889"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8b4f198ad92b90b", "name": "Commented-code block (5 lines) in resources/js/Pages/MapSearch.tsx:252", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/Pages/MapSearch.tsx:252"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75245cedf19a95b0", "name": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/AddressFieldAutocomplete.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/AddressFieldAutocomplete.tsx:79)"}, "fullDescription": {"text": "`resources/js/Components/AddressFieldAutocomplete.tsx:79` calls `GET /api/addresses/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/addresses/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98c9f2df4b7b6240", "name": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/ChatWidget.tsx:215)", "shortDescription": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/ChatWidget.tsx:215)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:215` calls `GET /api/addresses/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/addresses/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad5e98596dde23ae", "name": "Dangling fetch: POST /api/chat/lead (resources/js/Components/ChatWidget.tsx:386)", "shortDescription": {"text": "Dangling fetch: POST /api/chat/lead (resources/js/Components/ChatWidget.tsx:386)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:386` calls `POST /api/chat/lead` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/chat/lead`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ce408e45d881f08", "name": "Dangling fetch: GET /api/chat/summary (resources/js/Components/ChatWidget.tsx:658)", "shortDescription": {"text": "Dangling fetch: GET /api/chat/summary (resources/js/Components/ChatWidget.tsx:658)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:658` calls `GET /api/chat/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/chat/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eedb99ced95e75cd", "name": "Dangling fetch: GET /api/chat/conversations/${id} (resources/js/Components/ChatWidget.tsx:730)", "shortDescription": {"text": "Dangling fetch: GET /api/chat/conversations/${id} (resources/js/Components/ChatWidget.tsx:730)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:730` calls `GET /api/chat/conversations/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/chat/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a11ee07c01a4c6f", "name": "Dangling fetch: POST /api/chat/conversations/${activeId}/reply (resources/js/Components/ChatWidget.tsx:750)", "shortDescription": {"text": "Dangling fetch: POST /api/chat/conversations/${activeId}/reply (resources/js/Components/ChatWidget.tsx:750)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:750` calls `POST /api/chat/conversations/${activeId}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/chat/conversations/<p>/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47c779541073bc65", "name": "Dangling fetch: POST /api/messages/listing-search (resources/js/Components/ChatWidget.tsx:772)", "shortDescription": {"text": "Dangling fetch: POST /api/messages/listing-search (resources/js/Components/ChatWidget.tsx:772)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:772` calls `POST /api/messages/listing-search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/messages/listing-search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cfb6c43b768c6ed", "name": "Dangling fetch: GET /api/chat/my-listings (resources/js/Components/ChatWidget.tsx:792)", "shortDescription": {"text": "Dangling fetch: GET /api/chat/my-listings (resources/js/Components/ChatWidget.tsx:792)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:792` calls `GET /api/chat/my-listings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/chat/my-listings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbd50e5f7db3f36f", "name": "Dangling fetch: GET /api/chat/contacts (resources/js/Components/ChatWidget.tsx:809)", "shortDescription": {"text": "Dangling fetch: GET /api/chat/contacts (resources/js/Components/ChatWidget.tsx:809)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:809` calls `GET /api/chat/contacts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/chat/contacts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4bf3300f27feeee", "name": "Dangling fetch: POST /api/chat/conversations (resources/js/Components/ChatWidget.tsx:820)", "shortDescription": {"text": "Dangling fetch: POST /api/chat/conversations (resources/js/Components/ChatWidget.tsx:820)"}, "fullDescription": {"text": "`resources/js/Components/ChatWidget.tsx:820` calls `POST /api/chat/conversations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/chat/conversations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ebb150d85ee59dce", "name": "Dangling fetch: POST /listing-services/request (resources/js/Components/AgentContactModal.tsx:134)", "shortDescription": {"text": "Dangling fetch: POST /listing-services/request (resources/js/Components/AgentContactModal.tsx:134)"}, "fullDescription": {"text": "`resources/js/Components/AgentContactModal.tsx:134` calls `POST /listing-services/request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listing-services/request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af62610a23e8fddb", "name": "Dangling fetch: GET /api/listings/${mlsNumber} (resources/js/Components/PropertyDetailModal.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/listings/${mlsNumber} (resources/js/Components/PropertyDetailModal.tsx:67)"}, "fullDescription": {"text": "`resources/js/Components/PropertyDetailModal.tsx:67` calls `GET /api/listings/${mlsNumber}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-974110a51766ea55", "name": "Dangling fetch: GET /api/listings/${mlsNumber}/similar (resources/js/Components/PropertyDetailModal.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/listings/${mlsNumber}/similar (resources/js/Components/PropertyDetailModal.tsx:70)"}, "fullDescription": {"text": "`resources/js/Components/PropertyDetailModal.tsx:70` calls `GET /api/listings/${mlsNumber}/similar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listings/<p>/similar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e566548970bd6fd9", "name": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/AddressAutocomplete.tsx:65)", "shortDescription": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/AddressAutocomplete.tsx:65)"}, "fullDescription": {"text": "`resources/js/Components/AddressAutocomplete.tsx:65` calls `GET /api/addresses/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/addresses/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1070b4d476ca5f04", "name": "Dangling fetch: POST /api/property-images/upload (resources/js/Components/PropertyConfirmModal.tsx:117)", "shortDescription": {"text": "Dangling fetch: POST /api/property-images/upload (resources/js/Components/PropertyConfirmModal.tsx:117)"}, "fullDescription": {"text": "`resources/js/Components/PropertyConfirmModal.tsx:117` calls `POST /api/property-images/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/property-images/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95b68cf9cdbcd768", "name": "Dangling fetch: POST /cma-requests (resources/js/Components/PropertyConfirmModal.tsx:225)", "shortDescription": {"text": "Dangling fetch: POST /cma-requests (resources/js/Components/PropertyConfirmModal.tsx:225)"}, "fullDescription": {"text": "`resources/js/Components/PropertyConfirmModal.tsx:225` calls `POST /cma-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/cma-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bde8a3d12982ce9e", "name": "Dangling fetch: POST /listing-requests (resources/js/Components/PropertyConfirmModal.tsx:230)", "shortDescription": {"text": "Dangling fetch: POST /listing-requests (resources/js/Components/PropertyConfirmModal.tsx:230)"}, "fullDescription": {"text": "`resources/js/Components/PropertyConfirmModal.tsx:230` calls `POST /listing-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listing-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f433802b1817831d", "name": "Dangling fetch: POST /listing-services/request (resources/js/Components/ListMyPropertyModal.tsx:42)", "shortDescription": {"text": "Dangling fetch: POST /listing-services/request (resources/js/Components/ListMyPropertyModal.tsx:42)"}, "fullDescription": {"text": "`resources/js/Components/ListMyPropertyModal.tsx:42` calls `POST /listing-services/request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listing-services/request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5ab33dacd3f4f40", "name": "Dangling fetch: GET /notifications (resources/js/Layouts/UserLayout.tsx:122)", "shortDescription": {"text": "Dangling fetch: GET /notifications (resources/js/Layouts/UserLayout.tsx:122)"}, "fullDescription": {"text": "`resources/js/Layouts/UserLayout.tsx:122` calls `GET /notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b385b6f568060811", "name": "Dangling fetch: POST /notifications/mark-read (resources/js/Layouts/UserLayout.tsx:130)", "shortDescription": {"text": "Dangling fetch: POST /notifications/mark-read (resources/js/Layouts/UserLayout.tsx:130)"}, "fullDescription": {"text": "`resources/js/Layouts/UserLayout.tsx:130` calls `POST /notifications/mark-read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/notifications/mark-read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1057b07547f0ec6d", "name": "Dangling fetch: GET /notifications (resources/js/Layouts/AgentLayout.tsx:92)", "shortDescription": {"text": "Dangling fetch: GET /notifications (resources/js/Layouts/AgentLayout.tsx:92)"}, "fullDescription": {"text": "`resources/js/Layouts/AgentLayout.tsx:92` calls `GET /notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e20fd1d65609d848", "name": "Dangling fetch: POST /notifications/mark-read (resources/js/Layouts/AgentLayout.tsx:100)", "shortDescription": {"text": "Dangling fetch: POST /notifications/mark-read (resources/js/Layouts/AgentLayout.tsx:100)"}, "fullDescription": {"text": "`resources/js/Layouts/AgentLayout.tsx:100` calls `POST /notifications/mark-read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/notifications/mark-read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6800485e39928160", "name": "Dangling fetch: GET /messages/${convId} (resources/js/Pages/Messages.tsx:50)", "shortDescription": {"text": "Dangling fetch: GET /messages/${convId} (resources/js/Pages/Messages.tsx:50)"}, "fullDescription": {"text": "`resources/js/Pages/Messages.tsx:50` calls `GET /messages/${convId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/messages/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2037c703fd981631", "name": "Dangling fetch: POST /messages/${selectedId}/reply (resources/js/Pages/Messages.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /messages/${selectedId}/reply (resources/js/Pages/Messages.tsx:68)"}, "fullDescription": {"text": "`resources/js/Pages/Messages.tsx:68` calls `POST /messages/${selectedId}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/messages/<p>/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf395869084aaa6a", "name": "Dangling fetch: POST /listing-requests (resources/js/Pages/PropertyEstimate.tsx:299)", "shortDescription": {"text": "Dangling fetch: POST /listing-requests (resources/js/Pages/PropertyEstimate.tsx:299)"}, "fullDescription": {"text": "`resources/js/Pages/PropertyEstimate.tsx:299` calls `POST /listing-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listing-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8568411376d49057", "name": "Dangling fetch: POST /listing-services/request (resources/js/Pages/MarketTrends.tsx:481)", "shortDescription": {"text": "Dangling fetch: POST /listing-services/request (resources/js/Pages/MarketTrends.tsx:481)"}, "fullDescription": {"text": "`resources/js/Pages/MarketTrends.tsx:481` calls `POST /listing-services/request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listing-services/request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af82ad06f416227f", "name": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/Welcome.tsx:94)", "shortDescription": {"text": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/Welcome.tsx:94)"}, "fullDescription": {"text": "`resources/js/Pages/Welcome.tsx:94` calls `GET /api/locations/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/locations/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4db9cce1a35ce41f", "name": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/HomeV2.tsx:92)", "shortDescription": {"text": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/HomeV2.tsx:92)"}, "fullDescription": {"text": "`resources/js/Pages/HomeV2.tsx:92` calls `GET /api/locations/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/locations/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e8c84ba2133792b", "name": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/HomeV2.tsx:93)", "shortDescription": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/HomeV2.tsx:93)"}, "fullDescription": {"text": "`resources/js/Pages/HomeV2.tsx:93` calls `GET /api/addresses/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/addresses/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5997dc1dd12489fa", "name": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/HomeV2.tsx:131)", "shortDescription": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/HomeV2.tsx:131)"}, "fullDescription": {"text": "`resources/js/Pages/HomeV2.tsx:131` calls `GET /api/addresses/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/addresses/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cdb49ee9b3fd35ce", "name": "Dangling fetch: POST /favourites/check (resources/js/Pages/Cma.tsx:198)", "shortDescription": {"text": "Dangling fetch: POST /favourites/check (resources/js/Pages/Cma.tsx:198)"}, "fullDescription": {"text": "`resources/js/Pages/Cma.tsx:198` calls `POST /favourites/check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/check`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42029fbefa661c3e", "name": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/Cma.tsx:204)", "shortDescription": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/Cma.tsx:204)"}, "fullDescription": {"text": "`resources/js/Pages/Cma.tsx:204` calls `POST /favourites/${mlsNumber}/toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/<p>/toggle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fba97131505c7d2", "name": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/Cma.tsx:257)", "shortDescription": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/Cma.tsx:257)"}, "fullDescription": {"text": "`resources/js/Pages/Cma.tsx:257` calls `GET /api/addresses/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/addresses/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bd5705ca6591868", "name": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/PropertyDetails.tsx:517)", "shortDescription": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/PropertyDetails.tsx:517)"}, "fullDescription": {"text": "`resources/js/Pages/PropertyDetails.tsx:517` calls `POST /favourites/${mlsNumber}/toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/<p>/toggle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5d0c0521cc4b5b7", "name": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/PropertyDetails.tsx:532)", "shortDescription": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/PropertyDetails.tsx:532)"}, "fullDescription": {"text": "`resources/js/Pages/PropertyDetails.tsx:532` calls `POST /favourites/${mlsNumber}/toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/<p>/toggle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b7a2aceca3be234", "name": "Dangling fetch: POST /favourites/check (resources/js/Pages/PropertyDetails.tsx:550)", "shortDescription": {"text": "Dangling fetch: POST /favourites/check (resources/js/Pages/PropertyDetails.tsx:550)"}, "fullDescription": {"text": "`resources/js/Pages/PropertyDetails.tsx:550` calls `POST /favourites/check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/check`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b750a9cf4d8e18c", "name": "Dangling fetch: POST /favourites/${mls}/toggle (resources/js/Pages/PropertyDetails.tsx:568)", "shortDescription": {"text": "Dangling fetch: POST /favourites/${mls}/toggle (resources/js/Pages/PropertyDetails.tsx:568)"}, "fullDescription": {"text": "`resources/js/Pages/PropertyDetails.tsx:568` calls `POST /favourites/${mls}/toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/<p>/toggle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53cc732bb4be6c86", "name": "Dangling fetch: POST /property-estimate/lookup (resources/js/Pages/MyProperties.tsx:121)", "shortDescription": {"text": "Dangling fetch: POST /property-estimate/lookup (resources/js/Pages/MyProperties.tsx:121)"}, "fullDescription": {"text": "`resources/js/Pages/MyProperties.tsx:121` calls `POST /property-estimate/lookup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/property-estimate/lookup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-662c979717016949", "name": "Dangling fetch: POST /listing-requests (resources/js/Pages/MyProperties.tsx:203)", "shortDescription": {"text": "Dangling fetch: POST /listing-requests (resources/js/Pages/MyProperties.tsx:203)"}, "fullDescription": {"text": "`resources/js/Pages/MyProperties.tsx:203` calls `POST /listing-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listing-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f695e00fa793c6ed", "name": "Dangling fetch: POST /cma-requests (resources/js/Pages/MyProperties.tsx:232)", "shortDescription": {"text": "Dangling fetch: POST /cma-requests (resources/js/Pages/MyProperties.tsx:232)"}, "fullDescription": {"text": "`resources/js/Pages/MyProperties.tsx:232` calls `POST /cma-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/cma-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58422e13a0eb5674", "name": "Dangling fetch: GET /api/map-search/count (resources/js/Pages/MapSearch.tsx:654)", "shortDescription": {"text": "Dangling fetch: GET /api/map-search/count (resources/js/Pages/MapSearch.tsx:654)"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx:654` calls `GET /api/map-search/count` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/map-search/count`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e6f023f51c6674f", "name": "Dangling fetch: POST /favourites/check (resources/js/Pages/MapSearch.tsx:1304)", "shortDescription": {"text": "Dangling fetch: POST /favourites/check (resources/js/Pages/MapSearch.tsx:1304)"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx:1304` calls `POST /favourites/check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/check`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ef849c293ce3d81", "name": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/MapSearch.tsx:1319)", "shortDescription": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/MapSearch.tsx:1319)"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx:1319` calls `POST /favourites/${mlsNumber}/toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/favourites/<p>/toggle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d38f6e84972be1e1", "name": "Dangling fetch: GET /api/listings/viewed (resources/js/Pages/MapSearch.tsx:1341)", "shortDescription": {"text": "Dangling fetch: GET /api/listings/viewed (resources/js/Pages/MapSearch.tsx:1341)"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx:1341` calls `GET /api/listings/viewed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listings/viewed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3705bc2ae6352af9", "name": "Dangling fetch: POST /api/listings/view (resources/js/Pages/MapSearch.tsx:1362)", "shortDescription": {"text": "Dangling fetch: POST /api/listings/view (resources/js/Pages/MapSearch.tsx:1362)"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx:1362` calls `POST /api/listings/view` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listings/view`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-963c26f6468f80de", "name": "Dangling fetch: POST /api/listings/search (resources/js/Pages/MapSearch.tsx:1441)", "shortDescription": {"text": "Dangling fetch: POST /api/listings/search (resources/js/Pages/MapSearch.tsx:1441)"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx:1441` calls `POST /api/listings/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/listings/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-238cd5e2715dd47a", "name": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/MapSearch.tsx:1468)", "shortDescription": {"text": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/MapSearch.tsx:1468)"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx:1468` calls `GET /api/locations/autocomplete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/locations/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2487b0191c064c1", "name": "Dangling fetch: POST /admin/messages/${conversation.id}/reply (resources/js/Pages/Admin/ListingRequests/Show.tsx:94)", "shortDescription": {"text": "Dangling fetch: POST /admin/messages/${conversation.id}/reply (resources/js/Pages/Admin/ListingRequests/Show.tsx:94)"}, "fullDescription": {"text": "`resources/js/Pages/Admin/ListingRequests/Show.tsx:94` calls `POST /admin/messages/${conversation.id}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/admin/messages/<p>/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c2738e805acceb6", "name": "Dangling fetch: GET /admin/messages/${convId} (resources/js/Pages/Admin/Messages/Index.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /admin/messages/${convId} (resources/js/Pages/Admin/Messages/Index.tsx:70)"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Messages/Index.tsx:70` calls `GET /admin/messages/${convId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/admin/messages/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05e2d55dbcb5ff95", "name": "Dangling fetch: POST /admin/messages/${selectedId}/reply (resources/js/Pages/Admin/Messages/Index.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /admin/messages/${selectedId}/reply (resources/js/Pages/Admin/Messages/Index.tsx:88)"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Messages/Index.tsx:88` calls `POST /admin/messages/${selectedId}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/admin/messages/<p>/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-005f9b6f5950d041", "name": "Dangling fetch: POST /api/messages/listing-search (resources/js/Pages/Admin/Messages/Index.tsx:106)", "shortDescription": {"text": "Dangling fetch: POST /api/messages/listing-search (resources/js/Pages/Admin/Messages/Index.tsx:106)"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Messages/Index.tsx:106` calls `POST /api/messages/listing-search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/messages/listing-search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7fe40ea094f16dc", "name": "Dangling fetch: POST /messages/${conversation.id}/reply (resources/js/Pages/Agent/ListingRequestShow.tsx:64)", "shortDescription": {"text": "Dangling fetch: POST /messages/${conversation.id}/reply (resources/js/Pages/Agent/ListingRequestShow.tsx:64)"}, "fullDescription": {"text": "`resources/js/Pages/Agent/ListingRequestShow.tsx:64` calls `POST /messages/${conversation.id}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/messages/<p>/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36b0050c55706529", "name": "Unused endpoint: POST /showing-requests", "shortDescription": {"text": "Unused endpoint: POST /showing-requests"}, "fullDescription": {"text": "`resources/js/Components/BookShowingModal.tsx` declares `POST /showing-requests` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa318623e780388d", "name": "Unused endpoint: POST /enquiry", "shortDescription": {"text": "Unused endpoint: POST /enquiry"}, "fullDescription": {"text": "`resources/js/Components/AskQuestionModal.tsx` declares `POST /enquiry` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a163003a3f015daa", "name": "Unused endpoint: POST /cma-report/request", "shortDescription": {"text": "Unused endpoint: POST /cma-report/request"}, "fullDescription": {"text": "`resources/js/Pages/Sell.tsx` declares `POST /cma-report/request` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3393247ca80c427e", "name": "Unused endpoint: GET /market-trends", "shortDescription": {"text": "Unused endpoint: GET /market-trends"}, "fullDescription": {"text": "`resources/js/Pages/MarketTrends.tsx` declares `GET /market-trends` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fd17b7fc407f108", "name": "Unused endpoint: GET /comparables", "shortDescription": {"text": "Unused endpoint: GET /comparables"}, "fullDescription": {"text": "`resources/js/Pages/Cma.tsx` declares `GET /comparables` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ece4cb7935ea461", "name": "Unused endpoint: POST /saved-searches", "shortDescription": {"text": "Unused endpoint: POST /saved-searches"}, "fullDescription": {"text": "`resources/js/Pages/PropertyDetails.tsx` declares `POST /saved-searches` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4604f8abf6c30e6", "name": "Unused endpoint: GET /map-search", "shortDescription": {"text": "Unused endpoint: GET /map-search"}, "fullDescription": {"text": "`resources/js/Pages/MapSearch.tsx` declares `GET /map-search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5dc9d4af696cdaa", "name": "Unused endpoint: GET /blog", "shortDescription": {"text": "Unused endpoint: GET /blog"}, "fullDescription": {"text": "`resources/js/Pages/Blog/Index.tsx` declares `GET /blog` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80e43fd38ede4d40", "name": "Unused endpoint: POST /profile/avatar", "shortDescription": {"text": "Unused endpoint: POST /profile/avatar"}, "fullDescription": {"text": "`resources/js/Pages/Profile/Partials/AvatarUploadForm.tsx` declares `POST /profile/avatar` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c10ef279ec116a6", "name": "Unused endpoint: DELETE /profile/avatar", "shortDescription": {"text": "Unused endpoint: DELETE /profile/avatar"}, "fullDescription": {"text": "`resources/js/Pages/Profile/Partials/AvatarUploadForm.tsx` declares `DELETE /profile/avatar` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-483cb16198c0eec2", "name": "Unused endpoint: GET /admin/activity-log", "shortDescription": {"text": "Unused endpoint: GET /admin/activity-log"}, "fullDescription": {"text": "`resources/js/Pages/Admin/ActivityLog.tsx` declares `GET /admin/activity-log` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d02a01062e54f62c", "name": "Unused endpoint: POST /admin/settings/upload-agent-photo", "shortDescription": {"text": "Unused endpoint: POST /admin/settings/upload-agent-photo"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Settings.tsx` declares `POST /admin/settings/upload-agent-photo` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83388a8c9e213bd8", "name": "Unused endpoint: DELETE /admin/settings/delete-agent-photo", "shortDescription": {"text": "Unused endpoint: DELETE /admin/settings/delete-agent-photo"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Settings.tsx` declares `DELETE /admin/settings/delete-agent-photo` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a017477ce9596b4f", "name": "Unused endpoint: POST /admin/settings/upload-cma-pdf", "shortDescription": {"text": "Unused endpoint: POST /admin/settings/upload-cma-pdf"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Settings.tsx` declares `POST /admin/settings/upload-cma-pdf` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6688f10ed3481cf1", "name": "Unused endpoint: DELETE /admin/settings/delete-cma-pdf", "shortDescription": {"text": "Unused endpoint: DELETE /admin/settings/delete-cma-pdf"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Settings.tsx` declares `DELETE /admin/settings/delete-cma-pdf` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43e444a47ba9ccb5", "name": "Unused endpoint: GET /admin/blog", "shortDescription": {"text": "Unused endpoint: GET /admin/blog"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Blog/Index.tsx` declares `GET /admin/blog` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5e3a3c5a6a68857", "name": "Unused endpoint: POST /admin/blog", "shortDescription": {"text": "Unused endpoint: POST /admin/blog"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Blog/Create.tsx` declares `POST /admin/blog` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d8ab3b6436f9e718", "name": "Unused endpoint: GET /admin/enquiries", "shortDescription": {"text": "Unused endpoint: GET /admin/enquiries"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Enquiries/Index.tsx` declares `GET /admin/enquiries` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fd7d1919851c0db", "name": "Unused endpoint: GET /admin/listings", "shortDescription": {"text": "Unused endpoint: GET /admin/listings"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Listings/Index.tsx` declares `GET /admin/listings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0aba7f1883cb96f2", "name": "Unused endpoint: GET /admin/users", "shortDescription": {"text": "Unused endpoint: GET /admin/users"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Users/Index.tsx` declares `GET /admin/users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71a448bf74620a59", "name": "Unused endpoint: GET /admin/showing-requests", "shortDescription": {"text": "Unused endpoint: GET /admin/showing-requests"}, "fullDescription": {"text": "`resources/js/Pages/Admin/ShowingRequests/Index.tsx` declares `GET /admin/showing-requests` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02c366fdf9ebe663", "name": "Unused endpoint: POST /admin/messages", "shortDescription": {"text": "Unused endpoint: POST /admin/messages"}, "fullDescription": {"text": "`resources/js/Pages/Admin/Messages/Index.tsx` declares `POST /admin/messages` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18455"}, "properties": {"repository": "roohullah2007/eco-listing", "repoUrl": "https://github.com/roohullah2007/eco-listing", "branch": "main"}, "results": [{"ruleId": "scanner-a7c6d31cd6a01bb0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AddressFieldAutocomplete.tsx:194"}, "properties": {"repobilityId": "9cfc096bf01a9b81", "scanner": "scanner-primary", "fingerprint": "a7c6d31cd6a01bb0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68591dcf81c6eb78", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/MessageListingCard.tsx:36"}, "properties": {"repobilityId": "9a389badc29eb060", "scanner": "scanner-primary", "fingerprint": "68591dcf81c6eb78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2092d00038b301a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ChatWidget.tsx:172"}, "properties": {"repobilityId": "23100b07c8c7c192", "scanner": "scanner-primary", "fingerprint": "e2092d00038b301a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcbbdc627b3c93c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/BookShowingModal.tsx:108"}, "properties": {"repobilityId": "1fc1c2da1a0ce3eb", "scanner": "scanner-primary", "fingerprint": "bcbbdc627b3c93c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-320776a4aabdd970", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AddressAutocomplete.tsx:203"}, "properties": {"repobilityId": "8bbbfcc769bfe35e", "scanner": "scanner-primary", "fingerprint": "320776a4aabdd970", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b414e144704ed2fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ListingsMap.tsx:949"}, "properties": {"repobilityId": "8397fbb7c47c19b1", "scanner": "scanner-primary", "fingerprint": "b414e144704ed2fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aedb6ef3faecd119", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/ListingCard.tsx:365"}, "properties": {"repobilityId": "2c93228557529254", "scanner": "scanner-primary", "fingerprint": "aedb6ef3faecd119", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ef3a4eaa82b091e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/PropertyConfirmModal.tsx:528"}, "properties": {"repobilityId": "25878d1051e00ea7", "scanner": "scanner-primary", "fingerprint": "8ef3a4eaa82b091e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed655e0f4d849baf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/Header.tsx:299"}, "properties": {"repobilityId": "0d42b65e6a010f25", "scanner": "scanner-primary", "fingerprint": "ed655e0f4d849baf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c808c8ce63eb6ae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Components/AskQuestionModal.tsx:60"}, "properties": {"repobilityId": "9480071e95104fe5", "scanner": "scanner-primary", "fingerprint": "5c808c8ce63eb6ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e3e1d0b341ee047f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/UserLayout.tsx:206"}, "properties": {"repobilityId": "c359d84ef82b8df1", "scanner": "scanner-primary", "fingerprint": "e3e1d0b341ee047f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d5ff2547dc023e17", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/AgentLayout.tsx:186"}, "properties": {"repobilityId": "e2826676c001df27", "scanner": "scanner-primary", "fingerprint": "d5ff2547dc023e17", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b6de31b42345376b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Layouts/AdminLayout.tsx:279"}, "properties": {"repobilityId": "1be270f0c1326c3e", "scanner": "scanner-primary", "fingerprint": "b6de31b42345376b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f973745b0e90dad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MarketAnalysis.tsx:847"}, "properties": {"repobilityId": "2a5724daae175ec0", "scanner": "scanner-primary", "fingerprint": "2f973745b0e90dad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2c9198a5e79483f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Messages.tsx:122"}, "properties": {"repobilityId": "72c5f057fb78a463", "scanner": "scanner-primary", "fingerprint": "b2c9198a5e79483f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1443473be5e219f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Dashboard.tsx:245"}, "properties": {"repobilityId": "743aa44145567850", "scanner": "scanner-primary", "fingerprint": "1443473be5e219f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3d2356349e970f5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/PropertyEstimate.tsx:1062"}, "properties": {"repobilityId": "1dafbb3bcf103154", "scanner": "scanner-primary", "fingerprint": "b3d2356349e970f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7cd1f710fa2cdb2b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/SavedSearches.tsx:81"}, "properties": {"repobilityId": "cc6a2d5ac0a892fa", "scanner": "scanner-primary", "fingerprint": "7cd1f710fa2cdb2b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b079ddcedaab2b31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Welcome.tsx:290"}, "properties": {"repobilityId": "4d9b11424b5e1f17", "scanner": "scanner-primary", "fingerprint": "b079ddcedaab2b31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30ad05914412271e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/HomeV2.tsx:347"}, "properties": {"repobilityId": "6a8063b700faffc2", "scanner": "scanner-primary", "fingerprint": "30ad05914412271e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c11af7838af6fd5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Cma.tsx:629"}, "properties": {"repobilityId": "d028e739e4169fc0", "scanner": "scanner-primary", "fingerprint": "1c11af7838af6fd5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a35a52326c54a93d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/PropertyDetails.tsx:277"}, "properties": {"repobilityId": "e58f289741bfc107", "scanner": "scanner-primary", "fingerprint": "a35a52326c54a93d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2b70ad94e3f0ee14", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MyEnquiries.tsx:216"}, "properties": {"repobilityId": "c60cad7aa51d3f92", "scanner": "scanner-primary", "fingerprint": "2b70ad94e3f0ee14", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-feb0f35ee63c9967", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MyProperties.tsx:369"}, "properties": {"repobilityId": "c2bb6a257481dd5e", "scanner": "scanner-primary", "fingerprint": "feb0f35ee63c9967", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-765ff49cc24fc5c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/MapSearch.tsx:1962"}, "properties": {"repobilityId": "3608acab011a3a2f", "scanner": "scanner-primary", "fingerprint": "765ff49cc24fc5c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1de90e712100576d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Blog/Index.tsx:227"}, "properties": {"repobilityId": "f7e6979ac75ed0da", "scanner": "scanner-primary", "fingerprint": "1de90e712100576d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-efef30991c150a29", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Dashboard.tsx:233"}, "properties": {"repobilityId": "1b3948bc859b7519", "scanner": "scanner-primary", "fingerprint": "efef30991c150a29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36388d2292ac1b09", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ActivityLog.tsx:107"}, "properties": {"repobilityId": "6e3e7337eab3f331", "scanner": "scanner-primary", "fingerprint": "36388d2292ac1b09", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f1fb9b2831d48f7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/ActivityLog.tsx:141"}, "properties": {"repobilityId": "1fc9c3e7484a7774", "scanner": "scanner-primary", "fingerprint": "6f1fb9b2831d48f7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-835c2e9e31721a7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Analytics.tsx:311"}, "properties": {"repobilityId": "616ebb019d7c640a", "scanner": "scanner-primary", "fingerprint": "835c2e9e31721a7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e3d7b2e002579bc4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ListingRequests/Index.tsx:103"}, "properties": {"repobilityId": "132717e38f5f1e90", "scanner": "scanner-primary", "fingerprint": "e3d7b2e002579bc4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38f29372c031ccc5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Blog/Index.tsx:142"}, "properties": {"repobilityId": "0b49674779e21594", "scanner": "scanner-primary", "fingerprint": "38f29372c031ccc5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0487c6a3310424c2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Blog/Index.tsx:208"}, "properties": {"repobilityId": "67afa5d1611bb34e", "scanner": "scanner-primary", "fingerprint": "0487c6a3310424c2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4d5a2389de85e245", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Enquiries/Index.tsx:106"}, "properties": {"repobilityId": "9eb3908b4e3b49c5", "scanner": "scanner-primary", "fingerprint": "4d5a2389de85e245", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-45bd0f026fd59cbc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Enquiries/Index.tsx:228"}, "properties": {"repobilityId": "c1e11115a165a3ee", "scanner": "scanner-primary", "fingerprint": "45bd0f026fd59cbc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cd92062550910b04", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Listings/Index.tsx:148"}, "properties": {"repobilityId": "48f76ce258a503f6", "scanner": "scanner-primary", "fingerprint": "cd92062550910b04", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb2dc006bc3b0423", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Listings/Featured.tsx:69"}, "properties": {"repobilityId": "743c563736e03d6e", "scanner": "scanner-primary", "fingerprint": "eb2dc006bc3b0423", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b47b8bcdf3f3cb40", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Listings/Featured.tsx:97"}, "properties": {"repobilityId": "86f1f08e5a1f088a", "scanner": "scanner-primary", "fingerprint": "b47b8bcdf3f3cb40", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b605c65ee9c98502", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/Users/Index.tsx:239"}, "properties": {"repobilityId": "486e2f2f3d5da19c", "scanner": "scanner-primary", "fingerprint": "b605c65ee9c98502", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e6bcb1ccc0f5b15e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/CmaRequests/Index.tsx:75"}, "properties": {"repobilityId": "29e3d044e12a285f", "scanner": "scanner-primary", "fingerprint": "e6bcb1ccc0f5b15e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d194b827ad244571", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ValuationRequests/Index.tsx:105"}, "properties": {"repobilityId": "4462a1e06f0f2f59", "scanner": "scanner-primary", "fingerprint": "d194b827ad244571", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-536f9671ab65b74c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/ShowingRequests/Index.tsx:124"}, "properties": {"repobilityId": "198ebb49da0e459e", "scanner": "scanner-primary", "fingerprint": "536f9671ab65b74c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98e01340feffbb21", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/Pages/Admin/ShowingRequests/Index.tsx:238"}, "properties": {"repobilityId": "8d31f90b9b8a4f76", "scanner": "scanner-primary", "fingerprint": "98e01340feffbb21", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3cf2e501339a427a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Admin/Messages/Index.tsx:177"}, "properties": {"repobilityId": "73a423ceecb57cbd", "scanner": "scanner-primary", "fingerprint": "3cf2e501339a427a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6df3e07d337eb7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Listings.tsx:155"}, "properties": {"repobilityId": "c73fc0c4e1c0306a", "scanner": "scanner-primary", "fingerprint": "e6df3e07d337eb7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c5354d93e2669ba8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/CmaRequestShow.tsx:131"}, "properties": {"repobilityId": "f300dccd5c72a9a7", "scanner": "scanner-primary", "fingerprint": "c5354d93e2669ba8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-def4a091473b1c43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Dashboard.tsx:211"}, "properties": {"repobilityId": "c1514562d647052f", "scanner": "scanner-primary", "fingerprint": "def4a091473b1c43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-160ebe790507fe53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/ListingRequests.tsx:113"}, "properties": {"repobilityId": "de24cb83a05dc779", "scanner": "scanner-primary", "fingerprint": "160ebe790507fe53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff30aa08554abb6d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/Leads.tsx:141"}, "properties": {"repobilityId": "86dab96b27717d2e", "scanner": "scanner-primary", "fingerprint": "ff30aa08554abb6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e3fae315836756d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/Pages/Agent/CmaRequests.tsx:73"}, "properties": {"repobilityId": "07e7dbf505b5fc69", "scanner": "scanner-primary", "fingerprint": "6e3fae315836756d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0001bfc5d9869d5d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Blog/Index.tsx:227"}, "properties": {"repobilityId": "f15f010b0cb7a2e6", "scanner": "scanner-primary", "fingerprint": "0001bfc5d9869d5d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/Pages/Blog/Index.tsx"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-ff8763845a969cc6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/ActivityLog.tsx:141"}, "properties": {"repobilityId": "00f9f1c4e41eee15", "scanner": "scanner-primary", "fingerprint": "ff8763845a969cc6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/Pages/Admin/ActivityLog.tsx"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-90b781a082838384", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Blog/Index.tsx:208"}, "properties": {"repobilityId": "f2cd09842fed317a", "scanner": "scanner-primary", "fingerprint": "90b781a082838384", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/Pages/Admin/Blog/Index.tsx"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-9c49feab5405c719", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Enquiries/Index.tsx:228"}, "properties": {"repobilityId": "514d1d4a9a677b0e", "scanner": "scanner-primary", "fingerprint": "9c49feab5405c719", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/Pages/Admin/Enquiries/Index.tsx"}, "region": {"startLine": 228}}}]}, {"ruleId": "scanner-589031e0e6f77736", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Listings/Featured.tsx:97"}, "properties": {"repobilityId": "e0235b29d5a01af3", "scanner": "scanner-primary", "fingerprint": "589031e0e6f77736", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/Pages/Admin/Listings/Featured.tsx"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-6a4287cbec5c8cfa", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/Users/Index.tsx:239"}, "properties": {"repobilityId": "662639997e884c71", "scanner": "scanner-primary", "fingerprint": "6a4287cbec5c8cfa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/Pages/Admin/Users/Index.tsx"}, "region": {"startLine": 239}}}]}, {"ruleId": "scanner-f92d4af1a58a128d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/Pages/Admin/ShowingRequests/Index.tsx:238"}, "properties": {"repobilityId": "08d40667e62112ef", "scanner": "scanner-primary", "fingerprint": "f92d4af1a58a128d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/Pages/Admin/ShowingRequests/Index.tsx"}, "region": {"startLine": 238}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-845ec753d649463e", "level": "note", "message": {"text": "Very large file: resources/js/Components/ChatWidget.tsx (1280 lines)"}, "properties": {"repobilityId": "d94f62309fda2487", "scanner": "scanner-primary", "fingerprint": "845ec753d649463e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c211752c30921418", "level": "note", "message": {"text": "Very large file: resources/js/Components/ListingsMap.tsx (1063 lines)"}, "properties": {"repobilityId": "ad82ad4ae8e02725", "scanner": "scanner-primary", "fingerprint": "c211752c30921418", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cabaab762568cfaa", "level": "note", "message": {"text": "Very large file: resources/js/Pages/Sell.tsx (1131 lines)"}, "properties": {"repobilityId": "9e192ce7de46aeaa", "scanner": "scanner-primary", "fingerprint": "cabaab762568cfaa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3c43629a17b3d84e", "level": "note", "message": {"text": "Very large file: resources/js/Pages/MarketAnalysis.tsx (932 lines)"}, "properties": {"repobilityId": "f441a3505a4d4f46", "scanner": "scanner-primary", "fingerprint": "3c43629a17b3d84e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-27834eab5f57c71e", "level": "note", "message": {"text": "Very large file: resources/js/Pages/PropertyEstimate.tsx (1123 lines)"}, "properties": {"repobilityId": "cfe2e8fdb2ecc2c0", "scanner": "scanner-primary", "fingerprint": "27834eab5f57c71e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f90c97ee1f09d9b9", "level": "note", "message": {"text": "Very large file: resources/js/Pages/MarketTrends.tsx (1078 lines)"}, "properties": {"repobilityId": "2a267215c8256e49", "scanner": "scanner-primary", "fingerprint": "f90c97ee1f09d9b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-16540cf8a05bbbd4", "level": "note", "message": {"text": "Very large file: resources/js/Pages/Welcome.tsx (1189 lines)"}, "properties": {"repobilityId": "26e06b1904fb7a79", "scanner": "scanner-primary", "fingerprint": "16540cf8a05bbbd4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-890133923146a3e4", "level": "note", "message": {"text": "Very large file: resources/js/Pages/HomeV2.tsx (1279 lines)"}, "properties": {"repobilityId": "8978527c78a30fe6", "scanner": "scanner-primary", "fingerprint": "890133923146a3e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ad5073cc0d8349d3", "level": "note", "message": {"text": "Very large file: resources/js/Pages/Cma.tsx (1095 lines)"}, "properties": {"repobilityId": "0fc3ccf48eb6cbe2", "scanner": "scanner-primary", "fingerprint": "ad5073cc0d8349d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4f8b8c10b730fa27", "level": "note", "message": {"text": "Very large file: resources/js/Pages/PropertyDetails.tsx (2705 lines)"}, "properties": {"repobilityId": "c45d4ecd0c097470", "scanner": "scanner-primary", "fingerprint": "4f8b8c10b730fa27", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d1ea47f36d782a48", "level": "note", "message": {"text": "Very large file: resources/js/Pages/MapSearch.tsx (2687 lines)"}, "properties": {"repobilityId": "e57b0cad9a245cf3", "scanner": "scanner-primary", "fingerprint": "d1ea47f36d782a48", "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": "cf991788fb5bb50d", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-01f96f71d9907a8c", "level": "note", "message": {"text": "README lacks setup or run instructions"}, "properties": {"repobilityId": "32ec1de8fbf38463", "scanner": "scanner-primary", "fingerprint": "01f96f71d9907a8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "2422344ffcdb1ac8", "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": "ca45078b4152f012", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "4d74a42a33bea30c", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "5f5cf79ff7d239ac", "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": "9456a14e05859b97", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-c68d5041f783c084", "level": "none", "message": {"text": "Commented-code block (5 lines) in vite.config.js:7"}, "properties": {"repobilityId": "70b821959b7c9bdd", "scanner": "scanner-primary", "fingerprint": "c68d5041f783c084", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-506bf063cd011786", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/Components/ListingsMap.tsx:610"}, "properties": {"repobilityId": "ef7c9a91355186aa", "scanner": "scanner-primary", "fingerprint": "506bf063cd011786", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72a61078abb9144f", "level": "none", "message": {"text": "Commented-code block (7 lines) in resources/js/Components/ListingCard.tsx:143"}, "properties": {"repobilityId": "eda13b58f023c6dc", "scanner": "scanner-primary", "fingerprint": "72a61078abb9144f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8acb96ffbfd018b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/Components/PropertyConfirmModal.tsx:249"}, "properties": {"repobilityId": "07b1cf4ac0c62929", "scanner": "scanner-primary", "fingerprint": "8acb96ffbfd018b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae80ad74fd8af3dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/utils/propertyFields.ts:5"}, "properties": {"repobilityId": "5a5ffaf9810223a6", "scanner": "scanner-primary", "fingerprint": "ae80ad74fd8af3dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a49d8341fc452621", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/Pages/PropertyEstimate.tsx:780"}, "properties": {"repobilityId": "ed0127e1d8e2516e", "scanner": "scanner-primary", "fingerprint": "a49d8341fc452621", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d32c664c4a2aab07", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/Pages/PropertyDetails.tsx:889"}, "properties": {"repobilityId": "7c60c2ff2e169336", "scanner": "scanner-primary", "fingerprint": "d32c664c4a2aab07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8b4f198ad92b90b", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/Pages/MapSearch.tsx:252"}, "properties": {"repobilityId": "4636063fbbb46b4a", "scanner": "scanner-primary", "fingerprint": "e8b4f198ad92b90b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75245cedf19a95b0", "level": "error", "message": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/AddressFieldAutocomplete.tsx:79)"}, "properties": {"repobilityId": "1483325ccbcf3eb9", "scanner": "scanner-primary", "fingerprint": "75245cedf19a95b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-98c9f2df4b7b6240", "level": "error", "message": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/ChatWidget.tsx:215)"}, "properties": {"repobilityId": "b5531bbb71607b2b", "scanner": "scanner-primary", "fingerprint": "98c9f2df4b7b6240", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ad5e98596dde23ae", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat/lead (resources/js/Components/ChatWidget.tsx:386)"}, "properties": {"repobilityId": "b236b2a5791e3e50", "scanner": "scanner-primary", "fingerprint": "ad5e98596dde23ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1ce408e45d881f08", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/summary (resources/js/Components/ChatWidget.tsx:658)"}, "properties": {"repobilityId": "b8aa66c80dbfdc26", "scanner": "scanner-primary", "fingerprint": "1ce408e45d881f08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-eedb99ced95e75cd", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/conversations/${id} (resources/js/Components/ChatWidget.tsx:730)"}, "properties": {"repobilityId": "b4939fc1ce4e5866", "scanner": "scanner-primary", "fingerprint": "eedb99ced95e75cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8a11ee07c01a4c6f", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat/conversations/${activeId}/reply (resources/js/Components/ChatWidget.tsx:750)"}, "properties": {"repobilityId": "254b6a961e48029c", "scanner": "scanner-primary", "fingerprint": "8a11ee07c01a4c6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-47c779541073bc65", "level": "error", "message": {"text": "Dangling fetch: POST /api/messages/listing-search (resources/js/Components/ChatWidget.tsx:772)"}, "properties": {"repobilityId": "b7df1910c0832aca", "scanner": "scanner-primary", "fingerprint": "47c779541073bc65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7cfb6c43b768c6ed", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/my-listings (resources/js/Components/ChatWidget.tsx:792)"}, "properties": {"repobilityId": "86c7cc706eb814f2", "scanner": "scanner-primary", "fingerprint": "7cfb6c43b768c6ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-fbd50e5f7db3f36f", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/contacts (resources/js/Components/ChatWidget.tsx:809)"}, "properties": {"repobilityId": "f1518534e925fd87", "scanner": "scanner-primary", "fingerprint": "fbd50e5f7db3f36f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a4bf3300f27feeee", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat/conversations (resources/js/Components/ChatWidget.tsx:820)"}, "properties": {"repobilityId": "b242b11e606ee17b", "scanner": "scanner-primary", "fingerprint": "a4bf3300f27feeee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ebb150d85ee59dce", "level": "error", "message": {"text": "Dangling fetch: POST /listing-services/request (resources/js/Components/AgentContactModal.tsx:134)"}, "properties": {"repobilityId": "161f1df001af145a", "scanner": "scanner-primary", "fingerprint": "ebb150d85ee59dce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-af62610a23e8fddb", "level": "error", "message": {"text": "Dangling fetch: GET /api/listings/${mlsNumber} (resources/js/Components/PropertyDetailModal.tsx:67)"}, "properties": {"repobilityId": "81e0c843545f1a9d", "scanner": "scanner-primary", "fingerprint": "af62610a23e8fddb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-974110a51766ea55", "level": "error", "message": {"text": "Dangling fetch: GET /api/listings/${mlsNumber}/similar (resources/js/Components/PropertyDetailModal.tsx:70)"}, "properties": {"repobilityId": "e89882f47a833818", "scanner": "scanner-primary", "fingerprint": "974110a51766ea55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e566548970bd6fd9", "level": "error", "message": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Components/AddressAutocomplete.tsx:65)"}, "properties": {"repobilityId": "fd6e5dbebbb381c5", "scanner": "scanner-primary", "fingerprint": "e566548970bd6fd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1070b4d476ca5f04", "level": "error", "message": {"text": "Dangling fetch: POST /api/property-images/upload (resources/js/Components/PropertyConfirmModal.tsx:117)"}, "properties": {"repobilityId": "094173f36db138c1", "scanner": "scanner-primary", "fingerprint": "1070b4d476ca5f04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-95b68cf9cdbcd768", "level": "error", "message": {"text": "Dangling fetch: POST /cma-requests (resources/js/Components/PropertyConfirmModal.tsx:225)"}, "properties": {"repobilityId": "451ee8b5c7317411", "scanner": "scanner-primary", "fingerprint": "95b68cf9cdbcd768", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bde8a3d12982ce9e", "level": "error", "message": {"text": "Dangling fetch: POST /listing-requests (resources/js/Components/PropertyConfirmModal.tsx:230)"}, "properties": {"repobilityId": "aae8f3f93786176d", "scanner": "scanner-primary", "fingerprint": "bde8a3d12982ce9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f433802b1817831d", "level": "error", "message": {"text": "Dangling fetch: POST /listing-services/request (resources/js/Components/ListMyPropertyModal.tsx:42)"}, "properties": {"repobilityId": "dc3cb96fb5493f3d", "scanner": "scanner-primary", "fingerprint": "f433802b1817831d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f5ab33dacd3f4f40", "level": "error", "message": {"text": "Dangling fetch: GET /notifications (resources/js/Layouts/UserLayout.tsx:122)"}, "properties": {"repobilityId": "814bdeebe70b4f90", "scanner": "scanner-primary", "fingerprint": "f5ab33dacd3f4f40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b385b6f568060811", "level": "error", "message": {"text": "Dangling fetch: POST /notifications/mark-read (resources/js/Layouts/UserLayout.tsx:130)"}, "properties": {"repobilityId": "def967a020816f62", "scanner": "scanner-primary", "fingerprint": "b385b6f568060811", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1057b07547f0ec6d", "level": "error", "message": {"text": "Dangling fetch: GET /notifications (resources/js/Layouts/AgentLayout.tsx:92)"}, "properties": {"repobilityId": "f0efdac2a339dbca", "scanner": "scanner-primary", "fingerprint": "1057b07547f0ec6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e20fd1d65609d848", "level": "error", "message": {"text": "Dangling fetch: POST /notifications/mark-read (resources/js/Layouts/AgentLayout.tsx:100)"}, "properties": {"repobilityId": "3d94e94c9a2d5016", "scanner": "scanner-primary", "fingerprint": "e20fd1d65609d848", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6800485e39928160", "level": "error", "message": {"text": "Dangling fetch: GET /messages/${convId} (resources/js/Pages/Messages.tsx:50)"}, "properties": {"repobilityId": "3f83684c388927d5", "scanner": "scanner-primary", "fingerprint": "6800485e39928160", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2037c703fd981631", "level": "error", "message": {"text": "Dangling fetch: POST /messages/${selectedId}/reply (resources/js/Pages/Messages.tsx:68)"}, "properties": {"repobilityId": "5b9337b333a18412", "scanner": "scanner-primary", "fingerprint": "2037c703fd981631", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bf395869084aaa6a", "level": "error", "message": {"text": "Dangling fetch: POST /listing-requests (resources/js/Pages/PropertyEstimate.tsx:299)"}, "properties": {"repobilityId": "19dd40f6501f8c8a", "scanner": "scanner-primary", "fingerprint": "bf395869084aaa6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8568411376d49057", "level": "error", "message": {"text": "Dangling fetch: POST /listing-services/request (resources/js/Pages/MarketTrends.tsx:481)"}, "properties": {"repobilityId": "36bf00bf7cb5a37a", "scanner": "scanner-primary", "fingerprint": "8568411376d49057", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-af82ad06f416227f", "level": "error", "message": {"text": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/Welcome.tsx:94)"}, "properties": {"repobilityId": "25b75942a8196348", "scanner": "scanner-primary", "fingerprint": "af82ad06f416227f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4db9cce1a35ce41f", "level": "error", "message": {"text": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/HomeV2.tsx:92)"}, "properties": {"repobilityId": "e9da60eb394759ef", "scanner": "scanner-primary", "fingerprint": "4db9cce1a35ce41f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3e8c84ba2133792b", "level": "error", "message": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/HomeV2.tsx:93)"}, "properties": {"repobilityId": "195fd274a05fe393", "scanner": "scanner-primary", "fingerprint": "3e8c84ba2133792b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5997dc1dd12489fa", "level": "error", "message": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/HomeV2.tsx:131)"}, "properties": {"repobilityId": "ebfa0e03855cbb39", "scanner": "scanner-primary", "fingerprint": "5997dc1dd12489fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-cdb49ee9b3fd35ce", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/check (resources/js/Pages/Cma.tsx:198)"}, "properties": {"repobilityId": "43b398057ee6ae4f", "scanner": "scanner-primary", "fingerprint": "cdb49ee9b3fd35ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-42029fbefa661c3e", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/Cma.tsx:204)"}, "properties": {"repobilityId": "17ce1b00ee773d66", "scanner": "scanner-primary", "fingerprint": "42029fbefa661c3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5fba97131505c7d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/addresses/autocomplete (resources/js/Pages/Cma.tsx:257)"}, "properties": {"repobilityId": "fb423ff061eb3e3c", "scanner": "scanner-primary", "fingerprint": "5fba97131505c7d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3bd5705ca6591868", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/PropertyDetails.tsx:517)"}, "properties": {"repobilityId": "e30e6063e2d50611", "scanner": "scanner-primary", "fingerprint": "3bd5705ca6591868", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f5d0c0521cc4b5b7", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/PropertyDetails.tsx:532)"}, "properties": {"repobilityId": "7f6d462677286270", "scanner": "scanner-primary", "fingerprint": "f5d0c0521cc4b5b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8b7a2aceca3be234", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/check (resources/js/Pages/PropertyDetails.tsx:550)"}, "properties": {"repobilityId": "e83f1cc1a91e29c2", "scanner": "scanner-primary", "fingerprint": "8b7a2aceca3be234", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1b750a9cf4d8e18c", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/${mls}/toggle (resources/js/Pages/PropertyDetails.tsx:568)"}, "properties": {"repobilityId": "83a3e8ae1f57e931", "scanner": "scanner-primary", "fingerprint": "1b750a9cf4d8e18c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-53cc732bb4be6c86", "level": "error", "message": {"text": "Dangling fetch: POST /property-estimate/lookup (resources/js/Pages/MyProperties.tsx:121)"}, "properties": {"repobilityId": "4a0a69cff7c6f557", "scanner": "scanner-primary", "fingerprint": "53cc732bb4be6c86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-662c979717016949", "level": "error", "message": {"text": "Dangling fetch: POST /listing-requests (resources/js/Pages/MyProperties.tsx:203)"}, "properties": {"repobilityId": "6ff87af15c612c64", "scanner": "scanner-primary", "fingerprint": "662c979717016949", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f695e00fa793c6ed", "level": "error", "message": {"text": "Dangling fetch: POST /cma-requests (resources/js/Pages/MyProperties.tsx:232)"}, "properties": {"repobilityId": "11f898ec72ce4927", "scanner": "scanner-primary", "fingerprint": "f695e00fa793c6ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-58422e13a0eb5674", "level": "error", "message": {"text": "Dangling fetch: GET /api/map-search/count (resources/js/Pages/MapSearch.tsx:654)"}, "properties": {"repobilityId": "8f923952f77c9ef7", "scanner": "scanner-primary", "fingerprint": "58422e13a0eb5674", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2e6f023f51c6674f", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/check (resources/js/Pages/MapSearch.tsx:1304)"}, "properties": {"repobilityId": "cbd6706c94d3f457", "scanner": "scanner-primary", "fingerprint": "2e6f023f51c6674f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5ef849c293ce3d81", "level": "error", "message": {"text": "Dangling fetch: POST /favourites/${mlsNumber}/toggle (resources/js/Pages/MapSearch.tsx:1319)"}, "properties": {"repobilityId": "84a7a78ffb8491a2", "scanner": "scanner-primary", "fingerprint": "5ef849c293ce3d81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d38f6e84972be1e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/listings/viewed (resources/js/Pages/MapSearch.tsx:1341)"}, "properties": {"repobilityId": "db4442de14dcbe91", "scanner": "scanner-primary", "fingerprint": "d38f6e84972be1e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3705bc2ae6352af9", "level": "error", "message": {"text": "Dangling fetch: POST /api/listings/view (resources/js/Pages/MapSearch.tsx:1362)"}, "properties": {"repobilityId": "20a2742acb4a95aa", "scanner": "scanner-primary", "fingerprint": "3705bc2ae6352af9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-963c26f6468f80de", "level": "error", "message": {"text": "Dangling fetch: POST /api/listings/search (resources/js/Pages/MapSearch.tsx:1441)"}, "properties": {"repobilityId": "d73d6b932337fd07", "scanner": "scanner-primary", "fingerprint": "963c26f6468f80de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-238cd5e2715dd47a", "level": "error", "message": {"text": "Dangling fetch: GET /api/locations/autocomplete (resources/js/Pages/MapSearch.tsx:1468)"}, "properties": {"repobilityId": "a25d63bc599914e0", "scanner": "scanner-primary", "fingerprint": "238cd5e2715dd47a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e2487b0191c064c1", "level": "error", "message": {"text": "Dangling fetch: POST /admin/messages/${conversation.id}/reply (resources/js/Pages/Admin/ListingRequests/Show.tsx:94)"}, "properties": {"repobilityId": "ef8040aa1ed81f7c", "scanner": "scanner-primary", "fingerprint": "e2487b0191c064c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1c2738e805acceb6", "level": "error", "message": {"text": "Dangling fetch: GET /admin/messages/${convId} (resources/js/Pages/Admin/Messages/Index.tsx:70)"}, "properties": {"repobilityId": "eacb91a1aa4f6406", "scanner": "scanner-primary", "fingerprint": "1c2738e805acceb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-05e2d55dbcb5ff95", "level": "error", "message": {"text": "Dangling fetch: POST /admin/messages/${selectedId}/reply (resources/js/Pages/Admin/Messages/Index.tsx:88)"}, "properties": {"repobilityId": "bda9f6e8bee1c33b", "scanner": "scanner-primary", "fingerprint": "05e2d55dbcb5ff95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-005f9b6f5950d041", "level": "error", "message": {"text": "Dangling fetch: POST /api/messages/listing-search (resources/js/Pages/Admin/Messages/Index.tsx:106)"}, "properties": {"repobilityId": "b9ad546b81915451", "scanner": "scanner-primary", "fingerprint": "005f9b6f5950d041", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d7fe40ea094f16dc", "level": "error", "message": {"text": "Dangling fetch: POST /messages/${conversation.id}/reply (resources/js/Pages/Agent/ListingRequestShow.tsx:64)"}, "properties": {"repobilityId": "c99295d9b1ed37a2", "scanner": "scanner-primary", "fingerprint": "d7fe40ea094f16dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-36b0050c55706529", "level": "note", "message": {"text": "Unused endpoint: POST /showing-requests"}, "properties": {"repobilityId": "5a3173907f16f219", "scanner": "scanner-primary", "fingerprint": "36b0050c55706529", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa318623e780388d", "level": "note", "message": {"text": "Unused endpoint: POST /enquiry"}, "properties": {"repobilityId": "5816ad6e859ac6f9", "scanner": "scanner-primary", "fingerprint": "fa318623e780388d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a163003a3f015daa", "level": "note", "message": {"text": "Unused endpoint: POST /cma-report/request"}, "properties": {"repobilityId": "88e3d69b1460ed9f", "scanner": "scanner-primary", "fingerprint": "a163003a3f015daa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3393247ca80c427e", "level": "note", "message": {"text": "Unused endpoint: GET /market-trends"}, "properties": {"repobilityId": "fd59fb0e5825df6b", "scanner": "scanner-primary", "fingerprint": "3393247ca80c427e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fd17b7fc407f108", "level": "note", "message": {"text": "Unused endpoint: GET /comparables"}, "properties": {"repobilityId": "d243dae5ed72eb8b", "scanner": "scanner-primary", "fingerprint": "3fd17b7fc407f108", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ece4cb7935ea461", "level": "note", "message": {"text": "Unused endpoint: POST /saved-searches"}, "properties": {"repobilityId": "60dfb2b7d71d8c24", "scanner": "scanner-primary", "fingerprint": "3ece4cb7935ea461", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4604f8abf6c30e6", "level": "note", "message": {"text": "Unused endpoint: GET /map-search"}, "properties": {"repobilityId": "5aeed67faa78f9e6", "scanner": "scanner-primary", "fingerprint": "a4604f8abf6c30e6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5dc9d4af696cdaa", "level": "note", "message": {"text": "Unused endpoint: GET /blog"}, "properties": {"repobilityId": "1c21e6e95200ed06", "scanner": "scanner-primary", "fingerprint": "e5dc9d4af696cdaa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80e43fd38ede4d40", "level": "note", "message": {"text": "Unused endpoint: POST /profile/avatar"}, "properties": {"repobilityId": "7b0894a8f311bee1", "scanner": "scanner-primary", "fingerprint": "80e43fd38ede4d40", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3c10ef279ec116a6", "level": "note", "message": {"text": "Unused endpoint: DELETE /profile/avatar"}, "properties": {"repobilityId": "e37e5cbc354e16bc", "scanner": "scanner-primary", "fingerprint": "3c10ef279ec116a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-483cb16198c0eec2", "level": "note", "message": {"text": "Unused endpoint: GET /admin/activity-log"}, "properties": {"repobilityId": "7bb6ae8cf5feadbe", "scanner": "scanner-primary", "fingerprint": "483cb16198c0eec2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d02a01062e54f62c", "level": "note", "message": {"text": "Unused endpoint: POST /admin/settings/upload-agent-photo"}, "properties": {"repobilityId": "5568f1a99c4a17ee", "scanner": "scanner-primary", "fingerprint": "d02a01062e54f62c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-83388a8c9e213bd8", "level": "note", "message": {"text": "Unused endpoint: DELETE /admin/settings/delete-agent-photo"}, "properties": {"repobilityId": "e6052b8db4d64bf7", "scanner": "scanner-primary", "fingerprint": "83388a8c9e213bd8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a017477ce9596b4f", "level": "note", "message": {"text": "Unused endpoint: POST /admin/settings/upload-cma-pdf"}, "properties": {"repobilityId": "495c417f10318d39", "scanner": "scanner-primary", "fingerprint": "a017477ce9596b4f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6688f10ed3481cf1", "level": "note", "message": {"text": "Unused endpoint: DELETE /admin/settings/delete-cma-pdf"}, "properties": {"repobilityId": "5f646ca8a036fecf", "scanner": "scanner-primary", "fingerprint": "6688f10ed3481cf1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43e444a47ba9ccb5", "level": "note", "message": {"text": "Unused endpoint: GET /admin/blog"}, "properties": {"repobilityId": "250f4fcb8eb4b9c3", "scanner": "scanner-primary", "fingerprint": "43e444a47ba9ccb5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5e3a3c5a6a68857", "level": "note", "message": {"text": "Unused endpoint: POST /admin/blog"}, "properties": {"repobilityId": "df6855b51a71100e", "scanner": "scanner-primary", "fingerprint": "c5e3a3c5a6a68857", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8ab3b6436f9e718", "level": "note", "message": {"text": "Unused endpoint: GET /admin/enquiries"}, "properties": {"repobilityId": "4ec879bbf0176c67", "scanner": "scanner-primary", "fingerprint": "d8ab3b6436f9e718", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fd7d1919851c0db", "level": "note", "message": {"text": "Unused endpoint: GET /admin/listings"}, "properties": {"repobilityId": "11c48bcec38df592", "scanner": "scanner-primary", "fingerprint": "3fd7d1919851c0db", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0aba7f1883cb96f2", "level": "note", "message": {"text": "Unused endpoint: GET /admin/users"}, "properties": {"repobilityId": "3e2fdb494c3bbbaa", "scanner": "scanner-primary", "fingerprint": "0aba7f1883cb96f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71a448bf74620a59", "level": "note", "message": {"text": "Unused endpoint: GET /admin/showing-requests"}, "properties": {"repobilityId": "8f25daaa834ed0a1", "scanner": "scanner-primary", "fingerprint": "71a448bf74620a59", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-02c366fdf9ebe663", "level": "note", "message": {"text": "Unused endpoint: POST /admin/messages"}, "properties": {"repobilityId": "43c1bb6ed01d6e79", "scanner": "scanner-primary", "fingerprint": "02c366fdf9ebe663", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}