{"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-ee77bad092fcd312", "name": "Possibly dead Python function: page1", "shortDescription": {"text": "Possibly dead Python function: page1"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-698cb25d305dfb89", "name": "Possibly dead Python function: page2", "shortDescription": {"text": "Possibly dead Python function: page2"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eec49f1d49feb5cb", "name": "Possibly dead Python function: page3", "shortDescription": {"text": "Possibly dead Python function: page3"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fdc6f246b71e780", "name": "Possibly dead Python function: page4", "shortDescription": {"text": "Possibly dead Python function: page4"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-29d5524a6247535f", "name": "Possibly dead Python function: page5", "shortDescription": {"text": "Possibly dead Python function: page5"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c35fb1503f44f78f", "name": "Possibly dead Python function: page6", "shortDescription": {"text": "Possibly dead Python function: page6"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7b823e426023547", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-teardown.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-teardown.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-714e7ed7f7986ce8", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a218607404331d8", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/client-safety-ribbon.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/client-safety-ribbon.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-8dbfbbe96939b071", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/pre-shift-briefing-card.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/pre-shift-briefing-card.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-870be8f5d9892e6c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/app-logo.tsx:23", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/app-logo.tsx:23"}, "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-7f52af807ea4cc1e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/app-sidebar.tsx:2420", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/app-sidebar.tsx:2420"}, "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-fef9055d1fb3274d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/prn-sheet.tsx:451", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/prn-sheet.tsx:451"}, "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-6462d445b08eb83b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/med-round-card.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/med-round-card.tsx:76"}, "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-18020345fa7378ce", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/user-info.tsx:23", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/user-info.tsx:23"}, "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-573b8a0ad74ed0cb", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/staff-header.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/staff-header.tsx:94"}, "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-93320a5f08f869d7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/fleet-charts.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/fleet-charts.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-56bd8bba9230e76e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/behaviour-insights-card.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/behaviour-insights-card.tsx:88"}, "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-d5b3492078d90091", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheet-allocations-breakdown.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheet-allocations-breakdown.tsx:182"}, "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-7679c9912f5fcee2", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/global-nav-search.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/global-nav-search.tsx:130"}, "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-990dafb430cc8188", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/components/two-factor-setup-modal.tsx:78", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/components/two-factor-setup-modal.tsx:78"}, "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-c1ae5be6944c3a3b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/assign-worker-dialog.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/assign-worker-dialog.tsx:173"}, "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-5aacaf21a894fa49", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/governance/GovernanceCalendar.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/governance/GovernanceCalendar.tsx:209"}, "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-edd8066db77b8707", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/governance/GovernanceAttachmentsPanel.tsx:2", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/governance/GovernanceAttachmentsPanel.tsx:289"}, "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-6ea1dbf05400974d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/detail-modal.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/detail-modal.tsx:244"}, "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-4c40e0fa27b1b960", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/bookings.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/bookings.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-5446668663cf48c7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/referrals.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/referrals.tsx:200"}, "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-6c68d7cfe18ffc1f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/overview.tsx:304", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/overview.tsx:304"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87e2c6a7b61bb1f9", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/requests.tsx:333", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/requests.tsx:333"}, "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-d52cf5bc01efd1e4", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/control-room/evidence-pack-panel.tsx:503", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/control-room/evidence-pack-panel.tsx:503"}, "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-650f13921c3f2e63", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/recent-list.tsx:45", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/recent-list.tsx:45"}, "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-7d9b89c5808fd2af", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/upcoming-list.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/upcoming-list.tsx:58"}, "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-4baa7b0cf3fa109f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/shift-detail-sheet.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/shift-detail-sheet.tsx:99"}, "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-07c2410f1316a679", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/today-timeline.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/today-timeline.tsx:64"}, "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-a0bbbbb9cfe047dd", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/reassign-dialog.tsx:335", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/reassign-dialog.tsx:335"}, "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-981add86fac1eeb3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/signal-rail.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/signal-rail.tsx:168"}, "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-d5456ea7988fc3af", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/coverage-pane.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/coverage-pane.tsx:182"}, "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-21d760e7eb573201", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/open-shifts-pane.tsx:161", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/open-shifts-pane.tsx:161"}, "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-6aeba5f1fe1a5890", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/shift-context-menu.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/shift-context-menu.tsx:86"}, "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-ca971643f5021afd", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/entity-filter.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/entity-filter.tsx:88"}, "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-eebba004db4117de", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/day-detail-dialog.tsx:277", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/day-detail-dialog.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-40fb492e5531cc69", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/availability-pane.tsx:307", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/availability-pane.tsx:307"}, "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-c1528ac72acad22d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/donut.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/donut.tsx:150"}, "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-302e55605d1c7bf6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/calendar-pane.tsx:323", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/calendar-pane.tsx:323"}, "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-6005214b17c4734f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/analytics-pane.tsx:307", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/analytics-pane.tsx:307"}, "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-579e291cee723445", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/series-dialogs.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/series-dialogs.tsx:248"}, "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-514a72a55c8f5f2b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/site-filter.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/site-filter.tsx:95"}, "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-09d7b870677c5224", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/multi-entity-filter.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/multi-entity-filter.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec88f67d6a50486f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/capacity-heatmap-pane.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/capacity-heatmap-pane.tsx:139"}, "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-cd71f8fb65e9d685", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/templates-pane.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/templates-pane.tsx:183"}, "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-96c6fef1548348c8", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/template-dialogs.tsx:514", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/template-dialogs.tsx:514"}, "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-a726d1c040e332c2", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/time-off-pane.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/time-off-pane.tsx:112"}, "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-11d6c402015ce701", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/week-grid-pane.tsx:906", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/week-grid-pane.tsx:906"}, "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-5df2f7b2ace7e316", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/series-pane.tsx:135", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/series-pane.tsx:135"}, "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-962dc84a11edf461", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/conflict-queue/conflict-queue-lis", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/conflict-queue/conflict-queue-list.tsx:61"}, "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-429064b9b412520a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/conflict-queue/shift-summary-card", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/conflict-queue/shift-summary-card.tsx:33"}, "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-20500de0a6f01eda", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/shifts-bar-chart.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/shifts-bar-chart.tsx:116"}, "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-67cb978c14a3987d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/context-menu.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/context-menu.tsx:189"}, "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-82e03d30a79b0601", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/hover-popover.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/hover-popover.tsx:152"}, "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-b33bffeeb2d7e2c8", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/shift-timeline.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/shift-timeline.tsx:92"}, "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-3043fcf91de3da21", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/activity-feed.tsx:249", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/activity-feed.tsx:249"}, "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-79d4e7cf5eb16c98", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/needs-attention.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/needs-attention.tsx:87"}, "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-a589f1a42c4f4438", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/template-builder.tsx:346", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/template-builder.tsx:346"}, "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-c6b9f42ee9deb150", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/charts.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/charts.tsx:207"}, "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-6d821471810dac95", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/run-cards.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/run-cards.tsx:41"}, "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-c3a49be3dd6dcef2", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/context-menu.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/context-menu.tsx:146"}, "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-3169827f99396dad", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/primitives.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/primitives.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-5e37b192e1973359", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/hero-footer.tsx:184", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/hero-footer.tsx:184"}, "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-137e910684837870", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/reports.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/reports.tsx:147"}, "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-4688401e0bdbbb27", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/schedule.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/schedule.tsx:83"}, "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-26bbad8772e94d00", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/overview.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/overview.tsx:171"}, "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-94ad039df69a6a4f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/assignments.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/assignments.tsx:66"}, "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-3783d86fd1dbed2f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/library.tsx:136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/library.tsx:136"}, "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-72ef05058ef39d3c", "name": "\"active\" state uses light bg in a dark theme \u2014 resources/js/components/checklists/panes/library.tsx:219", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 resources/js/components/checklists/panes/library.tsx:219"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53fc85d60d11c8f5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/ui/tabs.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/ui/tabs.tsx:166"}, "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-a7bb3074527b9376", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/analytics.tsx:654", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/analytics.tsx:654"}, "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-c431737905591dee", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/timeline.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/timeline.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-07c01d544bb5b957", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/circular-gauge.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/circular-gauge.tsx:109"}, "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-49a99421e4034314", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/activity-timeline.tsx:156", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/activity-timeline.tsx:156"}, "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-5ce636bde8229756", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/stock-detail-dialog.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/stock-detail-dialog.tsx:72"}, "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-fb62b6ae6b4cd901", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/medication-event-drawer.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/medication-event-drawer.tsx:218"}, "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-396a82f3b0469600", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/rounds/round-board.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/rounds/round-board.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-71bc236d12314e7e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/rounds/round-activity.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/rounds/round-activity.tsx:128"}, "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-a41352e9c616dea6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/recruitment/candidate-card.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/recruitment/candidate-card.tsx:37"}, "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-cc341098c12db5db", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/resident-tracking/resident-map.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/resident-tracking/resident-map.tsx:119"}, "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-2d6b657f55bd5595", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/resident-tracking/resident-sidebar.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/resident-tracking/resident-sidebar.tsx:154"}, "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-baa9f10c6fa739e7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/health-safety/event-timeline.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/health-safety/event-timeline.tsx:147"}, "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-62f621c4cf92dc13", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/page/stat-tile.tsx:220", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/page/stat-tile.tsx:220"}, "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-1c0deade7e650177", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/page/page-hero-avatar-stack.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/page/page-hero-avatar-stack.tsx:167"}, "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-c00278e4ca95ac88", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/people-picker.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/people-picker.tsx:89"}, "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-fcfe5ba497104cf3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/offboarding-wizard-dialog.tsx:298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/offboarding-wizard-dialog.tsx:298"}, "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-7602e68c532f2ec5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/onboarding-wizard-dialog.tsx:371", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/onboarding-wizard-dialog.tsx:371"}, "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-000077d27fed1943", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/departments-pane.tsx:188", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/departments-pane.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b466934e2db258d1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/people/org-chart-pane.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/people/org-chart-pane.tsx:210"}, "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-44d0393271348eac", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/add-client-dialog.tsx:1003", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/add-client-dialog.tsx:1003"}, "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-4ce961ba5e45e76e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/family-chat.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/family-chat.tsx:152"}, "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-228d20280cb19de1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/workflow-wizard.tsx:628", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/workflow-wizard.tsx:628"}, "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-c3e6189456dbc662", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/overview-grid.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/overview-grid.tsx:70"}, "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-3df4439c6070f6d0", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/care-plan-dialog.tsx:928", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/care-plan-dialog.tsx:928"}, "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-e3913b006002a55f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/goal-dialog.tsx:829", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/goal-dialog.tsx:829"}, "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-3b4b8e68b0b3a5c5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/hero.tsx:163", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/hero.tsx:163"}, "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-63dab78007426088", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/ui.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/ui.tsx:68"}, "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-eef967bfc8c4676d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/tabs/behaviour-abc.tsx:203", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/tabs/behaviour-abc.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-fe8fe33047b1bbd6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/meds/wizard-shell.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/meds/wizard-shell.tsx:139"}, "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-dccb137dfa382802", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/workstream/my-day-list.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/workstream/my-day-list.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-d276723792b71e9a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/wizard/shell.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/wizard/shell.tsx:140"}, "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-f197db28cecec6e1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/job-board/job-card.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/job-board/job-card.tsx:255"}, "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-76f620c13b5d5d0d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/medications/PrnHistoryPanel.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/medications/PrnHistoryPanel.tsx:89"}, "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-5aebc1a259ac3430", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/medications/DashboardWidgets.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/medications/DashboardWidgets.tsx:109"}, "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-c1dfbaf9599c35ac", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/client-profile/recent-clients-strip.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/client-profile/recent-clients-strip.tsx:74"}, "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-3d55651465ef131b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/sites/add-site-dialog.tsx:1427", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/sites/add-site-dialog.tsx:1427"}, "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-558dab5a9cef0a0a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheets/create-timesheet-dialog.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheets/create-timesheet-dialog.tsx:219"}, "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-62658eff4daed874", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheets/view-timesheet-dialog.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheets/view-timesheet-dialog.tsx:143"}, "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-508a7ad0122fa63d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-calendar.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-calendar.tsx:237"}, "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-9d4f4ae5d3076381", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/my-calendar.tsx:436", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/my-calendar.tsx:436"}, "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-8d002ab48d2010e7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/templates.tsx:474", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/templates.tsx:474"}, "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-a9b959d2a23d56c5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/api.tsx:408", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/api.tsx:408"}, "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-567263a59d42ee4b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/profile.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/profile.tsx:295"}, "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-4464f2faf80ce3cd", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/sso-config.tsx:742", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/sso-config.tsx:742"}, "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-e9d688a638542509", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/notification-escalations.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/notification-escalations.tsx:213"}, "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-56f29fcec9bb8bb1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/two-factor.tsx:100", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/two-factor.tsx:100"}, "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-8ea0e2493bceb58f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/audit-logs.tsx:626", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/audit-logs.tsx:626"}, "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-c2c539e4d485202a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/sso-groups.tsx:290", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/sso-groups.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-1824d485fd306dcb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/users/index.tsx:622", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/users/index.tsx:622"}, "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-bd30e715900442e7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/index.tsx:180", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/index.tsx:180"}, "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-db4b1b76c62571bb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/with-concerns.tsx:82", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/with-concerns.tsx:82"}, "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-003e560ae769e03a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/with-incidents.tsx:82", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/with-incidents.tsx:82"}, "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-6a6e2261a0ab035e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/procedure-runs/index.tsx:140", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/procedure-runs/index.tsx:140"}, "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-bd37c081f9de9cbe", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/procedure-runs/overdue.tsx:78", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/procedure-runs/overdue.tsx:78"}, "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-e665e1729282f6b3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/requests/index.tsx:150", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/requests/index.tsx:150"}, "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-3cc552d7052c55ac", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/communication-logs/index.tsx:147", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/communication-logs/index.tsx:147"}, "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-55b7387b82c09a24", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/resources/index.tsx:167", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/resources/index.tsx:167"}, "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-728b6264b0dfaaf5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/index.tsx:145", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/index.tsx:145"}, "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-163f8b0173f92697", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/needing-acknowled", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/needing-acknowledgment.tsx:86"}, "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-c849e3cf7b40c509", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/for-client.tsx:89", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/for-client.tsx:89"}, "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-62309d46ba977146", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/awaiting-approval.tsx:102", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/awaiting-approval.tsx:102"}, "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-2075a4d3f2db32d5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/index.tsx:155", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/index.tsx:155"}, "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-f2930eb88d060a11", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/overdue.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/overdue.tsx:83"}, "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-e4385b3f1f6a6b85", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/handover-notes/unacknowledged.tsx:78", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/handover-notes/unacknowledged.tsx:78"}, "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-14c5912759f40d63", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/handover-notes/index.tsx:123", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/handover-notes/index.tsx:123"}, "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-e456412c098a9529", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/evidence-packs/index.tsx:133", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/evidence-packs/index.tsx:133"}, "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-017fe68521daeaba", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/settings.tsx:1785", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/settings.tsx:1785"}, "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-eae86e170dad5898", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/show.tsx:1029", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/show.tsx:1029"}, "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-e3f5d0af48924f09", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/reports.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/reports.tsx:359"}, "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-143fb39f34c3cdec", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/map.tsx:810", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/map.tsx:810"}, "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-3659ec79576769cd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/map.tsx:500", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/map.tsx:500"}, "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-b71ff32acf0f8dfd", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/index.tsx:253", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/index.tsx:253"}, "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-7d835e73d67e3edb", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/escalations.tsx:398", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/escalations.tsx:398"}, "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-a2426d491aad38f6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/my-tasks.tsx:300", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/my-tasks.tsx:300"}, "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-02d8932d5db80a98", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/messaging.tsx:481", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/messaging.tsx:481"}, "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-5a0289a111080659", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/broadcast.tsx:474", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/broadcast.tsx:474"}, "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-f05f718238eef338", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/broadcast.tsx:553", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/broadcast.tsx:553"}, "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-72dc1813cfe6eb15", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/alerts/index.tsx:859", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/alerts/index.tsx:859"}, "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-e249caf189091011", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/sla/breaches.tsx:337", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/sla/breaches.tsx:337"}, "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-ec2621926e7d91eb", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/devices/show.tsx:411", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/devices/show.tsx:411"}, "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-031bf43f12eb3424", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/devices/index.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/devices/index.tsx:164"}, "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-2acb355521294651", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/devices/index.tsx:425", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/devices/index.tsx:425"}, "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-508934bfa8dbd12f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/notifications/index.tsx:717", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/notifications/index.tsx:717"}, "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-a7b9531a5987d5ed", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/note-rail.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/note-rail.tsx:162"}, "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-55a2574b72b14c27", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/list-view.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/list-view.tsx:54"}, "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-afb6e3397f9f411e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/cards-view.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/cards-view.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-61fcf1c551814a65", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/note-wizard.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/note-wizard.tsx:270"}, "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-a1b1fe3da965d5fa", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/notifications/Index.tsx:166", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/notifications/Index.tsx:166"}, "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-c2ccae62836636e3", "name": "TODO/FIXME marker in shipping code \u2014 resources/js/pages/operations/rostering/conflicts.tsx:450", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 resources/js/pages/operations/rostering/conflicts.tsx:450"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6659345a7e0f202b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/board-view.tsx:6", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/board-view.tsx:68"}, "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-758a4e109de4ce8f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/list-view.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/list-view.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-3a6caa536a403d75", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/cards-view.tsx:8", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/cards-view.tsx:89"}, "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-5bb9dc9f7c90d555", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-detail-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-detail-dialog.tsx:128"}, "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-c05077382a32c296", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-rail.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-rail.tsx:92"}, "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-2c49ab76fc340402", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-wizard.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-wizard.tsx:504"}, "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-79e9ad5a6eaea058", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/note-templates/Index.tsx:160", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/note-templates/Index.tsx:160"}, "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-ba14aa5ea2f8a3a4", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/activity/Index.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/activity/Index.tsx:132"}, "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-188969eaee3f838d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/mileage/Index.tsx:203", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/mileage/Index.tsx:203"}, "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-84f331a04db47466", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/geofences/Index.tsx:145", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/geofences/Index.tsx:145"}, "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-1eaea6e139d2c6fe", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/show.tsx:3059", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/show.tsx:3059"}, "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-cae8c64a99858d9c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shift-calendar-view", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shift-calendar-view.tsx:181"}, "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-edddc0aad58f8adb", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shift-list-view.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shift-list-view.tsx:252"}, "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-74382e30817d07d2", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/create-shift-dialog", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:825"}, "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-14186113d1ec0514", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shifts-hero.tsx:419", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shifts-hero.tsx:419"}, "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-9611acc5f9395df7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/donut-card.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/donut-card.tsx:171"}, "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-b8db50cee0c8ebe1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/shifts/series/Index.tsx:254", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/shifts/series/Index.tsx:254"}, "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-eeaae6b215e5447b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/messages/Index.tsx:897", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/messages/Index.tsx:897"}, "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-b9e6d4ba6f5171cf", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/onboarding/Index.tsx:228", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/onboarding/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-2ff9b7918b699d19", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/calendar.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/calendar.tsx:198"}, "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-fee9fe2db6aa2338", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/calendar.tsx:373", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/calendar.tsx:373"}, "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-bd6a61fc8be8dc3c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/show.tsx:4706", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/show.tsx:4706"}, "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-366bf16852788336", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/visit-requests.tsx:361", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/visit-requests.tsx:361"}, "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-8894e4dc85e38d20", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/index.tsx:370", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/index.tsx:370"}, "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-e38b23f7039a067e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/care.tsx:225", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/care.tsx:225"}, "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-638680200ea92052", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/care-support-plan.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/care-support-plan.tsx:576"}, "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-9b7d5e7da8a9d8ca", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/workers.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/workers.tsx:192"}, "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-e902da81df1b86b3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/goals-path.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/goals-path.tsx:117"}, "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-41c8dfba9432668b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:1495"}, "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-abda5716d1010bfd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2796"}, "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-46d9b254116cc3db", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/client-funds/Index.tsx:188", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/client-funds/Index.tsx:188"}, "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-786c0085ba9f0d2a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/client-funds/Show.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/client-funds/Show.tsx:112"}, "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-e120df41996e7411", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/evv/Index.tsx:219", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/evv/Index.tsx:219"}, "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-17da1ef7804de81a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/job-board/Index.tsx:352", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/job-board/Index.tsx:352"}, "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-612153aee2a91ea1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/family-portal/Index.tsx:157", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/family-portal/Index.tsx:157"}, "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-fb641578c8c112a7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/service-agreements/Index.tsx:279", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/service-agreements/Index.tsx:279"}, "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-0b6fdcb2534f6b98", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/funding/Index.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/funding/Index.tsx:154"}, "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-0a764f287b4803d6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/timesheets/index.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/timesheets/index.tsx:167"}, "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-678affaeeb25f31a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/timesheets/payroll-adjustments.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/timesheets/payroll-adjustments.tsx:99"}, "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-1afd2eedf74e2094", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/timesheets/payroll-adjustments.tsx:1", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/timesheets/payroll-adjustments.tsx:147"}, "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-fe5312603c72689e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/qualifications/Index.tsx:137", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/qualifications/Index.tsx:137"}, "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-27ee6e526f94c5d7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/forms/Index.tsx:176", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/forms/Index.tsx:176"}, "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-514c8259fe7bdcb3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/calendar-sync/Index.tsx:153", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/calendar-sync/Index.tsx:153"}, "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-ef44d0ba7171a9b2", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/dashboard.tsx:703", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/dashboard.tsx:703"}, "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-cabf972219c949b1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/map.tsx:286", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/map.tsx:286"}, "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-a1a0ee3ff27894d6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/daily-check.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/daily-check.tsx:169"}, "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-e2ccd09526878567", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/bookings/index.tsx:125", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/bookings/index.tsx:125"}, "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-39e8785b52375347", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/bookings/index.tsx:278", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/bookings/index.tsx:278"}, "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-abd91fcb8b9170ee", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/trips/index.tsx:543", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/trips/index.tsx:543"}, "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-ffbf06fd862bbefe", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/handovers/index.tsx:269", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/handovers/index.tsx:269"}, "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-9cfa353ac314763c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/transports/medications.tsx:783", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/transports/medications.tsx:783"}, "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-dcc636e0f22be225", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/transports/index.tsx:446", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/transports/index.tsx:446"}, "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-cc43642ccdf515e7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/transports/index.tsx:495", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/transports/index.tsx:495"}, "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-2fa498133e4f6870", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/assets/index.tsx:280", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/assets/index.tsx:280"}, "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-b3412daa509215ef", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/incidents/index.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/incidents/index.tsx:265"}, "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-7367fd30ee770ac4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/incidents/index.tsx:292", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/incidents/index.tsx:292"}, "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-eb8686d4d421f851", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/inspections/show.tsx:273", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/inspections/show.tsx:273"}, "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-bcb9778b0d88b654", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/mileage/index.tsx:329", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/mileage/index.tsx:329"}, "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-e2dd5d99af7f1e01", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/mileage/index.tsx:410", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/mileage/index.tsx:410"}, "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-c2dc1ae29fba3b18", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/outings/index.tsx:311", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/outings/index.tsx:311"}, "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-09984c46cf25277a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/geofences/index.tsx:299", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/geofences/index.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-722f2d5b46ce015f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/alerts/index.tsx:768", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/alerts/index.tsx:768"}, "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-eb443422dcbd2faa", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/resident-tracking/index.tsx:391", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/resident-tracking/index.tsx:391"}, "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-6561f17e569a07b7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/resident-tracking/history.tsx:849", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/resident-tracking/history.tsx:849"}, "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-66ac7894cffc56d5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/drivers/index.tsx:511", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/drivers/index.tsx:511"}, "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-fb671cd292ecca29", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/maintenance/dashboard.tsx:425", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/maintenance/dashboard.tsx:425"}, "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-e6bc44d95170aeb1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/maintenance/work-orders/index.tsx:", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/maintenance/work-orders/index.tsx:563"}, "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-569e5014e312e786", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/wandering/index.tsx:331", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/wandering/index.tsx:331"}, "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-9abd906137b95b88", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/fuel/index.tsx:776", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/fuel/index.tsx:776"}, "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-a078a1f6d6565754", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/vehicles/trips.tsx:528", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/vehicles/trips.tsx:528"}, "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-37a9123c276fb593", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/vehicles/index.tsx:346", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/vehicles/index.tsx:346"}, "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-af4d224e002cd0b3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/devices/show.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/devices/show.tsx:207"}, "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-2e77a7235a940a73", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/devices/index.tsx:491", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/devices/index.tsx:491"}, "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-0b618c682f845f3d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/Protocols.tsx:459", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/Protocols.tsx:459"}, "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-131c95dd81d4dedd", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/Dashboard.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/Dashboard.tsx:96"}, "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-644faee153b7d9f8", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/Events.tsx:430", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/Events.tsx:430"}, "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-bf4a99d81c06b2f8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/Events.tsx:493", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/Events.tsx:493"}, "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-7d5ee662b110b4ca", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/observations.tsx:361", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/observations.tsx:361"}, "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-01ed2954894070a9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/observations.tsx:419", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/observations.tsx:419"}, "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-bfa6da726a871ed7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/staff/index.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/staff/index.tsx:64"}, "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-9fc1256ab8b5ff74", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/CeoReports/Index.tsx:215", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/CeoReports/Index.tsx:215"}, "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-3fe3d27425716221", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/CeoReports/_dialogs.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/CeoReports/_dialogs.tsx:165"}, "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-b98436fa905580bd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Policies/Index.tsx:128", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Policies/Index.tsx:128"}, "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-2c31ede599504fa4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Policies/Show.tsx:107", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Policies/Show.tsx:107"}, "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-e5736111cb9bc075", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Packs/_dialogs.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Packs/_dialogs.tsx:128"}, "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-108e341c5d0953e7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Meetings/Index.tsx:190", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Meetings/Index.tsx:190"}, "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-6d19ecb6ed21893f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Meetings/Calendar.tsx:344", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Meetings/Calendar.tsx:344"}, "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-b011885fa38aa258", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Meetings/Show.tsx:661", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Meetings/Show.tsx:661"}, "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-31dd162c8eee2d77", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Risks/Index.tsx:198", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Risks/Index.tsx:198"}, "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-02b4e857429190fd", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Resolutions/_dialogs.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Resolutions/_dialogs.tsx:119"}, "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-4e3ecfe16b09c1a4", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/assets/index.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/assets/index.tsx:240"}, "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-328fe3b7cbed2af8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/assets/index.tsx:315", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/assets/index.tsx:315"}, "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-b60daa40b28d47ce", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/_dialogs.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/_dialogs.tsx:237"}, "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-eefa4f49284c1269", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/index.tsx:1000", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/index.tsx:1000"}, "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-ff3f89c52be73575", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/components/tomorrow-panel.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/components/tomorrow-panel.tsx:66"}, "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-583334687801a799", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/components/stream-context-menu.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/components/stream-context-menu.tsx:88"}, "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-e56267e51bce0caf", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Index.tsx:871", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Index.tsx:871"}, "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-c2d2dbcdb79448cc", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/AuditLog.tsx:336", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/AuditLog.tsx:336"}, "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-b908cbf74df1897b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/PrnRecords.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/PrnRecords.tsx:126"}, "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-f9c41e98ec140e96", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Medications.tsx:267", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Medications.tsx:267"}, "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-871a64bed656b615", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/MedicationErrors.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/MedicationErrors.tsx:168"}, "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-8a99c42ab1a51310", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Destructions.tsx:312", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Destructions.tsx:312"}, "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-f83011c4c0cfc185", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Reports.tsx:403", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Reports.tsx:403"}, "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-ebdec009c1204bc9", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/components/audit-log-modal.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/components/audit-log-modal.tsx:119"}, "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-f999e1df05ae23b2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/audit/index.tsx:57", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/audit/index.tsx:57"}, "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-b89eef1db0ed0ac0", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Dashboard.tsx:948", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Dashboard.tsx:948"}, "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-78edac5e39d068bc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/fixed-assets/Index.tsx:449", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/fixed-assets/Index.tsx:449"}, "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-d91667ffac93f538", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/journals/Index.tsx:259", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/journals/Index.tsx:259"}, "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-4721f450baa8602a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/journals/Index.tsx:289", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/journals/Index.tsx:289"}, "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-373c9df4861274b5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/CashFlowForecast/Index.tsx:208", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/CashFlowForecast/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-0226a9b3d50f1033", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Intercompany/Index.tsx:300", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Intercompany/Index.tsx:300"}, "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-88f3f4665f06b9b6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/recurring-charges/Index.tsx:197", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/recurring-charges/Index.tsx:197"}, "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-6627a687b5e26b37", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/audit-exports/Index.tsx:221", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/audit-exports/Index.tsx:221"}, "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-e5f5923cb77c541e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/vendors/Index.tsx:279", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/vendors/Index.tsx:279"}, "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-08a8f61bee7cd21c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/gst-returns/Index.tsx:318", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/gst-returns/Index.tsx:318"}, "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-69a0130ea9484f68", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/gst-returns/Show.tsx:401", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/gst-returns/Show.tsx:401"}, "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-19e18cf145a4eb1a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/payment-allocations/Index.tsx:163", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/payment-allocations/Index.tsx:163"}, "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-eee45ad0214436c8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/IrdFilings/Index.tsx:447", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/IrdFilings/Index.tsx:447"}, "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-7c99e054f9252298", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-transactions/Index.tsx:541", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-transactions/Index.tsx:541"}, "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-6d90644b0a5d2113", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bills/Index.tsx:315", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bills/Index.tsx:315"}, "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-10c4f646773fe8d6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/sites-overview/Show.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/sites-overview/Show.tsx:359"}, "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-bb74302c50da2cd7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/accounts/Index.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/accounts/Index.tsx:118"}, "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-eb76194563f9d9b1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/accounts/Show.tsx:203", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/accounts/Show.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-425b6f46ce3e111a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/billing/Index.tsx:194", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/billing/Index.tsx:194"}, "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-b495732ad9617a97", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/fx-revaluations/Index.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/fx-revaluations/Index.tsx:180"}, "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-9cb56899d11b8584", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/fx-revaluations/Index.tsx:211", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/fx-revaluations/Index.tsx:211"}, "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-715ff9386b3a3267", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/price-books/Index.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/price-books/Index.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-b649e47384865758", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/price-books/Index.tsx:186", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/price-books/Index.tsx:186"}, "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-86ef70982423630f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/credit-notes/Index.tsx:215", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/credit-notes/Index.tsx:215"}, "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-f84964e8cb405ee5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/eftpos/Batches.tsx:287", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/eftpos/Batches.tsx:287"}, "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-b8b3626ccab6db18", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/bank-reconciliation/Reconcile.tsx:357", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/bank-reconciliation/Reconcile.tsx:357"}, "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-8f1e3dd34cca1fae", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-reconciliation/Index.tsx:278", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-reconciliation/Index.tsx:278"}, "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-2b812fb9b4f508e6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/payment-runs/Index.tsx:198", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/payment-runs/Index.tsx:198"}, "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-df8a12c6f6e93b7f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/donor-funds/Show.tsx:377", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/donor-funds/Show.tsx:377"}, "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-334a729c3fdf54bb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/purchase-orders/Index.tsx:205", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/purchase-orders/Index.tsx:205"}, "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-8f268ebcc04095b4", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/bank-feeds/Logs.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/bank-feeds/Logs.tsx:137"}, "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-1ad38fa6664c7bd8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-feeds/Logs.tsx:162", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-feeds/Logs.tsx:162"}, "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-9983a9574e55a34a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/site-dashboard/Show.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/site-dashboard/Show.tsx:189"}, "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-53a3965bad2b1656", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Consolidation/Index.tsx:214", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Consolidation/Index.tsx:214"}, "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-004ed05e21bdcd42", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/petty-cash/Show.tsx:272", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/petty-cash/Show.tsx:272"}, "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-76ac200257d30851", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/quotes/Index.tsx:208", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/quotes/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-1ed6d90dc15df699", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/payment-matching/Index.tsx:411", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/payment-matching/Index.tsx:411"}, "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-87d930a9abcd2dbf", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/invoices/Index.tsx:330", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/invoices/Index.tsx:330"}, "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-f384ce2ba4c9fe46", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/incidents/show.tsx:1962", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/incidents/show.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-02eb05e5fd1dad38", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/incidents/index.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/incidents/index.tsx:130"}, "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-5766b27805ffd3b3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/compliance/index.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/compliance/index.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-ceb3926e1d6f4e6b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Roadmap/Dashboard.tsx:330", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Roadmap/Dashboard.tsx:330"}, "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-a9d044f81524cb0e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/dashboard.tsx:717", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/dashboard.tsx:717"}, "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-183d8fb55fffc07b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/worker-participation/index.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/worker-participation/index.tsx:1390"}, "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-236d95da6b2f857a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/corrective-actions/index.tsx:314", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/corrective-actions/index.tsx:314"}, "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-543cb55b7a174856", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/first-aid/index.tsx:500", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/first-aid/index.tsx:500"}, "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-a1e9bb76d330c411", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/first-aid/index.tsx:566", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/first-aid/index.tsx:566"}, "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-6c82fbcc495518d3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/procedures/index.tsx:338", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/procedures/index.tsx:338"}, "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-b5a23ced75212ffa", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/events/show.tsx:377", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/events/show.tsx:377"}, "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-d8206e848070eb07", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/lone-workers/index.tsx:492", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/lone-workers/index.tsx:492"}, "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-879c70673f2e4521", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/drills/index.tsx:430", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/drills/index.tsx:430"}, "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-915e222da02b70b7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/risk-assessments/index.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/risk-assessments/index.tsx:129"}, "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-42d5cd725c763bb7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/substances/index.tsx:362", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/substances/index.tsx:362"}, "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-dab84494d26ecead", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/restraints/index.tsx:915", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/restraints/index.tsx:915"}, "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-81ff82a11066b613", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/ppe/index.tsx:698", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/ppe/index.tsx:698"}, "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-bf758429df681570", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/injuries/index.tsx:341", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/injuries/index.tsx:341"}, "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-06bbdb0993a20cb5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/attendance/index.tsx:440", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/attendance/index.tsx:440"}, "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-82fe2e7ff7e2956f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/employees/show.tsx:1000", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/employees/show.tsx:1000"}, "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-51e178b556318d6a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/employees/index.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/employees/index.tsx:231"}, "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-351779f09f742ea7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/compensation/bonuses.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/compensation/bonuses.tsx:231"}, "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-69ad2f34aba6b0a6", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/compensation/review-detail.tsx:613", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/compensation/review-detail.tsx:613"}, "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-b40997f2b165c5f1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/goals/index.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/goals/index.tsx:242"}, "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-d7570a98c4ba3d93", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/directory/show.tsx:453", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/directory/show.tsx:453"}, "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-2ebb89b819c4237b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/performance/index.tsx:1127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/performance/index.tsx:1127"}, "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-823730f5445397a7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/performance/skills/index.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/performance/skills/index.tsx:238"}, "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-d51aa87256f8301f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feed/index.tsx:457", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feed/index.tsx:457"}, "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-396eba68949fb206", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/candidates/show.tsx:2010", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/candidates/show.tsx:2010"}, "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-d9f954bcbb438b3f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/candidates/create-offer.tsx:793", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/candidates/create-offer.tsx:793"}, "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-a20d37c9572c8f58", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/jobs.tsx:886", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/jobs.tsx:886"}, "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-a111afa584090f8b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/analytics.tsx:351", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/analytics.tsx:351"}, "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-ccc16e4229116050", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/index.tsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/index.tsx:266"}, "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-5624904a1a772542", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/job-postings/show.tsx:199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/job-postings/show.tsx:199"}, "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-4709b680085f3262", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/job-postings/index.tsx:286", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/job-postings/index.tsx:286"}, "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-1272fa0c7b2a1b23", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/onboarding/emails.tsx:397", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/onboarding/emails.tsx:397"}, "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-c3d1445507b34287", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/hr/onboarding/emails.tsx:481", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/hr/onboarding/emails.tsx:481"}, "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-2c712ab2186e1032", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/time/index.tsx:628", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/time/index.tsx:628"}, "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-34b5ab7b7e66398f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/my/index.tsx:741", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/my/index.tsx:741"}, "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-1d0549bed322de79", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/documents/policies/show.tsx:338", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/documents/policies/show.tsx:338"}, "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-4a950e167cbc43d2", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feedback/index.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feedback/index.tsx:359"}, "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-4caa9d92d344018e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feedback/request.tsx:280", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feedback/request.tsx:280"}, "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-1616912607683636", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/clients/Financials.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/clients/Financials.tsx:219"}, "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-527ca0831385dcc4", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/calendar.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/calendar.tsx:183"}, "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-f0424bd92f10d97a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/portal/calendar.tsx:319", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/portal/calendar.tsx:319"}, "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-dc582458422ed121", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/messages.tsx:551", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/messages.tsx:551"}, "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-8cd6eea8ae758ffe", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/client.tsx:429", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/client.tsx:429"}, "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-c3a1a8111b8051c7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/index.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/index.tsx:80"}, "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-859143d49929d543", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/documents.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/documents.tsx:200"}, "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-26f28cb393d8c6dd", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/meds/today/index.tsx:220", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/meds/today/index.tsx:220"}, "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-3592e17e91c69e2d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/reports/module.tsx:51", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/reports/module.tsx:51"}, "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-a8963314ccfc582b", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/reports/assets.tsx:23", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/reports/assets.tsx:23"}, "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-a90b89039e95400e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/reports/index.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/reports/index.tsx:42"}, "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-98da1f3702d96f20", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/maintenance-health.tsx:304", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/maintenance-health.tsx:304"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6cbafdebd1ea6b42", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/maintenance-health.tsx:277", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/maintenance-health.tsx:277"}, "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-0a286d0908c6fb90", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/dashboard.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/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-9366f872d0a111e7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/category.tsx:317", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/category.tsx:317"}, "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-ba6a82450221eb71", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/alerts-events.tsx:289", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/alerts-events.tsx:289"}, "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-a852423ceccd741c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/integrations/queclink-hub.tsx:3", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/integrations/queclink-hub.tsx:3367"}, "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-00e9c1c56845ed24", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/device-groups/show.tsx:224", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/device-groups/show.tsx:224"}, "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-ca236a42fd5b7043", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/device-groups/index.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/device-groups/index.tsx:130"}, "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-0eeb38a0ce6c2911", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/device-groups/index.tsx:168", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/device-groups/index.tsx:168"}, "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-4b27cd2094074c8a", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/devices/show.tsx:747", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/devices/show.tsx:747"}, "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-283f7054162bb297", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/devices/index.tsx:185", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/devices/index.tsx:185"}, "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-8d0afbb8a9f5f894", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/devices/shared.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/devices/shared.tsx:164"}, "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-312850e8af4a5542", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/breaches.tsx:214", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/breaches.tsx:214"}, "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-db17a6e77482cf73", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/retention.tsx:173", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/retention.tsx:173"}, "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-d8fe89967e3837d3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/dpia.tsx:230", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/dpia.tsx:230"}, "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-20d38ea208062844", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/requests.tsx:259", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/requests.tsx:259"}, "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-e114244272b5e9c9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/legal-holds.tsx:200", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/legal-holds.tsx:200"}, "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-4f0fe77fd815ba40", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/safeguarding/index.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/safeguarding/index.tsx:95"}, "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-577493f50557b735", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_dialog-shared.tsx:268", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_dialog-shared.tsx:268"}, "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-b02c1678a2c58006", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/show.tsx:712", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/show.tsx:712"}, "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-d2bc9f1b3f4853d3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_wizard.tsx:1411", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_wizard.tsx:1411"}, "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-a02bbeaa90a9a33c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/index.tsx:599", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/index.tsx:599"}, "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-1e2049b0c36c195d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_site-geofence-dialog.tsx:357", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_site-geofence-dialog.tsx:357"}, "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-6e0cca0a4e1861c8", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_ledger-panel.tsx:531", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_ledger-panel.tsx:531"}, "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-42a4a1003f3d6b7f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/documents.tsx:433", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/documents.tsx:433"}, "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-1b7e077003af8460", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/hazards/index.tsx:574", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/hazards/index.tsx:574"}, "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-9531718689b6b94a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/sites/hazards/index.tsx:623", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/sites/hazards/index.tsx:623"}, "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-9cd0921e4fc19482", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors/_dialogs.tsx:723", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors/_dialogs.tsx:723"}, "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-b8e73d7262b5b727", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/clients/_dialogs.tsx:518", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/clients/_dialogs.tsx:518"}, "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-dda48ddd301aebb0", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/ledger/index.tsx:381", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/ledger/index.tsx:381"}, "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-5c519dc40ef24aa3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/contacts/_dialogs.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/contacts/_dialogs.tsx:95"}, "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-0d70c2dca495e62f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors-credentials/global.tsx:1721", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors-credentials/global.tsx:1721"}, "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-1e6b13e53d32391e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors-credentials/_context-menu.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors-credentials/_context-menu.tsx:90"}, "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-de8a8ef4dce7510e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/reports/overdue-actions.tsx:159", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/reports/overdue-actions.tsx:159"}, "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-f6c327a0b510332d", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_dialogs.tsx:451", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_dialogs.tsx:451"}, "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-101e37225816aaa9", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:424", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:424"}, "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-4b10a3de6342d9a7", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_calendar-grid.tsx:260", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_calendar-grid.tsx:260"}, "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-a22a8b59b175c755", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_templates-panel.tsx:323", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_templates-panel.tsx:323"}, "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-410531bf872c62e0", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:265"}, "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-b13ae7f7f36bb1e3", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_hero.tsx:234", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_hero.tsx:234"}, "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-22113ad43bdbf257", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/_dialogs.tsx:476", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/_dialogs.tsx:476"}, "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-96daabc7daf73c29", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/index.tsx:782", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/index.tsx:782"}, "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-957bf25c88263dc2", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/_asset-dialogs.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/_asset-dialogs.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-c8ae068135f0b7d4", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/plan/_inspector.tsx:1227", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/plan/_inspector.tsx:1227"}, "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-3a523d4dbf17901c", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/credentials/_dialogs.tsx:816", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/credentials/_dialogs.tsx:816"}, "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-a36ab6481ffeedb5", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/calendar/_parts.tsx:641", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/calendar/_parts.tsx:641"}, "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-14a6eeaad14fa3b1", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/calendar/SiteCalendar.tsx:1238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/calendar/SiteCalendar.tsx:1238"}, "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-abbdeffbdc703e1c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/sites/feedback/Index.tsx:931", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/sites/feedback/Index.tsx:931"}, "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-d8c26a042776d78f", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-management/reports.tsx:302", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-management/reports.tsx:302"}, "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-f931d3775d5ae30e", "name": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emergency/access.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emergency/access.tsx:183"}, "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-6f443b924683ca07", "name": "Runtime dotenv file present in repo: .env.dusk.local", "shortDescription": {"text": "Runtime dotenv file present in repo: .env.dusk.local"}, "fullDescription": {"text": "`.env.dusk.local` looks like a runtime dotenv file. It contains secret-looking assignments for APP_KEY. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-aa3a5aa8143d8c3a", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/components/two-factor-setup-modal.tsx:78", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/components/two-factor-setup-modal.tsx:78"}, "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-f64c6228781b983a", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/my-calendar.tsx:436", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/my-calendar.tsx:436"}, "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-44fd48b09ea3331b", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/two-factor.tsx:100", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/two-factor.tsx:100"}, "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-dabdcbfd14fe55b1", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/audit-logs.tsx:626", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/audit-logs.tsx:626"}, "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-27908e551b6de6b2", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/users/index.tsx:622", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/users/index.tsx:622"}, "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-e758ddad8dc77e25", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/index.tsx:180", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/index.tsx:180"}, "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-d8a610d63a38e57d", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/with-concerns.tsx:82", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/with-concerns.tsx:82"}, "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-ae6c7c5834ad3539", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/with-incidents.tsx:82", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/with-incidents.tsx:82"}, "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-1b4ee22f175e2f96", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/procedure-runs/index.tsx:140", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/procedure-runs/index.tsx:140"}, "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-ada41f712b1f074a", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/procedure-runs/overdue.tsx:78", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/procedure-runs/overdue.tsx:78"}, "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-4bcc91d00b22ed0f", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/requests/index.tsx:150", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/requests/index.tsx:150"}, "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-04d88a01d2eb1983", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/communication-logs/index.tsx:147", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/communication-logs/index.tsx:147"}, "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-1fabeb05d22447bb", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/resources/index.tsx:167", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/resources/index.tsx:167"}, "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-d40afd10001f8f27", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/index.tsx:145", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/index.tsx:145"}, "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-e533b39a49d0e4e7", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/needing-acknowledgment.tsx:86", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/needing-acknowledgment.tsx:86"}, "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-fa53d10f7933e3d8", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/for-client.tsx:89", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/for-client.tsx:89"}, "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-26d341b6137c5236", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/awaiting-approval.tsx:102", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/awaiting-approval.tsx:102"}, "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-ee747f3043ca4629", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/index.tsx:155", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/index.tsx:155"}, "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-655013f1f0427873", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/overdue.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/overdue.tsx:83"}, "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-873a17ddea05cf7e", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/handover-notes/unacknowledged.tsx:78", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/handover-notes/unacknowledged.tsx:78"}, "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-ea681b4eefaac11b", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/handover-notes/index.tsx:123", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/handover-notes/index.tsx:123"}, "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-48f5c296f5cb5e54", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/evidence-packs/index.tsx:133", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/evidence-packs/index.tsx:133"}, "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-b8ad3cdd129466a1", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/map.tsx:500", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/map.tsx:500"}, "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-45bc0240e5895244", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/broadcast.tsx:553", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/broadcast.tsx:553"}, "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-d802f4ddfc602702", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/alerts/index.tsx:859", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/alerts/index.tsx:859"}, "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-bd17ce9959f0c46a", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/sla/breaches.tsx:337", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/sla/breaches.tsx:337"}, "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-7d5eca86ca2bcfdd", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/devices/index.tsx:425", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/devices/index.tsx:425"}, "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-98584c533e248d52", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/notifications/index.tsx:717", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/notifications/index.tsx:717"}, "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-df423bc62c9de282", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/notifications/Index.tsx:166", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/notifications/Index.tsx:166"}, "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-0068b78bc8855ce2", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/mileage/Index.tsx:203", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/mileage/Index.tsx:203"}, "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-53e56b93d0b8f96b", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/geofences/Index.tsx:145", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/geofences/Index.tsx:145"}, "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-ff63b22a1f0ce192", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/shifts/series/Index.tsx:254", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/shifts/series/Index.tsx:254"}, "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-98bddbbf7ad41270", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/onboarding/Index.tsx:228", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/onboarding/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-e6dbc5ad8076130c", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/calendar.tsx:373", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/calendar.tsx:373"}, "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-729862826b22567b", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/visit-requests.tsx:361", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/visit-requests.tsx:361"}, "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-3fc46abb58c657e1", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2796", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2796"}, "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-2e26aa8249c06ea5", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/client-funds/Index.tsx:188", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/client-funds/Index.tsx:188"}, "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-a8551d0253744f3c", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/evv/Index.tsx:219", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/evv/Index.tsx:219"}, "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-3ec0bae1a6db6b95", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/job-board/Index.tsx:352", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/job-board/Index.tsx:352"}, "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-ddc34809460fab81", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/family-portal/Index.tsx:157", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/family-portal/Index.tsx:157"}, "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-1ad9c1cbc346b9f8", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/service-agreements/Index.tsx:279", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/service-agreements/Index.tsx:279"}, "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-2b86b1f3b5b1e25c", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/timesheets/payroll-adjustments.tsx:147", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/timesheets/payroll-adjustments.tsx:147"}, "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-2f22760f77a8126f", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/qualifications/Index.tsx:137", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/qualifications/Index.tsx:137"}, "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-a525ff3b39a94c1a", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/forms/Index.tsx:176", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/forms/Index.tsx:176"}, "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-f0dd001bdd220a38", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/calendar-sync/Index.tsx:153", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/calendar-sync/Index.tsx:153"}, "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-4e4338c39b0e8990", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/bookings/index.tsx:278", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/bookings/index.tsx:278"}, "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-4fd32e6ad89ced44", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/trips/index.tsx:543", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/trips/index.tsx:543"}, "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-6fa2397587b4bf38", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/handovers/index.tsx:269", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/handovers/index.tsx:269"}, "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-e1f43f29fa3fd2c8", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/transports/medications.tsx:783", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/transports/medications.tsx:783"}, "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-8d8ff1cbe1c364e0", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/transports/index.tsx:495", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/transports/index.tsx:495"}, "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-2d49ca3e74b05964", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/assets/index.tsx:280", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/assets/index.tsx:280"}, "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-31fdc7a509460202", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/incidents/index.tsx:292", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/incidents/index.tsx:292"}, "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-0ef4906a743bbf76", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/mileage/index.tsx:410", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/mileage/index.tsx:410"}, "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-042007caa82b6fa3", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/outings/index.tsx:311", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/outings/index.tsx:311"}, "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-8dcbcd3d7f752ada", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/alerts/index.tsx:768", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/alerts/index.tsx:768"}, "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-77eb9a3d629d8778", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/drivers/index.tsx:511", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/drivers/index.tsx:511"}, "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-bdb866cd856b3efb", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/maintenance/work-orders/index.tsx:563", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/maintenance/work-orders/index.tsx:563"}, "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-0249de53067e35df", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/wandering/index.tsx:331", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/wandering/index.tsx:331"}, "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-3eed99ab2b0d4794", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/fuel/index.tsx:776", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/fuel/index.tsx:776"}, "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-79572468f8517bf6", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/vehicles/trips.tsx:528", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/vehicles/trips.tsx:528"}, "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-b809f5dd3123ebd5", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/vehicles/index.tsx:346", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/vehicles/index.tsx:346"}, "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-d89a44aafdbbb9e2", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/devices/index.tsx:491", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/devices/index.tsx:491"}, "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-8ef90f3e3a87a47a", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/Protocols.tsx:459", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/Protocols.tsx:459"}, "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-faad06d641342608", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/Events.tsx:493", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/Events.tsx:493"}, "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-81e644969f160ee8", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/observations.tsx:419", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/observations.tsx:419"}, "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-e002a59ed260ed66", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Policies/Index.tsx:128", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Policies/Index.tsx:128"}, "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-3d99a6cbca8695de", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Policies/Show.tsx:107", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Policies/Show.tsx:107"}, "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-7db23422a5e27ab4", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Meetings/Index.tsx:190", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Meetings/Index.tsx:190"}, "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-f9b5de5188fbd109", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Risks/Index.tsx:198", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Risks/Index.tsx:198"}, "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-bb34a7ff4b6d5bca", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/assets/index.tsx:315", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/assets/index.tsx:315"}, "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-982d662f0cfc39d9", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/audit/index.tsx:57", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/audit/index.tsx:57"}, "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-be63fa71578dfa68", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/fixed-assets/Index.tsx:449", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/fixed-assets/Index.tsx:449"}, "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-4f7e98e2215a5b1c", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/journals/Index.tsx:289", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/journals/Index.tsx:289"}, "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-709e44c7aac81651", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/CashFlowForecast/Index.tsx:208", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/CashFlowForecast/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-39600a17075bf951", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/recurring-charges/Index.tsx:197", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/recurring-charges/Index.tsx:197"}, "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-c90c7e361e53347c", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/audit-exports/Index.tsx:221", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/audit-exports/Index.tsx:221"}, "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-cd68b359d0306ab3", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/vendors/Index.tsx:279", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/vendors/Index.tsx:279"}, "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-c2591633683e312e", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/gst-returns/Index.tsx:318", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/gst-returns/Index.tsx:318"}, "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-1ad751f0bb20689e", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/IrdFilings/Index.tsx:447", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/IrdFilings/Index.tsx:447"}, "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-7d0aa1e49b9c0cce", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-transactions/Index.tsx:541", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-transactions/Index.tsx:541"}, "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-c550187df34e39fd", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bills/Index.tsx:315", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bills/Index.tsx:315"}, "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-0bee5e38c3410d84", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/billing/Index.tsx:194", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/billing/Index.tsx:194"}, "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-76f216804cd5809c", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/fx-revaluations/Index.tsx:211", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/fx-revaluations/Index.tsx:211"}, "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-af14ea0b3e5f695c", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/price-books/Index.tsx:186", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/price-books/Index.tsx:186"}, "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-84bab36a7c3714b2", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/credit-notes/Index.tsx:215", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/credit-notes/Index.tsx:215"}, "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-7e255dbfff46f073", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/eftpos/Batches.tsx:287", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/eftpos/Batches.tsx:287"}, "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-b44a20439dcb29d3", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-reconciliation/Index.tsx:278", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-reconciliation/Index.tsx:278"}, "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-bb1a772a83d3f197", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/payment-runs/Index.tsx:198", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/payment-runs/Index.tsx:198"}, "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-f742f4a05a5d83ab", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/purchase-orders/Index.tsx:205", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/purchase-orders/Index.tsx:205"}, "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-5c0c7f671bed73ca", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-feeds/Logs.tsx:162", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-feeds/Logs.tsx:162"}, "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-d27c31ce23ed8f68", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/quotes/Index.tsx:208", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/quotes/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-63318dd8e303fab9", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/payment-matching/Index.tsx:411", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/payment-matching/Index.tsx:411"}, "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-f47373e8e6843aa8", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/invoices/Index.tsx:330", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/invoices/Index.tsx:330"}, "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-83d2dbb2278fc92b", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/first-aid/index.tsx:566", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/first-aid/index.tsx:566"}, "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-bd93ea36d764ba1f", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/procedures/index.tsx:338", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/procedures/index.tsx:338"}, "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-ebdfeafa62949f76", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/lone-workers/index.tsx:492", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/lone-workers/index.tsx:492"}, "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-479daf3244facbbb", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/drills/index.tsx:430", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/drills/index.tsx:430"}, "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-842707b76bfbfe61", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/substances/index.tsx:362", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/substances/index.tsx:362"}, "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-83e7d3394ece6c9d", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/restraints/index.tsx:915", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/restraints/index.tsx:915"}, "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-c37e9132aaf20e03", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/ppe/index.tsx:698", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/ppe/index.tsx:698"}, "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-609e91b36b3e4429", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/injuries/index.tsx:341", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/injuries/index.tsx:341"}, "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-bd87bc0faaba4839", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/hr/onboarding/emails.tsx:481", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/hr/onboarding/emails.tsx:481"}, "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-091ffa637d994b9b", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/portal/calendar.tsx:319", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/portal/calendar.tsx:319"}, "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-ed13c6993fc91caa", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/reports/module.tsx:51", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/reports/module.tsx:51"}, "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-98f89e7fa80283ec", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/maintenance-health.tsx:277", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/maintenance-health.tsx:277"}, "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-b9bdc6a086208de4", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/category.tsx:317", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/category.tsx:317"}, "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-3a7ffa5fc1aa0ee3", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/alerts-events.tsx:289", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/alerts-events.tsx:289"}, "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-53154af43dc01289", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/device-groups/show.tsx:224", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/device-groups/show.tsx:224"}, "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-3090eaf50b11bad8", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/device-groups/index.tsx:168", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/device-groups/index.tsx:168"}, "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-87d4e346aefc6019", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/devices/index.tsx:185", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/devices/index.tsx:185"}, "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-ecc92853b0299e22", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/breaches.tsx:214", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/breaches.tsx:214"}, "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-e53289115fbbd594", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/retention.tsx:173", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/retention.tsx:173"}, "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-0d32a1916e846bf2", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/dpia.tsx:230", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/dpia.tsx:230"}, "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-52cd10100c487030", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/requests.tsx:259", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/requests.tsx:259"}, "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-e8b296c5386d1f44", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/legal-holds.tsx:200", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/legal-holds.tsx:200"}, "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-d0094c80ba6517bb", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/sites/hazards/index.tsx:623", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/sites/hazards/index.tsx:623"}, "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-8bd1c3827171a3a4", "name": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/sites/feedback/Index.tsx:931", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/sites/feedback/Index.tsx:931"}, "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-b7c413cb2907eb4d", "name": "Insecure pattern 'node_child_process' in tools/codemod-page-header.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/codemod-page-header.mjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17d8dcb914e4a789", "name": "Insecure pattern 'node_child_process' in tools/codemod-fleet-hero.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/codemod-fleet-hero.mjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f8cb2f23e944689", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-266162aa2c525a31", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "shivammathur/setup-php@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-48dd1b55730d05c6", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-24b7d46a15674d19", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a50467f36b413ec", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-169a34f9c93059a4", "name": "Very large file: resources/js/components/app-sidebar.tsx (3174 lines)", "shortDescription": {"text": "Very large file: resources/js/components/app-sidebar.tsx (3174 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-67c3b468fc9e36ea", "name": "Very large file: resources/js/components/rostering/calendar-pane.tsx (1679 lines)", "shortDescription": {"text": "Very large file: resources/js/components/rostering/calendar-pane.tsx (1679 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-c913e06eb47b3a31", "name": "Very large file: resources/js/components/rostering/template-dialogs.tsx (1594 lines)", "shortDescription": {"text": "Very large file: resources/js/components/rostering/template-dialogs.tsx (1594 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-7151351cf510ef81", "name": "Very large file: resources/js/components/clients/add-client-dialog.tsx (2765 lines)", "shortDescription": {"text": "Very large file: resources/js/components/clients/add-client-dialog.tsx (2765 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-d3a15cbccab163bc", "name": "Very large file: resources/js/components/clients/profile/flows.tsx (2810 lines)", "shortDescription": {"text": "Very large file: resources/js/components/clients/profile/flows.tsx (2810 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-b3f4049736c2d5bc", "name": "Very large file: resources/js/components/sites/add-site-dialog.tsx (2367 lines)", "shortDescription": {"text": "Very large file: resources/js/components/sites/add-site-dialog.tsx (2367 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-e3e04dfa70dcb8d3", "name": "Very large file: resources/js/components/timesheets/create-timesheet-dialog.tsx (1142 lines)", "shortDescription": {"text": "Very large file: resources/js/components/timesheets/create-timesheet-dialog.tsx (1142 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-2261feaaef707853", "name": "Very large file: resources/js/pages/welcome.tsx (808 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/welcome.tsx (808 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-b5afecb8a2cd8c0c", "name": "Very large file: resources/js/pages/settings/service-contexts.tsx (1573 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/settings/service-contexts.tsx (1573 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-c0d26e554c02ea21", "name": "Very large file: resources/js/pages/settings/data.tsx (2402 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/settings/data.tsx (2402 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-18d169795118b083", "name": "Very large file: resources/js/pages/settings/profile.tsx (1349 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/settings/profile.tsx (1349 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-9e07f7eb14af014c", "name": "Very large file: resources/js/pages/settings/access.tsx (1208 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/settings/access.tsx (1208 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-5e0749fed4d5886e", "name": "Very large file: resources/js/pages/settings/notification-escalations.tsx (1277 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/settings/notification-escalations.tsx (1277 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2afd6b10f027c26f", "name": "Very large file: resources/js/pages/settings/branding.tsx (1835 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/settings/branding.tsx (1835 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-47fed74a450af266", "name": "Very large file: resources/js/pages/settings/users/show.tsx (1078 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/settings/users/show.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-b9054e2ce860de5a", "name": "Very large file: resources/js/pages/control-room/shifts.tsx (1163 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/control-room/shifts.tsx (1163 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-9d6782dead696d34", "name": "Very large file: resources/js/pages/control-room/settings.tsx (2244 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/control-room/settings.tsx (2244 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-1e184a1c9bcdcd85", "name": "Very large file: resources/js/pages/control-room/show.tsx (1738 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/control-room/show.tsx (1738 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1810293ca129f0f", "name": "Very large file: resources/js/pages/control-room/index.tsx (1663 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/control-room/index.tsx (1663 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-9e8f4a39c6554ada", "name": "Very large file: resources/js/pages/control-room/playbooks/show.tsx (1293 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/control-room/playbooks/show.tsx (1293 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-af0597526e3de4df", "name": "Very large file: resources/js/pages/control-room/playbooks/index.tsx (1038 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/control-room/playbooks/index.tsx (1038 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-fd6a330c079b5866", "name": "Very large file: resources/js/pages/notifications/index.tsx (934 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/notifications/index.tsx (934 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-584a4227fae12c99", "name": "Very large file: resources/js/pages/operations/care-plans/Show.tsx (1665 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/care-plans/Show.tsx (1665 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-8727c71df5ea2f0a", "name": "Very large file: resources/js/pages/operations/rostering/index.tsx (3231 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/rostering/index.tsx (3231 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-fbf8b174c6fd1364", "name": "Very large file: resources/js/pages/operations/handovers/components/handover-wizard.tsx (1324 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/handovers/components/handover-wizard.tsx (1324 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-e1406d078e09e41c", "name": "Very large file: resources/js/pages/operations/shifts/show.tsx (3678 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/shifts/show.tsx (3678 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-8d892cffd8b8fc7e", "name": "Very large file: resources/js/pages/operations/shifts/components/create-shift-dialog.tsx (1999 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/shifts/components/create-shift-dialog.tsx (1999 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-fe6593c0d7b6d167", "name": "Very large file: resources/js/pages/operations/messages/Index.tsx (1413 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/messages/Index.tsx (1413 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-d133c2e71720638e", "name": "Very large file: resources/js/pages/operations/clients/show.tsx (5475 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/clients/show.tsx (5475 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-c4f2e5b8c85c1ec1", "name": "Very large file: resources/js/pages/operations/clients/medical.tsx (3336 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/clients/medical.tsx (3336 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-63b70508db22d929", "name": "Very large file: resources/js/pages/operations/clients/index.tsx (1723 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/clients/index.tsx (1723 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-5d45a90ee27bce72", "name": "Very large file: resources/js/pages/operations/clients/documents.tsx (1336 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/clients/documents.tsx (1336 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-93ede889ac5e3773", "name": "Very large file: resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx (3251 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx (3251 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-7b279beb5bd29d48", "name": "Very large file: resources/js/pages/operations/service-agreements/Show.tsx (1405 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/operations/service-agreements/Show.tsx (1405 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-d50723505cfbf683", "name": "Very large file: resources/js/pages/fleet-assets/transports/show.tsx (1728 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/fleet-assets/transports/show.tsx (1728 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-b2ffdae2a6011d83", "name": "Very large file: resources/js/pages/fleet-assets/transports/create.tsx (1072 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/fleet-assets/transports/create.tsx (1072 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-8ac0c58641e64668", "name": "Very large file: resources/js/pages/fleet-assets/assets/show.tsx (1196 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/fleet-assets/assets/show.tsx (1196 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-61bd126ca3a967ca", "name": "Very large file: resources/js/pages/fleet-assets/outings/create.tsx (865 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/fleet-assets/outings/create.tsx (865 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-f17332c240b34425", "name": "Very large file: resources/js/pages/Governance/Budgets/Show.tsx (1305 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/Governance/Budgets/Show.tsx (1305 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-31b22398c33143cd", "name": "Very large file: resources/js/pages/Governance/Meetings/Show.tsx (1117 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/Governance/Meetings/Show.tsx (1117 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-2951b734adc6612f", "name": "Very large file: resources/js/pages/assets/show.tsx (1354 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/assets/show.tsx (1354 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-9fad0b83c400b711", "name": "Very large file: resources/js/pages/my-day/_dialogs.tsx (2077 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/my-day/_dialogs.tsx (2077 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-cb921dca476da383", "name": "Very large file: resources/js/pages/emar/Index.tsx (1428 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/emar/Index.tsx (1428 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-c8254e3c013f88ba", "name": "Very large file: resources/js/pages/incidents/show.tsx (2196 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/incidents/show.tsx (2196 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-7c9816bc29f7297e", "name": "Very large file: resources/js/pages/Roadmap/Dashboard.tsx (2750 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/Roadmap/Dashboard.tsx (2750 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-ffa3dd5293d70c99", "name": "Very large file: resources/js/pages/health-safety/dashboard.tsx (1675 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/health-safety/dashboard.tsx (1675 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-585815971dc59901", "name": "Very large file: resources/js/pages/health-safety/worker-participation/index.tsx (4006 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/health-safety/worker-participation/index.tsx (4006 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-c6d3a655c945c3c0", "name": "Very large file: resources/js/pages/health-safety/restraints/index.tsx (1333 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/health-safety/restraints/index.tsx (1333 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-474d0f3436dc4ba9", "name": "Very large file: resources/js/pages/health-safety/ppe/index.tsx (1610 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/health-safety/ppe/index.tsx (1610 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-7e433078b5f0edd1", "name": "Very large file: resources/js/pages/attendance/index.tsx (1592 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/attendance/index.tsx (1592 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-8ae994a4c9b8ae2d", "name": "Very large file: resources/js/pages/hr/settings/automations.tsx (1076 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/settings/automations.tsx (1076 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-d64b1d3c11e946a0", "name": "Very large file: resources/js/pages/hr/employees/show.tsx (3016 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/employees/show.tsx (3016 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-b2099ec1b4fad22a", "name": "Very large file: resources/js/pages/hr/employees/documents.tsx (1319 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/employees/documents.tsx (1319 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-20b07c95609ec96f", "name": "Very large file: resources/js/pages/hr/goals/show.tsx (1387 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/goals/show.tsx (1387 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-6f1f51624883bd4f", "name": "Very large file: resources/js/pages/hr/directory/show.tsx (1147 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/directory/show.tsx (1147 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-d85055297860df2c", "name": "Very large file: resources/js/pages/hr/performance/index.tsx (1206 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/performance/index.tsx (1206 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-ea0500f04a7ea3e9", "name": "Very large file: resources/js/pages/hr/candidates/show.tsx (2328 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/candidates/show.tsx (2328 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-38412ced90dfa8e3", "name": "Very large file: resources/js/pages/hr/payroll/index.tsx (1017 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/payroll/index.tsx (1017 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-91ee7c99b1cbd3c8", "name": "Very large file: resources/js/pages/hr/recruitment/jobs.tsx (1332 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/recruitment/jobs.tsx (1332 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-2dd54b4558a028c9", "name": "Very large file: resources/js/pages/hr/onboarding/index.tsx (944 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/onboarding/index.tsx (944 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-ff5c1bd45ceeb8e5", "name": "Very large file: resources/js/pages/hr/time/index.tsx (1613 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/time/index.tsx (1613 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-71280f50af5bfe71", "name": "Very large file: resources/js/pages/hr/my/payslips.tsx (935 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/my/payslips.tsx (935 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-2225916738f20587", "name": "Very large file: resources/js/pages/hr/wellbeing/index.tsx (1208 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/wellbeing/index.tsx (1208 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-206d57b16a64eb29", "name": "Very large file: resources/js/pages/hr/leave/index.tsx (1387 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/hr/leave/index.tsx (1387 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-413eaf990e1dae7b", "name": "Very large file: resources/js/pages/clients/medical.tsx (1706 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/clients/medical.tsx (1706 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-e6a69f7af0ea3e19", "name": "Very large file: resources/js/pages/portal/messages.tsx (1690 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/portal/messages.tsx (1690 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-f31c8f29d8b3d798", "name": "Very large file: resources/js/pages/portal/family-dashboard.tsx (2227 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/portal/family-dashboard.tsx (2227 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-b9e3c1030c5db2e5", "name": "Very large file: resources/js/pages/meds/today/index.tsx (1891 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/meds/today/index.tsx (1891 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-362dae7256ab7439", "name": "Very large file: resources/js/pages/security-devices/integrations/queclink-hub.tsx (4267 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/security-devices/integrations/queclink-hub.tsx (4267 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-b0b27a8528e38cb8", "name": "Very large file: resources/js/pages/security-devices/devices/show.tsx (1503 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/security-devices/devices/show.tsx (1503 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-6fa1d969fbbeb6c2", "name": "Very large file: resources/js/pages/safeguarding/show.tsx (1903 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/safeguarding/show.tsx (1903 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3fd98d5b99ef07e", "name": "Very large file: resources/js/pages/sites/show.tsx (6163 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/show.tsx (6163 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-288daf4e57f53161", "name": "Very large file: resources/js/pages/sites/_wizard.tsx (2106 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/_wizard.tsx (2106 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-6dad392fdf43647a", "name": "Very large file: resources/js/pages/sites/index.tsx (1901 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/index.tsx (1901 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-215e1f94d2ca6406", "name": "Very large file: resources/js/pages/sites/hardware/index.tsx (1055 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/hardware/index.tsx (1055 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-6d20f399835e58e0", "name": "Very large file: resources/js/pages/sites/compliance/Index.tsx (1202 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/compliance/Index.tsx (1202 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-10081788d96a687a", "name": "Very large file: resources/js/pages/sites/vendors-credentials/global.tsx (1950 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/vendors-credentials/global.tsx (1950 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-4c3714a7a3c659a4", "name": "Very large file: resources/js/pages/sites/meal-planner/_dialogs.tsx (1333 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/meal-planner/_dialogs.tsx (1333 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-eaa3eda29f84797c", "name": "Very large file: resources/js/pages/sites/meal-planner/_calendar-grid.tsx (1368 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/meal-planner/_calendar-grid.tsx (1368 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-14b5e38ea9a9ad27", "name": "Very large file: resources/js/pages/sites/meal-planner/_hero.tsx (856 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/meal-planner/_hero.tsx (856 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-c58e5ac6d967bec3", "name": "Very large file: resources/js/pages/sites/rooms/index.tsx (1349 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/rooms/index.tsx (1349 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-6e65e60f25ebd940", "name": "Very large file: resources/js/pages/sites/plan/_inspector.tsx (1474 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/plan/_inspector.tsx (1474 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-102c07e2bc53dd37", "name": "Very large file: resources/js/pages/sites/plan/_canvas.tsx (3159 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/plan/_canvas.tsx (3159 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-3e1b26073b1667e9", "name": "Very large file: resources/js/pages/sites/credentials/_dialogs.tsx (1368 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/credentials/_dialogs.tsx (1368 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-0bb02dcbfe736be0", "name": "Very large file: resources/js/pages/sites/calendar/_parts.tsx (1874 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/calendar/_parts.tsx (1874 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-48bb7e58ce610931", "name": "Very large file: resources/js/pages/sites/calendar/SiteCalendar.tsx (3628 lines)", "shortDescription": {"text": "Very large file: resources/js/pages/sites/calendar/SiteCalendar.tsx (3628 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": "80 test file(s) for 1464 source file(s) (ratio 0.05). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 17 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 3535 placeholder/mock markers across 825 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fdc6747395794b0f", "name": "Commented-code block (5 lines) in playwright.config.ts:58", "shortDescription": {"text": "Commented-code block (5 lines) in playwright.config.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b653a73db60559d4", "name": "Commented-code block (5 lines) in tests/e2e/global-setup.ts:59", "shortDescription": {"text": "Commented-code block (5 lines) in tests/e2e/global-setup.ts:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-425cbb20dff6929e", "name": "Commented-code block (5 lines) in resources/js/components/end-of-shift-checklist.tsx:606", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/components/end-of-shift-checklist.tsx:606"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-322f066ab4aa8af2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/fleet-map.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/fleet-map.tsx:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3dd7c3e180080b89", "name": "Commented-code block (6 lines) in resources/js/components/app-sidebar.tsx:760", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/components/app-sidebar.tsx:760"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afbe0ec923ea9263", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/client-edit-dialog.tsx:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/client-edit-dialog.tsx:83"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-abc19a13221b86dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/assign-worker-dialog.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/assign-worker-dialog.tsx:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b08c777610cd7e5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/rostering/reassign-dialog.tsx:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/rostering/reassign-dialog.tsx:115"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a090320f65d9c8dc", "name": "Commented-code block (5 lines) in resources/js/components/rostering/week-picker.tsx:171", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/components/rostering/week-picker.tsx:171"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b60a3b77105ee627", "name": "Commented-code block (5 lines) in resources/js/components/rostering/day-detail-dialog.tsx:439", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/components/rostering/day-detail-dialog.tsx:439"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a9636d649eaa147", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/rostering/calendar-pane.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/rostering/calendar-pane.tsx:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39a7cc5ec1242b95", "name": "Commented-code block (5 lines) in resources/js/components/finance/wizard.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/components/finance/wizard.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-210b755def7e3d1e", "name": "Commented-code block (6 lines) in resources/js/components/page/page-hero-stats.tsx:26", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/components/page/page-hero-stats.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4aba744dece1ed68", "name": "Commented-code block (6 lines) in resources/js/components/timesheets/create-timesheet-dialog.tsx:376", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/components/timesheets/create-timesheet-dialog.tsx:376"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7170bb2e6a439605", "name": "Commented-code block (6 lines) in resources/js/components/timesheets/timesheets-hero.tsx:92", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/components/timesheets/timesheets-hero.tsx:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a22e7cba5b2ac857", "name": "Commented-code block (5 lines) in resources/js/pages/settings/notification-escalations.tsx:371", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/pages/settings/notification-escalations.tsx:371"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db6111c96a45f2d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/control-room/messaging.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/control-room/messaging.tsx:153"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1429a68305303062", "name": "Commented-code block (6 lines) in resources/js/pages/operations/rostering/index.tsx:1353", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/pages/operations/rostering/index.tsx:1353"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e15da33e518f6b8c", "name": "Commented-code block (5 lines) in resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:348", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:348"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d10e726356f8827", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:581"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b75398338401b20b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/shifts/components/use-create-shift-launcher.", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/shifts/components/use-create-shift-launcher.tsx:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c54dedac7fab5240", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/calendar.tsx:327", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/calendar.tsx:327"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf9d2c552a8d19cc", "name": "Commented-code block (5 lines) in resources/js/pages/operations/clients/tabs/timeline-tab.tsx:412", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/pages/operations/clients/tabs/timeline-tab.tsx:412"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ec78e1d801b0b86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/tabs/timeline-tab.tsx:198", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/tabs/timeline-tab.tsx:198"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dc2306f8f0b6581a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:273", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2730"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f925a75d5d9275c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/fleet-assets/reports/reimbursement.tsx:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/fleet-assets/reports/reimbursement.tsx:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1284ecaa0c841a8e", "name": "Commented-code block (8 lines) in resources/js/pages/my-day/index.tsx:322", "shortDescription": {"text": "Commented-code block (8 lines) in resources/js/pages/my-day/index.tsx:322"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6380ad08b1001eda", "name": "Commented-code block (9 lines) in resources/js/pages/my-day/components/my-day-hero.tsx:286", "shortDescription": {"text": "Commented-code block (9 lines) in resources/js/pages/my-day/components/my-day-hero.tsx:286"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96cdf960bcbfc0e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/security-devices/integrations/queclink-hub.tsx:506", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/security-devices/integrations/queclink-hub.tsx:506"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c758b051408d6f59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/vendors-credentials/_audit-dialog.tsx:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/vendors-credentials/_audit-dialog.tsx:118"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-24d83d87ae663717", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed4693b10ced0626", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/plan/_builder-dialog.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/plan/_builder-dialog.tsx:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-13bef30be5898037", "name": "Commented-code block (6 lines) in resources/js/pages/sites/plan/_canvas.tsx:2093", "shortDescription": {"text": "Commented-code block (6 lines) in resources/js/pages/sites/plan/_canvas.tsx:2093"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fa7e9761075c677", "name": "Commented-code block (5 lines) in resources/js/pages/sites/calendar/SiteCalendar.tsx:675", "shortDescription": {"text": "Commented-code block (5 lines) in resources/js/pages/sites/calendar/SiteCalendar.tsx:675"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd477029cb9a47f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/hooks/use-web-push.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/hooks/use-web-push.ts:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b946634a573a07ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/hooks/use-two-factor-auth.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/hooks/use-two-factor-auth.ts:16"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5650e4e6f2c6df11", "name": "Commented-code block (5 lines) in tools/codemod-page-header.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in tools/codemod-page-header.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2eafc3188c36bb02", "name": "3 env vars used in code but missing from .env.example", "shortDescription": {"text": "3 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `PLAYWRIGHT_BASELINE_ENV`, `PLAYWRIGHT_PORT`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8459bac88596c4b5", "name": "Dangling fetch: POST /fleet/maps/usage (resources/js/components/fleet-map.tsx:103)", "shortDescription": {"text": "Dangling fetch: POST /fleet/maps/usage (resources/js/components/fleet-map.tsx:103)"}, "fullDescription": {"text": "`resources/js/components/fleet-map.tsx:103` calls `POST /fleet/maps/usage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fleet/maps/usage`\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-88392d2c57f64572", "name": "Dangling fetch: GET /operations/clients/${clientId}/location/history?${params.toString()} (resources/js/components/clien", "shortDescription": {"text": "Dangling fetch: GET /operations/clients/${clientId}/location/history?${params.toString()} (resources/js/components/client-location-tab.tsx:277)"}, "fullDescription": {"text": "`resources/js/components/client-location-tab.tsx:277` calls `GET /operations/clients/${clientId}/location/history?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/clients/<p>/location/history`\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-2a102535c73538bc", "name": "Dangling fetch: POST /sites/${siteId}/credentials/${credentialId}/totp/code (resources/js/components/credential-totp-dis", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/credentials/${credentialId}/totp/code (resources/js/components/credential-totp-display.tsx:30)"}, "fullDescription": {"text": "`resources/js/components/credential-totp-display.tsx:30` calls `POST /sites/${siteId}/credentials/${credentialId}/totp/code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sites/<p>/credentials/<p>/totp/code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f609f951540ca9b2", "name": "Dangling fetch: GET /rag/clients (resources/js/components/global-query-bar.tsx:76)", "shortDescription": {"text": "Dangling fetch: GET /rag/clients (resources/js/components/global-query-bar.tsx:76)"}, "fullDescription": {"text": "`resources/js/components/global-query-bar.tsx:76` calls `GET /rag/clients` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rag/clients`\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-96dfc25d99881378", "name": "Dangling fetch: POST /rag/ask (resources/js/components/global-query-bar.tsx:122)", "shortDescription": {"text": "Dangling fetch: POST /rag/ask (resources/js/components/global-query-bar.tsx:122)"}, "fullDescription": {"text": "`resources/js/components/global-query-bar.tsx:122` calls `POST /rag/ask` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rag/ask`\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-99fbff9b2a1caf8a", "name": "Dangling fetch: GET /operations/clients/${clientId}/edit?modal=1 (resources/js/components/client-edit-dialog.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /operations/clients/${clientId}/edit?modal=1 (resources/js/components/client-edit-dialog.tsx:83)"}, "fullDescription": {"text": "`resources/js/components/client-edit-dialog.tsx:83` calls `GET /operations/clients/${clientId}/edit?modal=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/clients/<p>/edit`\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-88e6fc76d98aa140", "name": "Dangling fetch: GET /operations/clients/${client.id}/assignments?modal=1 (resources/js/components/assign-worker-dialog.t", "shortDescription": {"text": "Dangling fetch: GET /operations/clients/${client.id}/assignments?modal=1 (resources/js/components/assign-worker-dialog.tsx:61)"}, "fullDescription": {"text": "`resources/js/components/assign-worker-dialog.tsx:61` calls `GET /operations/clients/${client.id}/assignments?modal=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/clients/<p>/assignments`\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-641953fbd41609b4", "name": "Dangling fetch: GET /operations/shifts/${shiftId}/candidates (resources/js/components/rostering/reassign-dialog.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /operations/shifts/${shiftId}/candidates (resources/js/components/rostering/reassign-dialog.tsx:115)"}, "fullDescription": {"text": "`resources/js/components/rostering/reassign-dialog.tsx:115` calls `GET /operations/shifts/${shiftId}/candidates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/shifts/<p>/candidates`\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-e42bc7ecfed0d261", "name": "Dangling fetch: GET /operations/rostering/calendar/events?${params.toString()} (resources/js/components/rostering/calend", "shortDescription": {"text": "Dangling fetch: GET /operations/rostering/calendar/events?${params.toString()} (resources/js/components/rostering/calendar-pane.tsx:1018)"}, "fullDescription": {"text": "`resources/js/components/rostering/calendar-pane.tsx:1018` calls `GET /operations/rostering/calendar/events?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/rostering/calendar/events`\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-d270856717982b6f", "name": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${activeRow.medication.id}/scan-verify (resources/", "shortDescription": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${activeRow.medication.id}/scan-verify (resources/js/components/operations/shift-medication-card.tsx:247)"}, "fullDescription": {"text": "`resources/js/components/operations/shift-medication-card.tsx:247` calls `POST /api/medications/clients/${clientId}/medications/${activeRow.medication.id}/scan-verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/medications/<p>/scan-verify`\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-82592033e9bfa1b3", "name": "Dangling fetch: GET /emar/audit/event/${encodeURIComponent(event.id)}/integrity (resources/js/components/emar/medication", "shortDescription": {"text": "Dangling fetch: GET /emar/audit/event/${encodeURIComponent(event.id)}/integrity (resources/js/components/emar/medication-event-drawer.tsx:144)"}, "fullDescription": {"text": "`resources/js/components/emar/medication-event-drawer.tsx:144` calls `GET /emar/audit/event/${encodeURIComponent(event.id)}/integrity` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/emar/audit/event/<p>/integrity`\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-e685baeeec7cf70c", "name": "Dangling fetch: POST /clients/${ctx.clientId}/calendar/appointments (resources/js/components/clients/profile/flows.tsx:1", "shortDescription": {"text": "Dangling fetch: POST /clients/${ctx.clientId}/calendar/appointments (resources/js/components/clients/profile/flows.tsx:1584)"}, "fullDescription": {"text": "`resources/js/components/clients/profile/flows.tsx:1584` calls `POST /clients/${ctx.clientId}/calendar/appointments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clients/<p>/calendar/appointments`\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-77a9a430878c64e8", "name": "Dangling fetch: POST /operations/clients/${clientId}/family-chat (resources/js/components/clients/profile/family-chat.ts", "shortDescription": {"text": "Dangling fetch: POST /operations/clients/${clientId}/family-chat (resources/js/components/clients/profile/family-chat.tsx:60)"}, "fullDescription": {"text": "`resources/js/components/clients/profile/family-chat.tsx:60` calls `POST /operations/clients/${clientId}/family-chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/clients/<p>/family-chat`\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-7b4be4dd7ed596b9", "name": "Dangling fetch: GET /clients/${clientId}/behaviour/abc?page=${p} (resources/js/components/clients/profile/tabs/behaviour", "shortDescription": {"text": "Dangling fetch: GET /clients/${clientId}/behaviour/abc?page=${p} (resources/js/components/clients/profile/tabs/behaviour-abc.tsx:83)"}, "fullDescription": {"text": "`resources/js/components/clients/profile/tabs/behaviour-abc.tsx:83` calls `GET /clients/${clientId}/behaviour/abc?page=${p}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clients/<p>/behaviour/abc`\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-e10a4cd2594f8336", "name": "Dangling fetch: GET /api/medications/clients/${clientId}/medications/${medicationId}/versions (resources/js/components/m", "shortDescription": {"text": "Dangling fetch: GET /api/medications/clients/${clientId}/medications/${medicationId}/versions (resources/js/components/medications/MedicationVersionHistory.tsx:48)"}, "fullDescription": {"text": "`resources/js/components/medications/MedicationVersionHistory.tsx:48` calls `GET /api/medications/clients/${clientId}/medications/${medicationId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/medications/<p>/versions`\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-162a46bd4a7d8738", "name": "Dangling fetch: GET /api/medications/interactions (resources/js/components/medications/DrugInteractionManager.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/medications/interactions (resources/js/components/medications/DrugInteractionManager.tsx:55)"}, "fullDescription": {"text": "`resources/js/components/medications/DrugInteractionManager.tsx:55` calls `GET /api/medications/interactions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/interactions`\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-f6d7ef3bacbbfe46", "name": "Dangling fetch: POST /api/medications/interactions (resources/js/components/medications/DrugInteractionManager.tsx:67)", "shortDescription": {"text": "Dangling fetch: POST /api/medications/interactions (resources/js/components/medications/DrugInteractionManager.tsx:67)"}, "fullDescription": {"text": "`resources/js/components/medications/DrugInteractionManager.tsx:67` calls `POST /api/medications/interactions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/interactions`\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-4c4482653088ea9c", "name": "Dangling fetch: POST /api/medications/clients/${clientId}/administrations/${administrationId}/attachments (resources/js/", "shortDescription": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/administrations/${administrationId}/attachments (resources/js/components/medications/AdministrationEvidenceDialog.tsx:89)"}, "fullDescription": {"text": "`resources/js/components/medications/AdministrationEvidenceDialog.tsx:89` calls `POST /api/medications/clients/${clientId}/administrations/${administrationId}/attachments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/administrations/<p>/attachments`\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-c6d6f64ae8a2325a", "name": "Dangling fetch: DELETE /api/medications/clients/${clientId}/administrations/${administrationId}/attachments/${attachment", "shortDescription": {"text": "Dangling fetch: DELETE /api/medications/clients/${clientId}/administrations/${administrationId}/attachments/${attachmentId} (resources/js/components/medications/AdministrationEvidenceDialog.tsx:129)"}, "fullDescription": {"text": "`resources/js/components/medications/AdministrationEvidenceDialog.tsx:129` calls `DELETE /api/medications/clients/${clientId}/administrations/${administrationId}/attachments/${attachmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/administrations/<p>/attachments/<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-700e5e5ab5c42047", "name": "Dangling fetch: GET /api/medications/clients/${clientId}/medications/${medicationId}/scheduled-counts (resources/js/comp", "shortDescription": {"text": "Dangling fetch: GET /api/medications/clients/${clientId}/medications/${medicationId}/scheduled-counts (resources/js/components/medications/ScheduledStockCounts.tsx:84)"}, "fullDescription": {"text": "`resources/js/components/medications/ScheduledStockCounts.tsx:84` calls `GET /api/medications/clients/${clientId}/medications/${medicationId}/scheduled-counts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/medications/<p>/scheduled-counts`\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-ac647ce00868eb2f", "name": "Dangling fetch: POST /api/medications/clients/${clientId}/attachments (resources/js/components/medications/SupportingEvi", "shortDescription": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/attachments (resources/js/components/medications/SupportingEvidenceDialog.tsx:87)"}, "fullDescription": {"text": "`resources/js/components/medications/SupportingEvidenceDialog.tsx:87` calls `POST /api/medications/clients/${clientId}/attachments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/attachments`\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-94a7553bd66d59f8", "name": "Dangling fetch: DELETE /api/medications/clients/${clientId}/attachments/${attachmentId} (resources/js/components/medicat", "shortDescription": {"text": "Dangling fetch: DELETE /api/medications/clients/${clientId}/attachments/${attachmentId} (resources/js/components/medications/SupportingEvidenceDialog.tsx:128)"}, "fullDescription": {"text": "`resources/js/components/medications/SupportingEvidenceDialog.tsx:128` calls `DELETE /api/medications/clients/${clientId}/attachments/${attachmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/attachments/<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-803e890e5ca08928", "name": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${medication.id}/scan-verify (resources/js/compone", "shortDescription": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${medication.id}/scan-verify (resources/js/components/medications/RecordAdministrationDialog.tsx:318)"}, "fullDescription": {"text": "`resources/js/components/medications/RecordAdministrationDialog.tsx:318` calls `POST /api/medications/clients/${clientId}/medications/${medication.id}/scan-verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/medications/<p>/scan-verify`\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-12c67fc5d2650306", "name": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${medicationId}/scan-verify (resources/js/lib/medi", "shortDescription": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${medicationId}/scan-verify (resources/js/lib/medication-scan.ts:43)"}, "fullDescription": {"text": "`resources/js/lib/medication-scan.ts:43` calls `POST /api/medications/clients/${clientId}/medications/${medicationId}/scan-verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/medications/clients/<p>/medications/<p>/scan-verify`\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-a02a2a5acb24bbc1", "name": "Dangling fetch: PUT /calendar/shifts/${shiftId} (resources/js/pages/my-calendar.tsx:343)", "shortDescription": {"text": "Dangling fetch: PUT /calendar/shifts/${shiftId} (resources/js/pages/my-calendar.tsx:343)"}, "fullDescription": {"text": "`resources/js/pages/my-calendar.tsx:343` calls `PUT /calendar/shifts/${shiftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/shifts/<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-3bf8093b492f7af0", "name": "Dangling fetch: PUT /calendar/shifts/${shiftId} (resources/js/pages/my-calendar.tsx:372)", "shortDescription": {"text": "Dangling fetch: PUT /calendar/shifts/${shiftId} (resources/js/pages/my-calendar.tsx:372)"}, "fullDescription": {"text": "`resources/js/pages/my-calendar.tsx:372` calls `PUT /calendar/shifts/${shiftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/shifts/<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-5bd1be887cd9245e", "name": "Dangling fetch: GET /my-calendar/events?${params.toString()} (resources/js/pages/my-calendar.tsx:397)", "shortDescription": {"text": "Dangling fetch: GET /my-calendar/events?${params.toString()} (resources/js/pages/my-calendar.tsx:397)"}, "fullDescription": {"text": "`resources/js/pages/my-calendar.tsx:397` calls `GET /my-calendar/events?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/my-calendar/events`\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-a318f02cf831c23f", "name": "Dangling fetch: POST /settings/templates/${template.id}/preview (resources/js/pages/settings/templates.tsx:867)", "shortDescription": {"text": "Dangling fetch: POST /settings/templates/${template.id}/preview (resources/js/pages/settings/templates.tsx:867)"}, "fullDescription": {"text": "`resources/js/pages/settings/templates.tsx:867` calls `POST /settings/templates/${template.id}/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/templates/<p>/preview`\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-24fdb566ffc71b87", "name": "Dangling fetch: GET /settings/calendar-sync/resources/${provider} (resources/js/pages/settings/calendar-sync.tsx:107)", "shortDescription": {"text": "Dangling fetch: GET /settings/calendar-sync/resources/${provider} (resources/js/pages/settings/calendar-sync.tsx:107)"}, "fullDescription": {"text": "`resources/js/pages/settings/calendar-sync.tsx:107` calls `GET /settings/calendar-sync/resources/${provider}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/calendar-sync/resources/<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-709f8eef95fb8bcf", "name": "Dangling fetch: POST /control-room/messaging/thread?${params.toString()} (resources/js/pages/control-room/messaging.tsx:", "shortDescription": {"text": "Dangling fetch: POST /control-room/messaging/thread?${params.toString()} (resources/js/pages/control-room/messaging.tsx:133)"}, "fullDescription": {"text": "`resources/js/pages/control-room/messaging.tsx:133` calls `POST /control-room/messaging/thread?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/control-room/messaging/thread`\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-221e4168b6c1791a", "name": "Dangling fetch: GET /operations/shifts/${shift.id}/editable (resources/js/pages/operations/rostering/index.tsx:1873)", "shortDescription": {"text": "Dangling fetch: GET /operations/shifts/${shift.id}/editable (resources/js/pages/operations/rostering/index.tsx:1873)"}, "fullDescription": {"text": "`resources/js/pages/operations/rostering/index.tsx:1873` calls `GET /operations/shifts/${shift.id}/editable` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/shifts/<p>/editable`\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-9e53988c82f35c7c", "name": "Dangling fetch: GET /operations/timesheets/${shift.timesheet_id}?modal=1 (resources/js/pages/operations/rostering/index.", "shortDescription": {"text": "Dangling fetch: GET /operations/timesheets/${shift.timesheet_id}?modal=1 (resources/js/pages/operations/rostering/index.tsx:1926)"}, "fullDescription": {"text": "`resources/js/pages/operations/rostering/index.tsx:1926` calls `GET /operations/timesheets/${shift.timesheet_id}?modal=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/timesheets/<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-26b72a3519d57e9f", "name": "Dangling fetch: POST /operations/coverage/reservations (resources/js/pages/operations/rostering/conflicts.tsx:208)", "shortDescription": {"text": "Dangling fetch: POST /operations/coverage/reservations (resources/js/pages/operations/rostering/conflicts.tsx:208)"}, "fullDescription": {"text": "`resources/js/pages/operations/rostering/conflicts.tsx:208` calls `POST /operations/coverage/reservations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/coverage/reservations`\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-9519ca23106a3341", "name": "Dangling fetch: PATCH /operations/shifts/${shift.id}/tasks/${task.id} (resources/js/pages/operations/shifts/show.tsx:857", "shortDescription": {"text": "Dangling fetch: PATCH /operations/shifts/${shift.id}/tasks/${task.id} (resources/js/pages/operations/shifts/show.tsx:857)"}, "fullDescription": {"text": "`resources/js/pages/operations/shifts/show.tsx:857` calls `PATCH /operations/shifts/${shift.id}/tasks/${task.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/shifts/<p>/tasks/<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-25b62e073b81993e", "name": "Dangling fetch: GET /operations/messages-search?q=${encodeURIComponent(q)} (resources/js/pages/operations/messages/Index", "shortDescription": {"text": "Dangling fetch: GET /operations/messages-search?q=${encodeURIComponent(q)} (resources/js/pages/operations/messages/Index.tsx:338)"}, "fullDescription": {"text": "`resources/js/pages/operations/messages/Index.tsx:338` calls `GET /operations/messages-search?q=${encodeURIComponent(q)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/messages-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-36355e67e92f176b", "name": "Dangling fetch: POST /clients/${client.id}/calendar/events?${params.toString()} (resources/js/pages/operations/clients/c", "shortDescription": {"text": "Dangling fetch: POST /clients/${client.id}/calendar/events?${params.toString()} (resources/js/pages/operations/clients/calendar.tsx:308)"}, "fullDescription": {"text": "`resources/js/pages/operations/clients/calendar.tsx:308` calls `POST /clients/${client.id}/calendar/events?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clients/<p>/calendar/events`\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-5958da6b9b2c94e5", "name": "Dangling fetch: GET /clients/${clientId}/meal-preferences (resources/js/pages/operations/clients/_food-meal-preferences.", "shortDescription": {"text": "Dangling fetch: GET /clients/${clientId}/meal-preferences (resources/js/pages/operations/clients/_food-meal-preferences.tsx:56)"}, "fullDescription": {"text": "`resources/js/pages/operations/clients/_food-meal-preferences.tsx:56` calls `GET /clients/${clientId}/meal-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/clients/<p>/meal-preferences`\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-8961b8ef87c82378", "name": "Dangling fetch: POST /operations/clients/${clientId}/notes/${h.source_id}/pin (resources/js/pages/operations/clients/tab", "shortDescription": {"text": "Dangling fetch: POST /operations/clients/${clientId}/notes/${h.source_id}/pin (resources/js/pages/operations/clients/tabs/timeline-tab.tsx:198)"}, "fullDescription": {"text": "`resources/js/pages/operations/clients/tabs/timeline-tab.tsx:198` calls `POST /operations/clients/${clientId}/notes/${h.source_id}/pin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/operations/clients/<p>/notes/<p>/pin`\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-23807f3620b330bf", "name": "Dangling fetch: GET /clients/${clientId}/calendar/events?${params.toString()} (resources/js/pages/operations/clients/tab", "shortDescription": {"text": "Dangling fetch: GET /clients/${clientId}/calendar/events?${params.toString()} (resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2730)"}, "fullDescription": {"text": "`resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2730` calls `GET /clients/${clientId}/calendar/events?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clients/<p>/calendar/events`\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-815f5a447eb722bc", "name": "Dangling fetch: POST /clients/${clientId}/calendar/appointments (resources/js/pages/operations/clients/tabs/legacy-profi", "shortDescription": {"text": "Dangling fetch: POST /clients/${clientId}/calendar/appointments (resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2760)"}, "fullDescription": {"text": "`resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2760` calls `POST /clients/${clientId}/calendar/appointments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clients/<p>/calendar/appointments`\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-abf5e75fae35d00d", "name": "Dangling fetch: GET /fleet-assets/reports/reimbursement/data?${params.toString()} (resources/js/pages/fleet-assets/repor", "shortDescription": {"text": "Dangling fetch: GET /fleet-assets/reports/reimbursement/data?${params.toString()} (resources/js/pages/fleet-assets/reports/reimbursement.tsx:33)"}, "fullDescription": {"text": "`resources/js/pages/fleet-assets/reports/reimbursement.tsx:33` calls `GET /fleet-assets/reports/reimbursement/data?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fleet-assets/reports/reimbursement/data`\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-6e124b1074f6fa4a", "name": "Dangling fetch: POST /governance/meetings/${selectedId}/packs (resources/js/pages/Governance/Packs/_dialogs.tsx:56)", "shortDescription": {"text": "Dangling fetch: POST /governance/meetings/${selectedId}/packs (resources/js/pages/Governance/Packs/_dialogs.tsx:56)"}, "fullDescription": {"text": "`resources/js/pages/Governance/Packs/_dialogs.tsx:56` calls `POST /governance/meetings/${selectedId}/packs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/governance/meetings/<p>/packs`\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-c2b44d620cdb3d83", "name": "Dangling fetch: POST /governance/packs/${pack.id}/read (resources/js/pages/Governance/Packs/Show.tsx:61)", "shortDescription": {"text": "Dangling fetch: POST /governance/packs/${pack.id}/read (resources/js/pages/Governance/Packs/Show.tsx:61)"}, "fullDescription": {"text": "`resources/js/pages/Governance/Packs/Show.tsx:61` calls `POST /governance/packs/${pack.id}/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/governance/packs/<p>/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-4c598b8c3e36931c", "name": "Dangling fetch: POST /governance/resolutions/${resolution.id}/finalize (resources/js/pages/Governance/Resolutions/Show.t", "shortDescription": {"text": "Dangling fetch: POST /governance/resolutions/${resolution.id}/finalize (resources/js/pages/Governance/Resolutions/Show.tsx:170)"}, "fullDescription": {"text": "`resources/js/pages/Governance/Resolutions/Show.tsx:170` calls `POST /governance/resolutions/${resolution.id}/finalize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/governance/resolutions/<p>/finalize`\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-e3670b6c22b8938f", "name": "Dangling fetch: GET /roadmap/dashboard (resources/js/pages/Roadmap/Dashboard.tsx:596)", "shortDescription": {"text": "Dangling fetch: GET /roadmap/dashboard (resources/js/pages/Roadmap/Dashboard.tsx:596)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:596` calls `GET /roadmap/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/dashboard`\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-4279f983ad55acc4", "name": "Dangling fetch: GET /roadmap/quarterly-plans/${planId} (resources/js/pages/Roadmap/Dashboard.tsx:695)", "shortDescription": {"text": "Dangling fetch: GET /roadmap/quarterly-plans/${planId} (resources/js/pages/Roadmap/Dashboard.tsx:695)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:695` calls `GET /roadmap/quarterly-plans/${planId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/quarterly-plans/<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-54944c51d63f044c", "name": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:828)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:828)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:828` calls `POST /roadmap/suggestions/${suggestionId}/triage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/suggestions/<p>/triage`\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-173f8111f7fd35e3", "name": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:855)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:855)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:855` calls `POST /roadmap/suggestions/${suggestionId}/triage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/suggestions/<p>/triage`\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-7e355f3420f0d5fd", "name": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:899)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:899)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:899` calls `POST /roadmap/suggestions/${suggestionId}/triage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/suggestions/<p>/triage`\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-fc0acedb5f526948", "name": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/convert (resources/js/pages/Roadmap/Dashboard.tsx:940)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/convert (resources/js/pages/Roadmap/Dashboard.tsx:940)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:940` calls `POST /roadmap/suggestions/${suggestionId}/convert` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/suggestions/<p>/convert`\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-cb366271047f23fd", "name": "Dangling fetch: POST /roadmap/decisions/${decisionId}/resolve (resources/js/pages/Roadmap/Dashboard.tsx:982)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/decisions/${decisionId}/resolve (resources/js/pages/Roadmap/Dashboard.tsx:982)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:982` calls `POST /roadmap/decisions/${decisionId}/resolve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/decisions/<p>/resolve`\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-88d2fb5d74f2ff21", "name": "Dangling fetch: POST /roadmap/quarterly-plans/generate (resources/js/pages/Roadmap/Dashboard.tsx:1016)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/quarterly-plans/generate (resources/js/pages/Roadmap/Dashboard.tsx:1016)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:1016` calls `POST /roadmap/quarterly-plans/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/quarterly-plans/generate`\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-97cceb062ce76870", "name": "Dangling fetch: POST /roadmap/suggestions/ingest (resources/js/pages/Roadmap/Dashboard.tsx:1051)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/suggestions/ingest (resources/js/pages/Roadmap/Dashboard.tsx:1051)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Dashboard.tsx:1051` calls `POST /roadmap/suggestions/ingest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/suggestions/ingest`\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-a382aed6e340c2e1", "name": "Dangling fetch: POST /roadmap/suggestions/${suggestion.id}/triage (resources/js/pages/Roadmap/Suggestions/Index.tsx:95)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestion.id}/triage (resources/js/pages/Roadmap/Suggestions/Index.tsx:95)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Suggestions/Index.tsx:95` calls `POST /roadmap/suggestions/${suggestion.id}/triage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/suggestions/<p>/triage`\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-7aa80142e82cbd73", "name": "Dangling fetch: POST /roadmap/suggestions/${suggestion.id}/convert (resources/js/pages/Roadmap/Suggestions/Index.tsx:124", "shortDescription": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestion.id}/convert (resources/js/pages/Roadmap/Suggestions/Index.tsx:124)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Suggestions/Index.tsx:124` calls `POST /roadmap/suggestions/${suggestion.id}/convert` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/suggestions/<p>/convert`\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-951784fa65b52b3d", "name": "Dangling fetch: POST /roadmap/decisions/${decisionId}/resolve (resources/js/pages/Roadmap/Decisions/Index.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /roadmap/decisions/${decisionId}/resolve (resources/js/pages/Roadmap/Decisions/Index.tsx:68)"}, "fullDescription": {"text": "`resources/js/pages/Roadmap/Decisions/Index.tsx:68` calls `POST /roadmap/decisions/${decisionId}/resolve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/roadmap/decisions/<p>/resolve`\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-e53818974ba1b70e", "name": "Dangling fetch: POST /hr/reports/builder/preview (resources/js/pages/hr/reports/builder.tsx:125)", "shortDescription": {"text": "Dangling fetch: POST /hr/reports/builder/preview (resources/js/pages/hr/reports/builder.tsx:125)"}, "fullDescription": {"text": "`resources/js/pages/hr/reports/builder.tsx:125` calls `POST /hr/reports/builder/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/hr/reports/builder/preview`\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-c938a65f722905f2", "name": "Dangling fetch: POST /hr/reports/saved/${report.id}/run (resources/js/pages/hr/reports/saved.tsx:73)", "shortDescription": {"text": "Dangling fetch: POST /hr/reports/saved/${report.id}/run (resources/js/pages/hr/reports/saved.tsx:73)"}, "fullDescription": {"text": "`resources/js/pages/hr/reports/saved.tsx:73` calls `POST /hr/reports/saved/${report.id}/run` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/hr/reports/saved/<p>/run`\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-641ec766fce9fd9f", "name": "Dangling fetch: GET /catering/library-counts (resources/js/pages/catering/_tabs.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /catering/library-counts (resources/js/pages/catering/_tabs.tsx:72)"}, "fullDescription": {"text": "`resources/js/pages/catering/_tabs.tsx:72` calls `GET /catering/library-counts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/catering/library-counts`\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-7d35e79a93a9dd01", "name": "Dangling fetch: GET /portal/clients/${client.id}/calendar/events?${params.toString()} (resources/js/pages/portal/calenda", "shortDescription": {"text": "Dangling fetch: GET /portal/clients/${client.id}/calendar/events?${params.toString()} (resources/js/pages/portal/calendar.tsx:260)"}, "fullDescription": {"text": "`resources/js/pages/portal/calendar.tsx:260` calls `GET /portal/clients/${client.id}/calendar/events?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portal/clients/<p>/calendar/events`\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-9562e62447bec265", "name": "Dangling fetch: GET /portal/clients/${client.id}/messages-search?q=${encodeURIComponent(q)} (resources/js/pages/portal/m", "shortDescription": {"text": "Dangling fetch: GET /portal/clients/${client.id}/messages-search?q=${encodeURIComponent(q)} (resources/js/pages/portal/messages.tsx:321)"}, "fullDescription": {"text": "`resources/js/pages/portal/messages.tsx:321` calls `GET /portal/clients/${client.id}/messages-search?q=${encodeURIComponent(q)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portal/clients/<p>/messages-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-fff07ff8a515c205", "name": "Dangling fetch: GET /portal/clients/${client.id}/location/history?${params.toString()} (resources/js/pages/portal/locati", "shortDescription": {"text": "Dangling fetch: GET /portal/clients/${client.id}/location/history?${params.toString()} (resources/js/pages/portal/location.tsx:140)"}, "fullDescription": {"text": "`resources/js/pages/portal/location.tsx:140` calls `GET /portal/clients/${client.id}/location/history?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portal/clients/<p>/location/history`\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-20918d50b8b2b927", "name": "Dangling fetch: POST /sites/${site.id}/documents (resources/js/pages/sites/edit.tsx:304)", "shortDescription": {"text": "Dangling fetch: POST /sites/${site.id}/documents (resources/js/pages/sites/edit.tsx:304)"}, "fullDescription": {"text": "`resources/js/pages/sites/edit.tsx:304` calls `POST /sites/${site.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/documents`\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-d2685f80978e6b97", "name": "Dangling fetch: DELETE /sites/${site.id}/documents/${deleteCandidate} (resources/js/pages/sites/edit.tsx:322)", "shortDescription": {"text": "Dangling fetch: DELETE /sites/${site.id}/documents/${deleteCandidate} (resources/js/pages/sites/edit.tsx:322)"}, "fullDescription": {"text": "`resources/js/pages/sites/edit.tsx:322` calls `DELETE /sites/${site.id}/documents/${deleteCandidate}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/documents/<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-8c8d56c439d44438", "name": "Dangling fetch: GET /sites/geocode/search?q=${encodeURIComponent(searchTerm.trim())} (resources/js/pages/sites/_overview", "shortDescription": {"text": "Dangling fetch: GET /sites/geocode/search?q=${encodeURIComponent(searchTerm.trim())} (resources/js/pages/sites/_overview-dialogs.tsx:262)"}, "fullDescription": {"text": "`resources/js/pages/sites/_overview-dialogs.tsx:262` calls `GET /sites/geocode/search?q=${encodeURIComponent(searchTerm.trim())}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sites/geocode/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-9afb2be6ef40e32f", "name": "Dangling fetch: GET /credential-types (resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /credential-types (resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:74)"}, "fullDescription": {"text": "`resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:74` calls `GET /credential-types` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credential-types`\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-8ac20ed778f68679", "name": "Dangling fetch: PUT /credential-types (resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:129)", "shortDescription": {"text": "Dangling fetch: PUT /credential-types (resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:129)"}, "fullDescription": {"text": "`resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:129` calls `PUT /credential-types` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credential-types`\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-ffd160b2e500b2d2", "name": "Dangling fetch: PUT /catering/products/${product.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:245)", "shortDescription": {"text": "Dangling fetch: PUT /catering/products/${product.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:245)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_library-dialogs.tsx:245` calls `PUT /catering/products/${product.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/catering/products/<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-ebc1ef30a20ef707", "name": "Dangling fetch: DELETE /catering/products/${product.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:259)", "shortDescription": {"text": "Dangling fetch: DELETE /catering/products/${product.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:259)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_library-dialogs.tsx:259` calls `DELETE /catering/products/${product.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/catering/products/<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-465d20ef03c847f6", "name": "Dangling fetch: PUT /catering/tags/${tag.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:579)", "shortDescription": {"text": "Dangling fetch: PUT /catering/tags/${tag.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:579)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_library-dialogs.tsx:579` calls `PUT /catering/tags/${tag.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/catering/tags/<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-d6d97a1a2c4ed3ac", "name": "Dangling fetch: DELETE /catering/tags/${tag.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:593)", "shortDescription": {"text": "Dangling fetch: DELETE /catering/tags/${tag.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:593)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_library-dialogs.tsx:593` calls `DELETE /catering/tags/${tag.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/catering/tags/<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-25c0c1e0a32eac12", "name": "Dangling fetch: GET /sites/${siteId}/meal-planner/takeaway-vendors (resources/js/pages/sites/meal-planner/_dialogs.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /sites/${siteId}/meal-planner/takeaway-vendors (resources/js/pages/sites/meal-planner/_dialogs.tsx:130)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_dialogs.tsx:130` calls `GET /sites/${siteId}/meal-planner/takeaway-vendors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-planner/takeaway-vendors`\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-1ebca7989cdb57b5", "name": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:1", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:152)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_dialogs.tsx:152` calls `POST /sites/${siteId}/meal-planner/check-conflicts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-planner/check-conflicts`\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-ef6b1cdb280e00d5", "name": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:1", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:185)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_dialogs.tsx:185` calls `POST /sites/${siteId}/meal-planner/check-conflicts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-planner/check-conflicts`\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-d3fb167739bd73b1", "name": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:2", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:231)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_dialogs.tsx:231` calls `POST /sites/${siteId}/meal-planner/check-conflicts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-planner/check-conflicts`\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-2a0e06c82150fa30", "name": "Dangling fetch: PUT /sites/${siteId}/meal-planner/settings (resources/js/pages/sites/meal-planner/_dialogs.tsx:1214)", "shortDescription": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-planner/settings (resources/js/pages/sites/meal-planner/_dialogs.tsx:1214)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_dialogs.tsx:1214` calls `PUT /sites/${siteId}/meal-planner/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-planner/settings`\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-1c07db3306730246", "name": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_dialogs.tsx:1230)", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_dialogs.tsx:1230)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_dialogs.tsx:1230` calls `POST /sites/${siteId}/meal-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates`\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-4792798f33b95c76", "name": "Dangling fetch: DELETE /sites/${siteId}/meal-templates/${id} (resources/js/pages/sites/meal-planner/_dialogs.tsx:1243)", "shortDescription": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-templates/${id} (resources/js/pages/sites/meal-planner/_dialogs.tsx:1243)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_dialogs.tsx:1243` calls `DELETE /sites/${siteId}/meal-templates/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates/<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-655ab2b53fac118c", "name": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${list.id}/receive (resources/js/pages/sites/meal-planner/_sho", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${list.id}/receive (resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:224)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:224` calls `POST /sites/${siteId}/meal-shopping-lists/${list.id}/receive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists/<p>/receive`\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-bf6161e42e9e3bde", "name": "Dangling fetch: DELETE /sites/${siteId}/meal-shopping-lists/${listId}/items/${item.id} (resources/js/pages/sites/meal-pl", "shortDescription": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-shopping-lists/${listId}/items/${item.id} (resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:321)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:321` calls `DELETE /sites/${siteId}/meal-shopping-lists/${listId}/items/${item.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists/<p>/items/<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-b9b8dd25603b6dd4", "name": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${list.id}/items (resources/js/pages/sites/meal-planner/_shopp", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${list.id}/items (resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:364)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:364` calls `POST /sites/${siteId}/meal-shopping-lists/${list.id}/items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists/<p>/items`\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-b901aac60044967a", "name": "Dangling fetch: PUT /sites/${siteId}/meal-planner/residents/${resident.id} (resources/js/pages/sites/meal-planner/_calen", "shortDescription": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-planner/residents/${resident.id} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:548)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:548` calls `PUT /sites/${siteId}/meal-planner/residents/${resident.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-planner/residents/<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-f6581e8db7091c20", "name": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:709)", "shortDescription": {"text": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:709)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:709` calls `GET /sites/${siteId}/meal-shopping-lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists`\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-3dc2f785caa4d9f5", "name": "Dangling fetch: POST /sites/${siteId}/meal-plan/${entry.id}/${path} (resources/js/pages/sites/meal-planner/_calendar-gri", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan/${entry.id}/${path} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1041)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1041` calls `POST /sites/${siteId}/meal-plan/${entry.id}/${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-374a2ba36093b582", "name": "Dangling fetch: DELETE /sites/${siteId}/meal-plan/${entry.id} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:", "shortDescription": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-plan/${entry.id} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1044)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1044` calls `DELETE /sites/${siteId}/meal-plan/${entry.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan/<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-c1c180f38e1ed6d5", "name": "Dangling fetch: POST /sites/${siteId}/meal-plan (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1047)", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1047)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1047` calls `POST /sites/${siteId}/meal-plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan`\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-7cdc24cd1a6168af", "name": "Dangling fetch: POST /sites/${siteId}/meal-plan (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1051)", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1051)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1051` calls `POST /sites/${siteId}/meal-plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan`\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-15cc49cb33d15b8f", "name": "Dangling fetch: PUT /sites/${siteId}/meal-plan/${entryId} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1067", "shortDescription": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-plan/${entryId} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1067)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1067` calls `PUT /sites/${siteId}/meal-plan/${entryId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan/<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-9de1986dd887a63b", "name": "Dangling fetch: POST /sites/${siteId}/meal-plan-week/copy (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1076", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan-week/copy (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1076)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1076` calls `POST /sites/${siteId}/meal-plan-week/copy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan-week/copy`\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-c93a0417eae284d5", "name": "Dangling fetch: DELETE /sites/${siteId}/meal-plan-week/clear (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1", "shortDescription": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-plan-week/clear (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1086)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1086` calls `DELETE /sites/${siteId}/meal-plan-week/clear` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan-week/clear`\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-3d4287f3712a8af7", "name": "Dangling fetch: POST /sites/${siteId}/meal-templates/${t.id}/apply (resources/js/pages/sites/meal-planner/_calendar-grid", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates/${t.id}/apply (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1098)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1098` calls `POST /sites/${siteId}/meal-templates/${t.id}/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates/<p>/apply`\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-3a723a54535f427b", "name": "Dangling fetch: POST /sites/${siteId}/meal-inventory/adjust (resources/js/pages/sites/meal-planner/_inventory-table.tsx:", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-inventory/adjust (resources/js/pages/sites/meal-planner/_inventory-table.tsx:98)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_inventory-table.tsx:98` calls `POST /sites/${siteId}/meal-inventory/adjust` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-inventory/adjust`\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-76e5f92662a9706d", "name": "Dangling fetch: DELETE /sites/${siteId}/meal-inventory/items/${item.id} (resources/js/pages/sites/meal-planner/_inventor", "shortDescription": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-inventory/items/${item.id} (resources/js/pages/sites/meal-planner/_inventory-table.tsx:109)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_inventory-table.tsx:109` calls `DELETE /sites/${siteId}/meal-inventory/items/${item.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-inventory/items/<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-516b8d75c1bd6a34", "name": "Dangling fetch: GET /sites/${currentSiteId}/meal-planner/bootstrap (resources/js/pages/sites/meal-planner/index.tsx:118)", "shortDescription": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-planner/bootstrap (resources/js/pages/sites/meal-planner/index.tsx:118)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/index.tsx:118` calls `GET /sites/${currentSiteId}/meal-planner/bootstrap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-planner/bootstrap`\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-a3244b60e71e78de", "name": "Dangling fetch: GET /sites/${currentSiteId}/meal-plan (resources/js/pages/sites/meal-planner/index.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-plan (resources/js/pages/sites/meal-planner/index.tsx:167)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/index.tsx:167` calls `GET /sites/${currentSiteId}/meal-plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan`\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-a8831a5fca484d5d", "name": "Dangling fetch: GET /sites/${currentSiteId}/meal-plan/week-summary (resources/js/pages/sites/meal-planner/index.tsx:168)", "shortDescription": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-plan/week-summary (resources/js/pages/sites/meal-planner/index.tsx:168)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/index.tsx:168` calls `GET /sites/${currentSiteId}/meal-plan/week-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-plan/week-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-ca962f15d92d00bf", "name": "Dangling fetch: GET /sites/${currentSiteId}/meal-inventory (resources/js/pages/sites/meal-planner/index.tsx:186)", "shortDescription": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-inventory (resources/js/pages/sites/meal-planner/index.tsx:186)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/index.tsx:186` calls `GET /sites/${currentSiteId}/meal-inventory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-inventory`\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-59fb1db8d820fbe7", "name": "Dangling fetch: GET /sites/${currentSiteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/index.tsx:198)", "shortDescription": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/index.tsx:198)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/index.tsx:198` calls `GET /sites/${currentSiteId}/meal-shopping-lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists`\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-94499968a93d6ad6", "name": "Dangling fetch: GET /sites/${currentSiteId}/meal-templates (resources/js/pages/sites/meal-planner/index.tsx:210)", "shortDescription": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-templates (resources/js/pages/sites/meal-planner/index.tsx:210)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/index.tsx:210` calls `GET /sites/${currentSiteId}/meal-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates`\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-28362d80d2e4176c", "name": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_templates-panel.tsx:43)", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_templates-panel.tsx:43)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_templates-panel.tsx:43` calls `POST /sites/${siteId}/meal-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates`\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-8efb5f7cc93eb0da", "name": "Dangling fetch: DELETE /sites/${siteId}/meal-templates/${t.id} (resources/js/pages/sites/meal-planner/_templates-panel.t", "shortDescription": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-templates/${t.id} (resources/js/pages/sites/meal-planner/_templates-panel.tsx:53)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_templates-panel.tsx:53` calls `DELETE /sites/${siteId}/meal-templates/${t.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates/<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-7a2d6561da963da8", "name": "Dangling fetch: POST /sites/${siteId}/meal-templates/${t.id}/apply (resources/js/pages/sites/meal-planner/_templates-pan", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates/${t.id}/apply (resources/js/pages/sites/meal-planner/_templates-panel.tsx:63)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_templates-panel.tsx:63` calls `POST /sites/${siteId}/meal-templates/${t.id}/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates/<p>/apply`\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-ba34e5a6f800a2ac", "name": "Dangling fetch: PUT /sites/${siteId}/meal-templates/${initial.id} (resources/js/pages/sites/meal-planner/_templates-pane", "shortDescription": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-templates/${initial.id} (resources/js/pages/sites/meal-planner/_templates-panel.tsx:278)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_templates-panel.tsx:278` calls `PUT /sites/${siteId}/meal-templates/${initial.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates/<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-41bbc105d98066ce", "name": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_templates-panel.tsx:279)", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_templates-panel.tsx:279)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_templates-panel.tsx:279` calls `POST /sites/${siteId}/meal-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-templates`\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-d16a5402fc12b24a", "name": "Dangling fetch: PUT /catering/recipes/${recipe.id} (resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:160)", "shortDescription": {"text": "Dangling fetch: PUT /catering/recipes/${recipe.id} (resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:160)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:160` calls `PUT /catering/recipes/${recipe.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/catering/recipes/<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-0ee7e0b7ddf4d6a3", "name": "Dangling fetch: DELETE /catering/recipes/${recipe.id} (resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:178", "shortDescription": {"text": "Dangling fetch: DELETE /catering/recipes/${recipe.id} (resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:178)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:178` calls `DELETE /catering/recipes/${recipe.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/catering/recipes/<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-b00da60af6bbbb78", "name": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:261)", "shortDescription": {"text": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:261)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_recipes-panel.tsx:261` calls `GET /sites/${siteId}/meal-shopping-lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists`\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-3b46d516d86dd8e2", "name": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/generate (resources/js/pages/sites/meal-planner/_recipes-panel", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/generate (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:267)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_recipes-panel.tsx:267` calls `POST /sites/${siteId}/meal-shopping-lists/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists/generate`\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-4df3cd21eb0abe9b", "name": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:272)", "shortDescription": {"text": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:272)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_recipes-panel.tsx:272` calls `GET /sites/${siteId}/meal-shopping-lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists`\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-1d594112c804acbd", "name": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${draft.id}/items (resources/js/pages/sites/meal-planner/_reci", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${draft.id}/items (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:285)"}, "fullDescription": {"text": "`resources/js/pages/sites/meal-planner/_recipes-panel.tsx:285` calls `POST /sites/${siteId}/meal-shopping-lists/${draft.id}/items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/sites/<p>/meal-shopping-lists/<p>/items`\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-183d1fce4e9d9e8e", "name": "Dangling fetch: POST /sites/${siteId}/credentials/${credential.id}/reveal (resources/js/pages/sites/credentials/_dialogs", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/credentials/${credential.id}/reveal (resources/js/pages/sites/credentials/_dialogs.tsx:493)"}, "fullDescription": {"text": "`resources/js/pages/sites/credentials/_dialogs.tsx:493` calls `POST /sites/${siteId}/credentials/${credential.id}/reveal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sites/<p>/credentials/<p>/reveal`\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-7d5e8477f78f693a", "name": "Dangling fetch: POST /sites/${siteId}/credentials/${credential.id}/copy (resources/js/pages/sites/credentials/_dialogs.t", "shortDescription": {"text": "Dangling fetch: POST /sites/${siteId}/credentials/${credential.id}/copy (resources/js/pages/sites/credentials/_dialogs.tsx:548)"}, "fullDescription": {"text": "`resources/js/pages/sites/credentials/_dialogs.tsx:548` calls `POST /sites/${siteId}/credentials/${credential.id}/copy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sites/<p>/credentials/<p>/copy`\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-ecacb285b222ee34", "name": "Dangling fetch: GET /fleet/trips/${trip.id}/playback (resources/js/pages/fleet-management/trip.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /fleet/trips/${trip.id}/playback (resources/js/pages/fleet-management/trip.tsx:63)"}, "fullDescription": {"text": "`resources/js/pages/fleet-management/trip.tsx:63` calls `GET /fleet/trips/${trip.id}/playback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fleet/trips/<p>/playback`\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-85b62816afbc2d65", "name": "Unused endpoint: POST /attendance/clock-out", "shortDescription": {"text": "Unused endpoint: POST /attendance/clock-out"}, "fullDescription": {"text": "`resources/js/components/end-of-shift-checklist.tsx` declares `POST /attendance/clock-out` 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-4cfd429eab31ddcd", "name": "Unused endpoint: POST /attendance/handover", "shortDescription": {"text": "Unused endpoint: POST /attendance/handover"}, "fullDescription": {"text": "`resources/js/components/handover-write-sheet.tsx` declares `POST /attendance/handover` 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-9a7a87191205883e", "name": "Unused endpoint: POST /inbox/notifications/read-all", "shortDescription": {"text": "Unused endpoint: POST /inbox/notifications/read-all"}, "fullDescription": {"text": "`resources/js/components/inbox-menus.tsx` declares `POST /inbox/notifications/read-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12d9a5ebcb96f2f5", "name": "Unused endpoint: POST /inbox/announcements/read-all", "shortDescription": {"text": "Unused endpoint: POST /inbox/announcements/read-all"}, "fullDescription": {"text": "`resources/js/components/inbox-menus.tsx` declares `POST /inbox/announcements/read-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2076933d6ca0fb52", "name": "Unused endpoint: POST /system/users/stop-impersonating", "shortDescription": {"text": "Unused endpoint: POST /system/users/stop-impersonating"}, "fullDescription": {"text": "`resources/js/components/app-sidebar-header.tsx` declares `POST /system/users/stop-impersonating` 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-95ab0976c445e937", "name": "Unused endpoint: POST /attendance/clock-in", "shortDescription": {"text": "Unused endpoint: POST /attendance/clock-in"}, "fullDescription": {"text": "`resources/js/components/clock-in-card.tsx` declares `POST /attendance/clock-in` 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-fe97d905e51f2bc2", "name": "Unused endpoint: POST /respite/requests", "shortDescription": {"text": "Unused endpoint: POST /respite/requests"}, "fullDescription": {"text": "`resources/js/components/respite/modals/request-intake.tsx` declares `POST /respite/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-0060c35137886cf9", "name": "Unused endpoint: POST /respite/referrals", "shortDescription": {"text": "Unused endpoint: POST /respite/referrals"}, "fullDescription": {"text": "`resources/js/components/respite/modals/referral-intake.tsx` declares `POST /respite/referrals` 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-6a69008b7e2ae10b", "name": "Unused endpoint: POST /operations/rostering/templates", "shortDescription": {"text": "Unused endpoint: POST /operations/rostering/templates"}, "fullDescription": {"text": "`resources/js/components/rostering/template-dialogs.tsx` declares `POST /operations/rostering/templates` 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-57dfff33610448fc", "name": "Unused endpoint: GET /operations/rostering/conflicts", "shortDescription": {"text": "Unused endpoint: GET /operations/rostering/conflicts"}, "fullDescription": {"text": "`resources/js/components/rostering/conflict-queue/conflict-hero-footer.tsx` declares `GET /operations/rostering/conflicts` 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-9c04d48b2a99a700", "name": "Unused endpoint: POST /sites/checklists/templates", "shortDescription": {"text": "Unused endpoint: POST /sites/checklists/templates"}, "fullDescription": {"text": "`resources/js/components/checklists/template-builder.tsx` declares `POST /sites/checklists/templates` 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-05671ff45f86de0a", "name": "Unused endpoint: POST /hr/time/clock-in", "shortDescription": {"text": "Unused endpoint: POST /hr/time/clock-in"}, "fullDescription": {"text": "`resources/js/components/dashboard/clock-widget.tsx` declares `POST /hr/time/clock-in` 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-e5a5fe418032a604", "name": "Unused endpoint: POST /hr/time/clock-out", "shortDescription": {"text": "Unused endpoint: POST /hr/time/clock-out"}, "fullDescription": {"text": "`resources/js/components/dashboard/clock-widget.tsx` declares `POST /hr/time/clock-out` 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-f2916473cce7678c", "name": "Unused endpoint: POST /meds/today/prn/effect", "shortDescription": {"text": "Unused endpoint: POST /meds/today/prn/effect"}, "fullDescription": {"text": "`resources/js/components/emar/prn-effectiveness-dialog.tsx` declares `POST /meds/today/prn/effect` 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-6d43653833ea4d18", "name": "Unused endpoint: POST /meds/today/record", "shortDescription": {"text": "Unused endpoint: POST /meds/today/record"}, "fullDescription": {"text": "`resources/js/components/emar/mar/dose-context-menu.tsx` declares `POST /meds/today/record` 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-982149a8e50d4186", "name": "Unused endpoint: POST /finance/accounts", "shortDescription": {"text": "Unused endpoint: POST /finance/accounts"}, "fullDescription": {"text": "`resources/js/components/finance/new-account-dialog.tsx` declares `POST /finance/accounts` 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-6bc22c83750f3ac1", "name": "Unused endpoint: POST /finance/journals", "shortDescription": {"text": "Unused endpoint: POST /finance/journals"}, "fullDescription": {"text": "`resources/js/components/finance/new-journal-dialog.tsx` declares `POST /finance/journals` 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-2628204af5cf2ffa", "name": "Unused endpoint: POST /finance/bills", "shortDescription": {"text": "Unused endpoint: POST /finance/bills"}, "fullDescription": {"text": "`resources/js/components/finance/new-bill-dialog.tsx` declares `POST /finance/bills` 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-d63a8ff44e41072b", "name": "Unused endpoint: POST /finance/purchase-orders", "shortDescription": {"text": "Unused endpoint: POST /finance/purchase-orders"}, "fullDescription": {"text": "`resources/js/components/finance/new-po-dialog.tsx` declares `POST /finance/purchase-orders` 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-e8b28de3b89987d2", "name": "Unused endpoint: POST /finance/invoices", "shortDescription": {"text": "Unused endpoint: POST /finance/invoices"}, "fullDescription": {"text": "`resources/js/components/finance/new-invoice-dialog.tsx` declares `POST /finance/invoices` 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-229fe759061d358a", "name": "Unused endpoint: POST /finance/vendors", "shortDescription": {"text": "Unused endpoint: POST /finance/vendors"}, "fullDescription": {"text": "`resources/js/components/finance/new-vendor-dialog.tsx` declares `POST /finance/vendors` 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-633d701750dade78", "name": "Unused endpoint: POST /finance/receivables/allocate", "shortDescription": {"text": "Unused endpoint: POST /finance/receivables/allocate"}, "fullDescription": {"text": "`resources/js/components/finance/record-receipt-dialog.tsx` declares `POST /finance/receivables/allocate` 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-ca76a51eb06e2475", "name": "Unused endpoint: POST /hr/offboarding", "shortDescription": {"text": "Unused endpoint: POST /hr/offboarding"}, "fullDescription": {"text": "`resources/js/components/hr/offboarding-wizard-dialog.tsx` declares `POST /hr/offboarding` 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-b44fbc418c953478", "name": "Unused endpoint: POST /hr/recruitment/offers", "shortDescription": {"text": "Unused endpoint: POST /hr/recruitment/offers"}, "fullDescription": {"text": "`resources/js/components/hr/offer-wizard-dialog.tsx` declares `POST /hr/recruitment/offers` 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-65d2d2e2bc5d0bdd", "name": "Unused endpoint: POST /hr/onboarding", "shortDescription": {"text": "Unused endpoint: POST /hr/onboarding"}, "fullDescription": {"text": "`resources/js/components/hr/onboarding-wizard-dialog.tsx` declares `POST /hr/onboarding` 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-0ab4cbbecf9de8fd", "name": "Unused endpoint: POST /hr/people", "shortDescription": {"text": "Unused endpoint: POST /hr/people"}, "fullDescription": {"text": "`resources/js/components/hr/add-employee-dialog.tsx` declares `POST /hr/people` 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-934b47294b4f0cb0", "name": "Unused endpoint: GET /hr/people", "shortDescription": {"text": "Unused endpoint: GET /hr/people"}, "fullDescription": {"text": "`resources/js/components/hr/departments-pane.tsx` declares `GET /hr/people` 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-220ff528f6019fc4", "name": "Unused endpoint: POST /hr/departments", "shortDescription": {"text": "Unused endpoint: POST /hr/departments"}, "fullDescription": {"text": "`resources/js/components/hr/department-dialog.tsx` declares `POST /hr/departments` 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-a3275efb990afed3", "name": "Unused endpoint: POST /hr/leave", "shortDescription": {"text": "Unused endpoint: POST /hr/leave"}, "fullDescription": {"text": "`resources/js/components/hr/leave-request-dialog.tsx` declares `POST /hr/leave` 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-b0e05106656c3a26", "name": "Unused endpoint: POST /hr/positions", "shortDescription": {"text": "Unused endpoint: POST /hr/positions"}, "fullDescription": {"text": "`resources/js/components/hr/position-dialog.tsx` declares `POST /hr/positions` 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-f183948e7163edcd", "name": "Unused endpoint: POST /hr/feed/kudos", "shortDescription": {"text": "Unused endpoint: POST /hr/feed/kudos"}, "fullDescription": {"text": "`resources/js/components/hr/recognition-dialog.tsx` declares `POST /hr/feed/kudos` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b0cdf3d763af16a", "name": "Unused endpoint: POST /hr/performance/probation", "shortDescription": {"text": "Unused endpoint: POST /hr/performance/probation"}, "fullDescription": {"text": "`resources/js/components/hr/performance/probation-dialog.tsx` declares `POST /hr/performance/probation` 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-8004b8c33da4b892", "name": "Unused endpoint: POST /hr/goals", "shortDescription": {"text": "Unused endpoint: POST /hr/goals"}, "fullDescription": {"text": "`resources/js/components/hr/performance/goal-dialog.tsx` declares `POST /hr/goals` 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-d8f8cb076cfe9a0f", "name": "Unused endpoint: POST /hr/performance/supervision", "shortDescription": {"text": "Unused endpoint: POST /hr/performance/supervision"}, "fullDescription": {"text": "`resources/js/components/hr/performance/supervision-dialog.tsx` declares `POST /hr/performance/supervision` 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-b4f7702d67f0ba0b", "name": "Unused endpoint: POST /hr/performance/reviews", "shortDescription": {"text": "Unused endpoint: POST /hr/performance/reviews"}, "fullDescription": {"text": "`resources/js/components/hr/performance/review-wizard-dialog.tsx` declares `POST /hr/performance/reviews` 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-1faf75510c0ed0c7", "name": "Unused endpoint: POST /operations/clients", "shortDescription": {"text": "Unused endpoint: POST /operations/clients"}, "fullDescription": {"text": "`resources/js/components/clients/add-client-dialog.tsx` declares `POST /operations/clients` 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-334d29cde7f9e76b", "name": "Unused endpoint: POST /operations/care-plans", "shortDescription": {"text": "Unused endpoint: POST /operations/care-plans"}, "fullDescription": {"text": "`resources/js/components/clients/profile/care-plan-dialog.tsx` declares `POST /operations/care-plans` 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-471d3914911ac509", "name": "Unused endpoint: POST /emar/refusal-followups", "shortDescription": {"text": "Unused endpoint: POST /emar/refusal-followups"}, "fullDescription": {"text": "`resources/js/components/medications/RefusalFollowUpDialog.tsx` declares `POST /emar/refusal-followups` 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-ca97db76659b4e55", "name": "Unused endpoint: POST /sites", "shortDescription": {"text": "Unused endpoint: POST /sites"}, "fullDescription": {"text": "`resources/js/components/sites/add-site-dialog.tsx` declares `POST /sites` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-337c3846de0a05a3", "name": "Unused endpoint: POST /operations/timesheets", "shortDescription": {"text": "Unused endpoint: POST /operations/timesheets"}, "fullDescription": {"text": "`resources/js/components/timesheets/create-timesheet-dialog.tsx` declares `POST /operations/timesheets` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d504b80adc9409ec", "name": "Unused endpoint: GET /dashboard", "shortDescription": {"text": "Unused endpoint: GET /dashboard"}, "fullDescription": {"text": "`resources/js/pages/dashboard.tsx` declares `GET /dashboard` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c7d3b0754e1650c", "name": "Unused endpoint: PUT /settings/terminology", "shortDescription": {"text": "Unused endpoint: PUT /settings/terminology"}, "fullDescription": {"text": "`resources/js/pages/settings/terminology.tsx` declares `PUT /settings/terminology` 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-050c1d75ce2dd3a7", "name": "Unused endpoint: POST /settings/service-contexts/default", "shortDescription": {"text": "Unused endpoint: POST /settings/service-contexts/default"}, "fullDescription": {"text": "`resources/js/pages/settings/service-contexts.tsx` declares `POST /settings/service-contexts/default` 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-cf6e427ad05d3412", "name": "Unused endpoint: POST /settings/service-contexts", "shortDescription": {"text": "Unused endpoint: POST /settings/service-contexts"}, "fullDescription": {"text": "`resources/js/pages/settings/service-contexts.tsx` declares `POST /settings/service-contexts` 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-673b5643a72d73e3", "name": "Unused endpoint: PUT /settings/modules", "shortDescription": {"text": "Unused endpoint: PUT /settings/modules"}, "fullDescription": {"text": "`resources/js/pages/settings/modules.tsx` declares `PUT /settings/modules` 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-77eb032817072186", "name": "Unused endpoint: PUT /settings/profile/landing", "shortDescription": {"text": "Unused endpoint: PUT /settings/profile/landing"}, "fullDescription": {"text": "`resources/js/pages/settings/profile.tsx` declares `PUT /settings/profile/landing` 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-f0fd42bc3b40bd55", "name": "Unused endpoint: POST /auth/microsoft/disconnect", "shortDescription": {"text": "Unused endpoint: POST /auth/microsoft/disconnect"}, "fullDescription": {"text": "`resources/js/pages/settings/profile.tsx` declares `POST /auth/microsoft/disconnect` 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-f10d336f5a0d22e1", "name": "Unused endpoint: POST /auth/google/disconnect", "shortDescription": {"text": "Unused endpoint: POST /auth/google/disconnect"}, "fullDescription": {"text": "`resources/js/pages/settings/profile.tsx` declares `POST /auth/google/disconnect` 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-9ae154b5d760b4de", "name": "Unused endpoint: PUT /settings/email", "shortDescription": {"text": "Unused endpoint: PUT /settings/email"}, "fullDescription": {"text": "`resources/js/pages/settings/email-settings.tsx` declares `PUT /settings/email` 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-b1a3bd7ee3069631", "name": "Unused endpoint: POST /settings/email/test", "shortDescription": {"text": "Unused endpoint: POST /settings/email/test"}, "fullDescription": {"text": "`resources/js/pages/settings/email-settings.tsx` declares `POST /settings/email/test` 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/18499"}, "properties": {"repository": "Rory357/oblivionfindings", "repoUrl": "https://github.com/Rory357/oblivionfindings", "branch": "main"}, "results": [{"ruleId": "scanner-ee77bad092fcd312", "level": "note", "message": {"text": "Possibly dead Python function: page1"}, "properties": {"repobilityId": "2b9eede672ce7615", "scanner": "scanner-primary", "fingerprint": "ee77bad092fcd312", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/governance-architecture-diagram.py:108"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-698cb25d305dfb89", "level": "note", "message": {"text": "Possibly dead Python function: page2"}, "properties": {"repobilityId": "d389c47f4b4d42e9", "scanner": "scanner-primary", "fingerprint": "698cb25d305dfb89", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/governance-architecture-diagram.py:188"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eec49f1d49feb5cb", "level": "note", "message": {"text": "Possibly dead Python function: page3"}, "properties": {"repobilityId": "7363701036da7d27", "scanner": "scanner-primary", "fingerprint": "eec49f1d49feb5cb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/governance-architecture-diagram.py:261"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6fdc6f246b71e780", "level": "note", "message": {"text": "Possibly dead Python function: page4"}, "properties": {"repobilityId": "0eca71ba62016acc", "scanner": "scanner-primary", "fingerprint": "6fdc6f246b71e780", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/governance-architecture-diagram.py:313"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29d5524a6247535f", "level": "note", "message": {"text": "Possibly dead Python function: page5"}, "properties": {"repobilityId": "b129e449ebaeb549", "scanner": "scanner-primary", "fingerprint": "29d5524a6247535f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/governance-architecture-diagram.py:382"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c35fb1503f44f78f", "level": "note", "message": {"text": "Possibly dead Python function: page6"}, "properties": {"repobilityId": "a864f2aae9ab90c8", "scanner": "scanner-primary", "fingerprint": "c35fb1503f44f78f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/governance-architecture-diagram.py:438"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7b823e426023547", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-teardown.ts:16"}, "properties": {"repobilityId": "c58086e662a419d5", "scanner": "scanner-primary", "fingerprint": "a7b823e426023547", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-714e7ed7f7986ce8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:34"}, "properties": {"repobilityId": "be9e82038c157643", "scanner": "scanner-primary", "fingerprint": "714e7ed7f7986ce8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a218607404331d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/client-safety-ribbon.tsx:105"}, "properties": {"repobilityId": "19e7015987454451", "scanner": "scanner-primary", "fingerprint": "5a218607404331d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8dbfbbe96939b071", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/pre-shift-briefing-card.tsx:105"}, "properties": {"repobilityId": "8ebe2fbb1856eeb0", "scanner": "scanner-primary", "fingerprint": "8dbfbbe96939b071", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-870be8f5d9892e6c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/app-logo.tsx:23"}, "properties": {"repobilityId": "26b37aa66d681c8d", "scanner": "scanner-primary", "fingerprint": "870be8f5d9892e6c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f52af807ea4cc1e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/app-sidebar.tsx:2420"}, "properties": {"repobilityId": "1d1b1cf5465bd56b", "scanner": "scanner-primary", "fingerprint": "7f52af807ea4cc1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fef9055d1fb3274d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/prn-sheet.tsx:451"}, "properties": {"repobilityId": "2c3ba58d4995a684", "scanner": "scanner-primary", "fingerprint": "fef9055d1fb3274d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6462d445b08eb83b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/med-round-card.tsx:76"}, "properties": {"repobilityId": "3b5999cdececb093", "scanner": "scanner-primary", "fingerprint": "6462d445b08eb83b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-18020345fa7378ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/user-info.tsx:23"}, "properties": {"repobilityId": "f21bd2bff6a22fa9", "scanner": "scanner-primary", "fingerprint": "18020345fa7378ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-573b8a0ad74ed0cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/staff-header.tsx:94"}, "properties": {"repobilityId": "e71df36cc27e9c56", "scanner": "scanner-primary", "fingerprint": "573b8a0ad74ed0cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93320a5f08f869d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/fleet-charts.tsx:194"}, "properties": {"repobilityId": "1a064c99ff9ce0ce", "scanner": "scanner-primary", "fingerprint": "93320a5f08f869d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56bd8bba9230e76e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/behaviour-insights-card.tsx:88"}, "properties": {"repobilityId": "cfda7bb9d20143af", "scanner": "scanner-primary", "fingerprint": "56bd8bba9230e76e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d5b3492078d90091", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheet-allocations-breakdown.tsx:182"}, "properties": {"repobilityId": "69859d0f89fa14e0", "scanner": "scanner-primary", "fingerprint": "d5b3492078d90091", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7679c9912f5fcee2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/global-nav-search.tsx:130"}, "properties": {"repobilityId": "e201587e18faeadd", "scanner": "scanner-primary", "fingerprint": "7679c9912f5fcee2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-990dafb430cc8188", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/components/two-factor-setup-modal.tsx:78"}, "properties": {"repobilityId": "bba98e72815cad81", "scanner": "scanner-primary", "fingerprint": "990dafb430cc8188", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c1ae5be6944c3a3b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/assign-worker-dialog.tsx:173"}, "properties": {"repobilityId": "68e71de81512f195", "scanner": "scanner-primary", "fingerprint": "c1ae5be6944c3a3b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5aacaf21a894fa49", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/governance/GovernanceCalendar.tsx:209"}, "properties": {"repobilityId": "b2fea9287cc9d76e", "scanner": "scanner-primary", "fingerprint": "5aacaf21a894fa49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edd8066db77b8707", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/governance/GovernanceAttachmentsPanel.tsx:289"}, "properties": {"repobilityId": "94dc6b506c841582", "scanner": "scanner-primary", "fingerprint": "edd8066db77b8707", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6ea1dbf05400974d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/detail-modal.tsx:244"}, "properties": {"repobilityId": "d19089244a06c74d", "scanner": "scanner-primary", "fingerprint": "6ea1dbf05400974d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c40e0fa27b1b960", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/bookings.tsx:172"}, "properties": {"repobilityId": "708e384f412e5644", "scanner": "scanner-primary", "fingerprint": "4c40e0fa27b1b960", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5446668663cf48c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/referrals.tsx:200"}, "properties": {"repobilityId": "a8e4be53c46ceae3", "scanner": "scanner-primary", "fingerprint": "5446668663cf48c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c68d7cfe18ffc1f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/overview.tsx:304"}, "properties": {"repobilityId": "1ef2946bac561a3c", "scanner": "scanner-primary", "fingerprint": "6c68d7cfe18ffc1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-87e2c6a7b61bb1f9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/respite/panes/requests.tsx:333"}, "properties": {"repobilityId": "5ad2fabd730c4e22", "scanner": "scanner-primary", "fingerprint": "87e2c6a7b61bb1f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d52cf5bc01efd1e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/control-room/evidence-pack-panel.tsx:503"}, "properties": {"repobilityId": "f4b19bbe2b2e58d6", "scanner": "scanner-primary", "fingerprint": "d52cf5bc01efd1e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-650f13921c3f2e63", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/recent-list.tsx:45"}, "properties": {"repobilityId": "0311b5c744fe8669", "scanner": "scanner-primary", "fingerprint": "650f13921c3f2e63", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d9b89c5808fd2af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/upcoming-list.tsx:58"}, "properties": {"repobilityId": "05b3311149c39ca4", "scanner": "scanner-primary", "fingerprint": "7d9b89c5808fd2af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4baa7b0cf3fa109f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/shift-detail-sheet.tsx:99"}, "properties": {"repobilityId": "64c722706964fd63", "scanner": "scanner-primary", "fingerprint": "4baa7b0cf3fa109f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-07c2410f1316a679", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/roster/today-timeline.tsx:64"}, "properties": {"repobilityId": "14484fed059de4e6", "scanner": "scanner-primary", "fingerprint": "07c2410f1316a679", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0bbbbb9cfe047dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/reassign-dialog.tsx:335"}, "properties": {"repobilityId": "f718296ac7559739", "scanner": "scanner-primary", "fingerprint": "a0bbbbb9cfe047dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-981add86fac1eeb3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/signal-rail.tsx:168"}, "properties": {"repobilityId": "5f869dc406d46e47", "scanner": "scanner-primary", "fingerprint": "981add86fac1eeb3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d5456ea7988fc3af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/coverage-pane.tsx:182"}, "properties": {"repobilityId": "2bc9f5657d9972b5", "scanner": "scanner-primary", "fingerprint": "d5456ea7988fc3af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-21d760e7eb573201", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/open-shifts-pane.tsx:161"}, "properties": {"repobilityId": "5dbc3de2d03edcf8", "scanner": "scanner-primary", "fingerprint": "21d760e7eb573201", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6aeba5f1fe1a5890", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/shift-context-menu.tsx:86"}, "properties": {"repobilityId": "f741e5df861a533e", "scanner": "scanner-primary", "fingerprint": "6aeba5f1fe1a5890", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ca971643f5021afd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/entity-filter.tsx:88"}, "properties": {"repobilityId": "ea732e7e82b13435", "scanner": "scanner-primary", "fingerprint": "ca971643f5021afd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eebba004db4117de", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/day-detail-dialog.tsx:277"}, "properties": {"repobilityId": "e4e10a9d04029f41", "scanner": "scanner-primary", "fingerprint": "eebba004db4117de", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40fb492e5531cc69", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/availability-pane.tsx:307"}, "properties": {"repobilityId": "cb8e7ece56e14707", "scanner": "scanner-primary", "fingerprint": "40fb492e5531cc69", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1528ac72acad22d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/donut.tsx:150"}, "properties": {"repobilityId": "16e821ad7b51b155", "scanner": "scanner-primary", "fingerprint": "c1528ac72acad22d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-302e55605d1c7bf6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/calendar-pane.tsx:323"}, "properties": {"repobilityId": "c8efa0bbd1422234", "scanner": "scanner-primary", "fingerprint": "302e55605d1c7bf6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6005214b17c4734f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/analytics-pane.tsx:307"}, "properties": {"repobilityId": "0a885376319a9cf5", "scanner": "scanner-primary", "fingerprint": "6005214b17c4734f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-579e291cee723445", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/series-dialogs.tsx:248"}, "properties": {"repobilityId": "1b34e4a969f5b46f", "scanner": "scanner-primary", "fingerprint": "579e291cee723445", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-514a72a55c8f5f2b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/site-filter.tsx:95"}, "properties": {"repobilityId": "de65fc76108704c9", "scanner": "scanner-primary", "fingerprint": "514a72a55c8f5f2b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-09d7b870677c5224", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/multi-entity-filter.tsx:114"}, "properties": {"repobilityId": "c7afb42b6f7f620e", "scanner": "scanner-primary", "fingerprint": "09d7b870677c5224", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec88f67d6a50486f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/capacity-heatmap-pane.tsx:139"}, "properties": {"repobilityId": "6dd5b2873eda6626", "scanner": "scanner-primary", "fingerprint": "ec88f67d6a50486f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd71f8fb65e9d685", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/templates-pane.tsx:183"}, "properties": {"repobilityId": "8dc8ae9707530342", "scanner": "scanner-primary", "fingerprint": "cd71f8fb65e9d685", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96c6fef1548348c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/template-dialogs.tsx:514"}, "properties": {"repobilityId": "42e916228e2b52ad", "scanner": "scanner-primary", "fingerprint": "96c6fef1548348c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a726d1c040e332c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/time-off-pane.tsx:112"}, "properties": {"repobilityId": "3a78a3e2b2a0a85b", "scanner": "scanner-primary", "fingerprint": "a726d1c040e332c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11d6c402015ce701", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/week-grid-pane.tsx:906"}, "properties": {"repobilityId": "64395d2f6f69772b", "scanner": "scanner-primary", "fingerprint": "11d6c402015ce701", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5df2f7b2ace7e316", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/series-pane.tsx:135"}, "properties": {"repobilityId": "20da3e202d68f5c3", "scanner": "scanner-primary", "fingerprint": "5df2f7b2ace7e316", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-962dc84a11edf461", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/conflict-queue/conflict-queue-list.tsx:61"}, "properties": {"repobilityId": "307c55d310470107", "scanner": "scanner-primary", "fingerprint": "962dc84a11edf461", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-429064b9b412520a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/rostering/conflict-queue/shift-summary-card.tsx:33"}, "properties": {"repobilityId": "8c0bf20c1d2cb8fb", "scanner": "scanner-primary", "fingerprint": "429064b9b412520a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-20500de0a6f01eda", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/shifts-bar-chart.tsx:116"}, "properties": {"repobilityId": "9fab270af629e7d9", "scanner": "scanner-primary", "fingerprint": "20500de0a6f01eda", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67cb978c14a3987d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/context-menu.tsx:189"}, "properties": {"repobilityId": "6505b729d5edb956", "scanner": "scanner-primary", "fingerprint": "67cb978c14a3987d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82e03d30a79b0601", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/hover-popover.tsx:152"}, "properties": {"repobilityId": "69b1f2b0c35e8b29", "scanner": "scanner-primary", "fingerprint": "82e03d30a79b0601", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b33bffeeb2d7e2c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/shift-timeline.tsx:92"}, "properties": {"repobilityId": "679e828337209673", "scanner": "scanner-primary", "fingerprint": "b33bffeeb2d7e2c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3043fcf91de3da21", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/activity-feed.tsx:249"}, "properties": {"repobilityId": "fab2aa226bc4a805", "scanner": "scanner-primary", "fingerprint": "3043fcf91de3da21", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-79d4e7cf5eb16c98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/operations/dashboard/needs-attention.tsx:87"}, "properties": {"repobilityId": "f99f1afaac3c4107", "scanner": "scanner-primary", "fingerprint": "79d4e7cf5eb16c98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a589f1a42c4f4438", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/template-builder.tsx:346"}, "properties": {"repobilityId": "02ba9bd8ed5d44da", "scanner": "scanner-primary", "fingerprint": "a589f1a42c4f4438", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c6b9f42ee9deb150", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/charts.tsx:207"}, "properties": {"repobilityId": "d8ec266d53db63cc", "scanner": "scanner-primary", "fingerprint": "c6b9f42ee9deb150", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d821471810dac95", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/run-cards.tsx:41"}, "properties": {"repobilityId": "249f8c6c7a847736", "scanner": "scanner-primary", "fingerprint": "6d821471810dac95", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3a49be3dd6dcef2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/context-menu.tsx:146"}, "properties": {"repobilityId": "8d086caa0f59eaeb", "scanner": "scanner-primary", "fingerprint": "c3a49be3dd6dcef2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3169827f99396dad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/primitives.tsx:194"}, "properties": {"repobilityId": "b33c57a3ab21bfa0", "scanner": "scanner-primary", "fingerprint": "3169827f99396dad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e37b192e1973359", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/hero-footer.tsx:184"}, "properties": {"repobilityId": "0dbff01c1fb78292", "scanner": "scanner-primary", "fingerprint": "5e37b192e1973359", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-137e910684837870", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/reports.tsx:147"}, "properties": {"repobilityId": "4a24e7d50a6e5b78", "scanner": "scanner-primary", "fingerprint": "137e910684837870", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4688401e0bdbbb27", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/schedule.tsx:83"}, "properties": {"repobilityId": "57fb493e98e7e22d", "scanner": "scanner-primary", "fingerprint": "4688401e0bdbbb27", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26bbad8772e94d00", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/overview.tsx:171"}, "properties": {"repobilityId": "2aa75c5e3d46763f", "scanner": "scanner-primary", "fingerprint": "26bbad8772e94d00", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94ad039df69a6a4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/assignments.tsx:66"}, "properties": {"repobilityId": "db1fdfe78ced7504", "scanner": "scanner-primary", "fingerprint": "94ad039df69a6a4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3783d86fd1dbed2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/checklists/panes/library.tsx:136"}, "properties": {"repobilityId": "d1a99a5794188ad2", "scanner": "scanner-primary", "fingerprint": "3783d86fd1dbed2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-72ef05058ef39d3c", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 resources/js/components/checklists/panes/library.tsx:219"}, "properties": {"repobilityId": "1c42cef5d501d978", "scanner": "scanner-primary", "fingerprint": "72ef05058ef39d3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-53fc85d60d11c8f5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/ui/tabs.tsx:166"}, "properties": {"repobilityId": "dd2b9fdf1de6ec4f", "scanner": "scanner-primary", "fingerprint": "53fc85d60d11c8f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7bb3074527b9376", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/analytics.tsx:654"}, "properties": {"repobilityId": "a8f04578959db533", "scanner": "scanner-primary", "fingerprint": "a7bb3074527b9376", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c431737905591dee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/timeline.tsx:148"}, "properties": {"repobilityId": "9dbe51441ac89813", "scanner": "scanner-primary", "fingerprint": "c431737905591dee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-07c01d544bb5b957", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/circular-gauge.tsx:109"}, "properties": {"repobilityId": "a9ed8d3b1d48d3e0", "scanner": "scanner-primary", "fingerprint": "07c01d544bb5b957", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49a99421e4034314", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/dashboard/activity-timeline.tsx:156"}, "properties": {"repobilityId": "c73f9293cb49c00a", "scanner": "scanner-primary", "fingerprint": "49a99421e4034314", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ce636bde8229756", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/stock-detail-dialog.tsx:72"}, "properties": {"repobilityId": "31b578920d71911f", "scanner": "scanner-primary", "fingerprint": "5ce636bde8229756", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb62b6ae6b4cd901", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/medication-event-drawer.tsx:218"}, "properties": {"repobilityId": "70da2bfef6c376ba", "scanner": "scanner-primary", "fingerprint": "fb62b6ae6b4cd901", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-396a82f3b0469600", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/rounds/round-board.tsx:73"}, "properties": {"repobilityId": "01626e09f0a9c73e", "scanner": "scanner-primary", "fingerprint": "396a82f3b0469600", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71bc236d12314e7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/emar/rounds/round-activity.tsx:128"}, "properties": {"repobilityId": "781a8e49377f97dc", "scanner": "scanner-primary", "fingerprint": "71bc236d12314e7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a41352e9c616dea6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/recruitment/candidate-card.tsx:37"}, "properties": {"repobilityId": "ecc98a88d635c950", "scanner": "scanner-primary", "fingerprint": "a41352e9c616dea6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc341098c12db5db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/resident-tracking/resident-map.tsx:119"}, "properties": {"repobilityId": "c0db57afe478ca61", "scanner": "scanner-primary", "fingerprint": "cc341098c12db5db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d6b657f55bd5595", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/resident-tracking/resident-sidebar.tsx:154"}, "properties": {"repobilityId": "b7fd6ada43be7b0c", "scanner": "scanner-primary", "fingerprint": "2d6b657f55bd5595", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-baa9f10c6fa739e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/health-safety/event-timeline.tsx:147"}, "properties": {"repobilityId": "7ab7c63ccda73919", "scanner": "scanner-primary", "fingerprint": "baa9f10c6fa739e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62f621c4cf92dc13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/page/stat-tile.tsx:220"}, "properties": {"repobilityId": "b492944d697dedf8", "scanner": "scanner-primary", "fingerprint": "62f621c4cf92dc13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c0deade7e650177", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/page/page-hero-avatar-stack.tsx:167"}, "properties": {"repobilityId": "4fee5d54f80f3bdb", "scanner": "scanner-primary", "fingerprint": "1c0deade7e650177", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c00278e4ca95ac88", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/people-picker.tsx:89"}, "properties": {"repobilityId": "f4a4da8cb18e1e14", "scanner": "scanner-primary", "fingerprint": "c00278e4ca95ac88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fcfe5ba497104cf3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/offboarding-wizard-dialog.tsx:298"}, "properties": {"repobilityId": "ed9ae1d5781ccf0e", "scanner": "scanner-primary", "fingerprint": "fcfe5ba497104cf3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7602e68c532f2ec5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/onboarding-wizard-dialog.tsx:371"}, "properties": {"repobilityId": "7675379e1ccf0eb8", "scanner": "scanner-primary", "fingerprint": "7602e68c532f2ec5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-000077d27fed1943", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/departments-pane.tsx:188"}, "properties": {"repobilityId": "24bc6f3c7fec77cf", "scanner": "scanner-primary", "fingerprint": "000077d27fed1943", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b466934e2db258d1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/hr/people/org-chart-pane.tsx:210"}, "properties": {"repobilityId": "beb1886852db5da5", "scanner": "scanner-primary", "fingerprint": "b466934e2db258d1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44d0393271348eac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/add-client-dialog.tsx:1003"}, "properties": {"repobilityId": "31084b77a270d513", "scanner": "scanner-primary", "fingerprint": "44d0393271348eac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4ce961ba5e45e76e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/family-chat.tsx:152"}, "properties": {"repobilityId": "5fe2c177f4a6d6b1", "scanner": "scanner-primary", "fingerprint": "4ce961ba5e45e76e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-228d20280cb19de1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/workflow-wizard.tsx:628"}, "properties": {"repobilityId": "d4c0d7924a3da748", "scanner": "scanner-primary", "fingerprint": "228d20280cb19de1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3e6189456dbc662", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/overview-grid.tsx:70"}, "properties": {"repobilityId": "887433d2b57422ab", "scanner": "scanner-primary", "fingerprint": "c3e6189456dbc662", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3df4439c6070f6d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/care-plan-dialog.tsx:928"}, "properties": {"repobilityId": "3afc1ec1c0d828a3", "scanner": "scanner-primary", "fingerprint": "3df4439c6070f6d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e3913b006002a55f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/goal-dialog.tsx:829"}, "properties": {"repobilityId": "68fdd4b5d1147515", "scanner": "scanner-primary", "fingerprint": "e3913b006002a55f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b4b8e68b0b3a5c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/hero.tsx:163"}, "properties": {"repobilityId": "c737dc60e9709581", "scanner": "scanner-primary", "fingerprint": "3b4b8e68b0b3a5c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-63dab78007426088", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/ui.tsx:68"}, "properties": {"repobilityId": "2618bdb03a7a1be5", "scanner": "scanner-primary", "fingerprint": "63dab78007426088", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eef967bfc8c4676d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/clients/profile/tabs/behaviour-abc.tsx:203"}, "properties": {"repobilityId": "4bf6e3f5e86f236f", "scanner": "scanner-primary", "fingerprint": "eef967bfc8c4676d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe8fe33047b1bbd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/meds/wizard-shell.tsx:139"}, "properties": {"repobilityId": "81a6f7d84ac2219a", "scanner": "scanner-primary", "fingerprint": "fe8fe33047b1bbd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dccb137dfa382802", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/workstream/my-day-list.tsx:81"}, "properties": {"repobilityId": "0d83a22c47980a2b", "scanner": "scanner-primary", "fingerprint": "dccb137dfa382802", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d276723792b71e9a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/wizard/shell.tsx:140"}, "properties": {"repobilityId": "3e76552f20740891", "scanner": "scanner-primary", "fingerprint": "d276723792b71e9a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f197db28cecec6e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/job-board/job-card.tsx:255"}, "properties": {"repobilityId": "935f6523b2ac183b", "scanner": "scanner-primary", "fingerprint": "f197db28cecec6e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76f620c13b5d5d0d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/medications/PrnHistoryPanel.tsx:89"}, "properties": {"repobilityId": "921db19e2783e00c", "scanner": "scanner-primary", "fingerprint": "76f620c13b5d5d0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5aebc1a259ac3430", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/medications/DashboardWidgets.tsx:109"}, "properties": {"repobilityId": "95473ca66e63a3e0", "scanner": "scanner-primary", "fingerprint": "5aebc1a259ac3430", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1dfbaf9599c35ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/client-profile/recent-clients-strip.tsx:74"}, "properties": {"repobilityId": "18a4c678a42b69d4", "scanner": "scanner-primary", "fingerprint": "c1dfbaf9599c35ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d55651465ef131b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/sites/add-site-dialog.tsx:1427"}, "properties": {"repobilityId": "f76c740e407e6e47", "scanner": "scanner-primary", "fingerprint": "3d55651465ef131b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-558dab5a9cef0a0a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheets/create-timesheet-dialog.tsx:219"}, "properties": {"repobilityId": "1b1e00f823282c80", "scanner": "scanner-primary", "fingerprint": "558dab5a9cef0a0a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62658eff4daed874", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/components/timesheets/view-timesheet-dialog.tsx:143"}, "properties": {"repobilityId": "d8608e44b0911205", "scanner": "scanner-primary", "fingerprint": "62658eff4daed874", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-508a7ad0122fa63d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-calendar.tsx:237"}, "properties": {"repobilityId": "9f7f6baff7e16a9c", "scanner": "scanner-primary", "fingerprint": "508a7ad0122fa63d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9d4f4ae5d3076381", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/my-calendar.tsx:436"}, "properties": {"repobilityId": "3d20d2525bf768a5", "scanner": "scanner-primary", "fingerprint": "9d4f4ae5d3076381", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8d002ab48d2010e7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/templates.tsx:474"}, "properties": {"repobilityId": "13d7dee9794862d3", "scanner": "scanner-primary", "fingerprint": "8d002ab48d2010e7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a9b959d2a23d56c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/api.tsx:408"}, "properties": {"repobilityId": "293eee129c5fbd31", "scanner": "scanner-primary", "fingerprint": "a9b959d2a23d56c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-567263a59d42ee4b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/profile.tsx:295"}, "properties": {"repobilityId": "75b70e2c22d9b079", "scanner": "scanner-primary", "fingerprint": "567263a59d42ee4b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4464f2faf80ce3cd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/sso-config.tsx:742"}, "properties": {"repobilityId": "523553e59cae1cf3", "scanner": "scanner-primary", "fingerprint": "4464f2faf80ce3cd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e9d688a638542509", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/notification-escalations.tsx:213"}, "properties": {"repobilityId": "db2256e09f2cae85", "scanner": "scanner-primary", "fingerprint": "e9d688a638542509", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56f29fcec9bb8bb1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/two-factor.tsx:100"}, "properties": {"repobilityId": "edd2b5e4ebf0b914", "scanner": "scanner-primary", "fingerprint": "56f29fcec9bb8bb1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8ea0e2493bceb58f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/audit-logs.tsx:626"}, "properties": {"repobilityId": "88bdfcbf1db88b7d", "scanner": "scanner-primary", "fingerprint": "8ea0e2493bceb58f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c2c539e4d485202a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/settings/sso-groups.tsx:290"}, "properties": {"repobilityId": "90b2c7cde3293595", "scanner": "scanner-primary", "fingerprint": "c2c539e4d485202a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1824d485fd306dcb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/settings/users/index.tsx:622"}, "properties": {"repobilityId": "52d32ecc33cad63e", "scanner": "scanner-primary", "fingerprint": "1824d485fd306dcb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bd30e715900442e7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/index.tsx:180"}, "properties": {"repobilityId": "0ed4c17d8862b853", "scanner": "scanner-primary", "fingerprint": "bd30e715900442e7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-db4b1b76c62571bb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/with-concerns.tsx:82"}, "properties": {"repobilityId": "a9e96c861a9f8390", "scanner": "scanner-primary", "fingerprint": "db4b1b76c62571bb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-003e560ae769e03a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/daily-notes/with-incidents.tsx:82"}, "properties": {"repobilityId": "dbbb45ef8bd0403e", "scanner": "scanner-primary", "fingerprint": "003e560ae769e03a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6a6e2261a0ab035e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/procedure-runs/index.tsx:140"}, "properties": {"repobilityId": "4c1eacc18990917c", "scanner": "scanner-primary", "fingerprint": "6a6e2261a0ab035e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bd37c081f9de9cbe", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/procedure-runs/overdue.tsx:78"}, "properties": {"repobilityId": "a54741d8b2b9542f", "scanner": "scanner-primary", "fingerprint": "bd37c081f9de9cbe", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e665e1729282f6b3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/requests/index.tsx:150"}, "properties": {"repobilityId": "62b199e8975c95fc", "scanner": "scanner-primary", "fingerprint": "e665e1729282f6b3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3cc552d7052c55ac", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/communication-logs/index.tsx:147"}, "properties": {"repobilityId": "05068617869e43ae", "scanner": "scanner-primary", "fingerprint": "3cc552d7052c55ac", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-55b7387b82c09a24", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/resources/index.tsx:167"}, "properties": {"repobilityId": "85b4674c82e10707", "scanner": "scanner-primary", "fingerprint": "55b7387b82c09a24", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-728b6264b0dfaaf5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/index.tsx:145"}, "properties": {"repobilityId": "e809036292a321cf", "scanner": "scanner-primary", "fingerprint": "728b6264b0dfaaf5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-163f8b0173f92697", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/needing-acknowledgment.tsx:86"}, "properties": {"repobilityId": "b4c34c3784f904c6", "scanner": "scanner-primary", "fingerprint": "163f8b0173f92697", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c849e3cf7b40c509", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/risk-plan-activations/for-client.tsx:89"}, "properties": {"repobilityId": "53efb12a6284897f", "scanner": "scanner-primary", "fingerprint": "c849e3cf7b40c509", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-62309d46ba977146", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/awaiting-approval.tsx:102"}, "properties": {"repobilityId": "b70bb7ac4a4306e2", "scanner": "scanner-primary", "fingerprint": "62309d46ba977146", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2075a4d3f2db32d5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/index.tsx:155"}, "properties": {"repobilityId": "cd9938b9bd1d3f70", "scanner": "scanner-primary", "fingerprint": "2075a4d3f2db32d5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f2930eb88d060a11", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/tasks/overdue.tsx:83"}, "properties": {"repobilityId": "d45bbcc1c9338c91", "scanner": "scanner-primary", "fingerprint": "f2930eb88d060a11", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e4385b3f1f6a6b85", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/handover-notes/unacknowledged.tsx:78"}, "properties": {"repobilityId": "4fb38f23f4d44999", "scanner": "scanner-primary", "fingerprint": "e4385b3f1f6a6b85", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-14c5912759f40d63", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/handover-notes/index.tsx:123"}, "properties": {"repobilityId": "c4eeba34a5ba983d", "scanner": "scanner-primary", "fingerprint": "14c5912759f40d63", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e456412c098a9529", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/respite/evidence-packs/index.tsx:133"}, "properties": {"repobilityId": "8ca20da36abae435", "scanner": "scanner-primary", "fingerprint": "e456412c098a9529", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-017fe68521daeaba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/settings.tsx:1785"}, "properties": {"repobilityId": "914451c14f58e144", "scanner": "scanner-primary", "fingerprint": "017fe68521daeaba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eae86e170dad5898", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/show.tsx:1029"}, "properties": {"repobilityId": "297a05d2b6498932", "scanner": "scanner-primary", "fingerprint": "eae86e170dad5898", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e3f5d0af48924f09", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/reports.tsx:359"}, "properties": {"repobilityId": "bcae1332457d18f5", "scanner": "scanner-primary", "fingerprint": "e3f5d0af48924f09", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-143fb39f34c3cdec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/map.tsx:810"}, "properties": {"repobilityId": "1697001fb1cbe595", "scanner": "scanner-primary", "fingerprint": "143fb39f34c3cdec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3659ec79576769cd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/map.tsx:500"}, "properties": {"repobilityId": "2a60849e38b22b0b", "scanner": "scanner-primary", "fingerprint": "3659ec79576769cd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b71ff32acf0f8dfd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/index.tsx:253"}, "properties": {"repobilityId": "882fedd00044e0b4", "scanner": "scanner-primary", "fingerprint": "b71ff32acf0f8dfd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d835e73d67e3edb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/escalations.tsx:398"}, "properties": {"repobilityId": "c30be1c67a99b3d6", "scanner": "scanner-primary", "fingerprint": "7d835e73d67e3edb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2426d491aad38f6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/my-tasks.tsx:300"}, "properties": {"repobilityId": "acbfadf450c6ec6a", "scanner": "scanner-primary", "fingerprint": "a2426d491aad38f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02d8932d5db80a98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/messaging.tsx:481"}, "properties": {"repobilityId": "930684bd9f9eec21", "scanner": "scanner-primary", "fingerprint": "02d8932d5db80a98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a0289a111080659", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/broadcast.tsx:474"}, "properties": {"repobilityId": "edf8ffd08f98258f", "scanner": "scanner-primary", "fingerprint": "5a0289a111080659", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f05f718238eef338", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/broadcast.tsx:553"}, "properties": {"repobilityId": "b52cb7291bb92aa9", "scanner": "scanner-primary", "fingerprint": "f05f718238eef338", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-72dc1813cfe6eb15", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/alerts/index.tsx:859"}, "properties": {"repobilityId": "78a42a5e0c6ad07e", "scanner": "scanner-primary", "fingerprint": "72dc1813cfe6eb15", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e249caf189091011", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/sla/breaches.tsx:337"}, "properties": {"repobilityId": "cabe1eb7b72c6256", "scanner": "scanner-primary", "fingerprint": "e249caf189091011", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ec2621926e7d91eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/devices/show.tsx:411"}, "properties": {"repobilityId": "22c00cda509661b9", "scanner": "scanner-primary", "fingerprint": "ec2621926e7d91eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-031bf43f12eb3424", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/control-room/devices/index.tsx:164"}, "properties": {"repobilityId": "4f2b03849de09a64", "scanner": "scanner-primary", "fingerprint": "031bf43f12eb3424", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2acb355521294651", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/control-room/devices/index.tsx:425"}, "properties": {"repobilityId": "c277f08a83564416", "scanner": "scanner-primary", "fingerprint": "2acb355521294651", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-508934bfa8dbd12f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/notifications/index.tsx:717"}, "properties": {"repobilityId": "a10fa5ca92394408", "scanner": "scanner-primary", "fingerprint": "508934bfa8dbd12f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a7b9531a5987d5ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/note-rail.tsx:162"}, "properties": {"repobilityId": "4518dccbfe13898a", "scanner": "scanner-primary", "fingerprint": "a7b9531a5987d5ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-55a2574b72b14c27", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/list-view.tsx:54"}, "properties": {"repobilityId": "f46168eeb4846999", "scanner": "scanner-primary", "fingerprint": "55a2574b72b14c27", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afb6e3397f9f411e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/cards-view.tsx:194"}, "properties": {"repobilityId": "bfdff23309b783e7", "scanner": "scanner-primary", "fingerprint": "afb6e3397f9f411e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61fcf1c551814a65", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shift-notes/components/note-wizard.tsx:270"}, "properties": {"repobilityId": "8a409a9f039fa22b", "scanner": "scanner-primary", "fingerprint": "61fcf1c551814a65", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1b1fe3da965d5fa", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/notifications/Index.tsx:166"}, "properties": {"repobilityId": "43b1e427d00a8e8e", "scanner": "scanner-primary", "fingerprint": "a1b1fe3da965d5fa", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c2ccae62836636e3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 resources/js/pages/operations/rostering/conflicts.tsx:450"}, "properties": {"repobilityId": "f2dd3d035643290c", "scanner": "scanner-primary", "fingerprint": "c2ccae62836636e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6659345a7e0f202b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/board-view.tsx:68"}, "properties": {"repobilityId": "a82f0f34ce51bcda", "scanner": "scanner-primary", "fingerprint": "6659345a7e0f202b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-758a4e109de4ce8f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/list-view.tsx:73"}, "properties": {"repobilityId": "ecb4c9807612218a", "scanner": "scanner-primary", "fingerprint": "758a4e109de4ce8f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a6caa536a403d75", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/cards-view.tsx:89"}, "properties": {"repobilityId": "231c2eb9aa8960b5", "scanner": "scanner-primary", "fingerprint": "3a6caa536a403d75", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5bb9dc9f7c90d555", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-detail-dialog.tsx:128"}, "properties": {"repobilityId": "a00220697107c919", "scanner": "scanner-primary", "fingerprint": "5bb9dc9f7c90d555", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c05077382a32c296", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-rail.tsx:92"}, "properties": {"repobilityId": "fd0470ab8f916d83", "scanner": "scanner-primary", "fingerprint": "c05077382a32c296", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c49ab76fc340402", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/handovers/components/handover-wizard.tsx:504"}, "properties": {"repobilityId": "982c3453edc1c649", "scanner": "scanner-primary", "fingerprint": "2c49ab76fc340402", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-79e9ad5a6eaea058", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/note-templates/Index.tsx:160"}, "properties": {"repobilityId": "e8dd1f459c274f06", "scanner": "scanner-primary", "fingerprint": "79e9ad5a6eaea058", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ba14aa5ea2f8a3a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/activity/Index.tsx:132"}, "properties": {"repobilityId": "030b28570108e84f", "scanner": "scanner-primary", "fingerprint": "ba14aa5ea2f8a3a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-188969eaee3f838d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/mileage/Index.tsx:203"}, "properties": {"repobilityId": "b02354e17bb49be2", "scanner": "scanner-primary", "fingerprint": "188969eaee3f838d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-84f331a04db47466", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/geofences/Index.tsx:145"}, "properties": {"repobilityId": "022ae78a70dabbbb", "scanner": "scanner-primary", "fingerprint": "84f331a04db47466", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1eaea6e139d2c6fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/show.tsx:3059"}, "properties": {"repobilityId": "9927ce26c526f2d1", "scanner": "scanner-primary", "fingerprint": "1eaea6e139d2c6fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cae8c64a99858d9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shift-calendar-view.tsx:181"}, "properties": {"repobilityId": "ea809c5413eaaec4", "scanner": "scanner-primary", "fingerprint": "cae8c64a99858d9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edddc0aad58f8adb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shift-list-view.tsx:252"}, "properties": {"repobilityId": "815aebef7c2ce3ce", "scanner": "scanner-primary", "fingerprint": "edddc0aad58f8adb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74382e30817d07d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:825"}, "properties": {"repobilityId": "30a055d8f8af09ff", "scanner": "scanner-primary", "fingerprint": "74382e30817d07d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14186113d1ec0514", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/shifts-hero.tsx:419"}, "properties": {"repobilityId": "11380e7c16693b10", "scanner": "scanner-primary", "fingerprint": "14186113d1ec0514", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9611acc5f9395df7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/shifts/components/donut-card.tsx:171"}, "properties": {"repobilityId": "a079f274db1fc028", "scanner": "scanner-primary", "fingerprint": "9611acc5f9395df7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8db50cee0c8ebe1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/shifts/series/Index.tsx:254"}, "properties": {"repobilityId": "e3b20c7a5bdeacb4", "scanner": "scanner-primary", "fingerprint": "b8db50cee0c8ebe1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-eeaae6b215e5447b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/messages/Index.tsx:897"}, "properties": {"repobilityId": "4e8a77ad23dd1f28", "scanner": "scanner-primary", "fingerprint": "eeaae6b215e5447b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b9e6d4ba6f5171cf", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/onboarding/Index.tsx:228"}, "properties": {"repobilityId": "d966ba2fe67be5fb", "scanner": "scanner-primary", "fingerprint": "b9e6d4ba6f5171cf", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2ff9b7918b699d19", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/calendar.tsx:198"}, "properties": {"repobilityId": "40918882be4d8a10", "scanner": "scanner-primary", "fingerprint": "2ff9b7918b699d19", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fee9fe2db6aa2338", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/calendar.tsx:373"}, "properties": {"repobilityId": "c4484de838680485", "scanner": "scanner-primary", "fingerprint": "fee9fe2db6aa2338", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bd6a61fc8be8dc3c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/show.tsx:4706"}, "properties": {"repobilityId": "45e942e0bfa4771d", "scanner": "scanner-primary", "fingerprint": "bd6a61fc8be8dc3c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-366bf16852788336", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/visit-requests.tsx:361"}, "properties": {"repobilityId": "bff02682f61c8fa1", "scanner": "scanner-primary", "fingerprint": "366bf16852788336", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8894e4dc85e38d20", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/index.tsx:370"}, "properties": {"repobilityId": "272a675605422a4a", "scanner": "scanner-primary", "fingerprint": "8894e4dc85e38d20", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e38b23f7039a067e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/care.tsx:225"}, "properties": {"repobilityId": "da9a582a22a12378", "scanner": "scanner-primary", "fingerprint": "e38b23f7039a067e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-638680200ea92052", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/care-support-plan.tsx:576"}, "properties": {"repobilityId": "0fb5af7e96ca4cac", "scanner": "scanner-primary", "fingerprint": "638680200ea92052", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b7d5e7da8a9d8ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/workers.tsx:192"}, "properties": {"repobilityId": "a3399353a619ee97", "scanner": "scanner-primary", "fingerprint": "9b7d5e7da8a9d8ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e902da81df1b86b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/goals-path.tsx:117"}, "properties": {"repobilityId": "1e60571c59ba6d5a", "scanner": "scanner-primary", "fingerprint": "e902da81df1b86b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-41c8dfba9432668b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:1495"}, "properties": {"repobilityId": "8b784b82aa3235a0", "scanner": "scanner-primary", "fingerprint": "41c8dfba9432668b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abda5716d1010bfd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2796"}, "properties": {"repobilityId": "cdf4441fb873f59c", "scanner": "scanner-primary", "fingerprint": "abda5716d1010bfd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-46d9b254116cc3db", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/client-funds/Index.tsx:188"}, "properties": {"repobilityId": "693a2cc9fc39afa3", "scanner": "scanner-primary", "fingerprint": "46d9b254116cc3db", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-786c0085ba9f0d2a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/client-funds/Show.tsx:112"}, "properties": {"repobilityId": "81c57278549bde57", "scanner": "scanner-primary", "fingerprint": "786c0085ba9f0d2a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e120df41996e7411", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/evv/Index.tsx:219"}, "properties": {"repobilityId": "7ea027ededb2ae04", "scanner": "scanner-primary", "fingerprint": "e120df41996e7411", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-17da1ef7804de81a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/job-board/Index.tsx:352"}, "properties": {"repobilityId": "ed81391d7792360a", "scanner": "scanner-primary", "fingerprint": "17da1ef7804de81a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-612153aee2a91ea1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/family-portal/Index.tsx:157"}, "properties": {"repobilityId": "6ee3b49c7b94271c", "scanner": "scanner-primary", "fingerprint": "612153aee2a91ea1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fb641578c8c112a7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/service-agreements/Index.tsx:279"}, "properties": {"repobilityId": "8fc8f4765bef77d6", "scanner": "scanner-primary", "fingerprint": "fb641578c8c112a7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0b6fdcb2534f6b98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/funding/Index.tsx:154"}, "properties": {"repobilityId": "4fa2a291d94495de", "scanner": "scanner-primary", "fingerprint": "0b6fdcb2534f6b98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a764f287b4803d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/timesheets/index.tsx:167"}, "properties": {"repobilityId": "9357c58d9608876f", "scanner": "scanner-primary", "fingerprint": "0a764f287b4803d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-678affaeeb25f31a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/operations/timesheets/payroll-adjustments.tsx:99"}, "properties": {"repobilityId": "4d35f3f41171c603", "scanner": "scanner-primary", "fingerprint": "678affaeeb25f31a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1afd2eedf74e2094", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/timesheets/payroll-adjustments.tsx:147"}, "properties": {"repobilityId": "51b256f00dbccb92", "scanner": "scanner-primary", "fingerprint": "1afd2eedf74e2094", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fe5312603c72689e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/qualifications/Index.tsx:137"}, "properties": {"repobilityId": "55c601fad2528c9a", "scanner": "scanner-primary", "fingerprint": "fe5312603c72689e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-27ee6e526f94c5d7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/forms/Index.tsx:176"}, "properties": {"repobilityId": "c34d91958fe6aa71", "scanner": "scanner-primary", "fingerprint": "27ee6e526f94c5d7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-514c8259fe7bdcb3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/operations/calendar-sync/Index.tsx:153"}, "properties": {"repobilityId": "d908f0593fa9ae36", "scanner": "scanner-primary", "fingerprint": "514c8259fe7bdcb3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ef44d0ba7171a9b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/dashboard.tsx:703"}, "properties": {"repobilityId": "ac6df39a0faf6828", "scanner": "scanner-primary", "fingerprint": "ef44d0ba7171a9b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cabf972219c949b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/map.tsx:286"}, "properties": {"repobilityId": "e062b3f72426a096", "scanner": "scanner-primary", "fingerprint": "cabf972219c949b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1a0ee3ff27894d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/daily-check.tsx:169"}, "properties": {"repobilityId": "7a836299ba9822ad", "scanner": "scanner-primary", "fingerprint": "a1a0ee3ff27894d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2ccd09526878567", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/bookings/index.tsx:125"}, "properties": {"repobilityId": "f777970164b33b17", "scanner": "scanner-primary", "fingerprint": "e2ccd09526878567", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39e8785b52375347", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/bookings/index.tsx:278"}, "properties": {"repobilityId": "910ffc59ef173eb4", "scanner": "scanner-primary", "fingerprint": "39e8785b52375347", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-abd91fcb8b9170ee", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/trips/index.tsx:543"}, "properties": {"repobilityId": "ef00fdeffaab5b9f", "scanner": "scanner-primary", "fingerprint": "abd91fcb8b9170ee", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ffbf06fd862bbefe", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/handovers/index.tsx:269"}, "properties": {"repobilityId": "1f323a020842f6b4", "scanner": "scanner-primary", "fingerprint": "ffbf06fd862bbefe", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9cfa353ac314763c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/transports/medications.tsx:783"}, "properties": {"repobilityId": "81c3472c0c03c25e", "scanner": "scanner-primary", "fingerprint": "9cfa353ac314763c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-dcc636e0f22be225", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/transports/index.tsx:446"}, "properties": {"repobilityId": "30898374052e02ec", "scanner": "scanner-primary", "fingerprint": "dcc636e0f22be225", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc43642ccdf515e7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/transports/index.tsx:495"}, "properties": {"repobilityId": "142b3357e3c6d42e", "scanner": "scanner-primary", "fingerprint": "cc43642ccdf515e7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2fa498133e4f6870", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/assets/index.tsx:280"}, "properties": {"repobilityId": "0d959b52d867e4ac", "scanner": "scanner-primary", "fingerprint": "2fa498133e4f6870", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b3412daa509215ef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/incidents/index.tsx:265"}, "properties": {"repobilityId": "b08f54215d46177f", "scanner": "scanner-primary", "fingerprint": "b3412daa509215ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7367fd30ee770ac4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/incidents/index.tsx:292"}, "properties": {"repobilityId": "2270500b5ec8a462", "scanner": "scanner-primary", "fingerprint": "7367fd30ee770ac4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-eb8686d4d421f851", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/inspections/show.tsx:273"}, "properties": {"repobilityId": "449b0502a65c7c7b", "scanner": "scanner-primary", "fingerprint": "eb8686d4d421f851", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcb9778b0d88b654", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/mileage/index.tsx:329"}, "properties": {"repobilityId": "24af5348ae19a349", "scanner": "scanner-primary", "fingerprint": "bcb9778b0d88b654", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2dd5d99af7f1e01", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/mileage/index.tsx:410"}, "properties": {"repobilityId": "653d42982425af77", "scanner": "scanner-primary", "fingerprint": "e2dd5d99af7f1e01", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c2dc1ae29fba3b18", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/outings/index.tsx:311"}, "properties": {"repobilityId": "80cfbe59f73f8a2d", "scanner": "scanner-primary", "fingerprint": "c2dc1ae29fba3b18", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-09984c46cf25277a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/geofences/index.tsx:299"}, "properties": {"repobilityId": "41c374c5b50f1de3", "scanner": "scanner-primary", "fingerprint": "09984c46cf25277a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-722f2d5b46ce015f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/alerts/index.tsx:768"}, "properties": {"repobilityId": "77758827fc65122d", "scanner": "scanner-primary", "fingerprint": "722f2d5b46ce015f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-eb443422dcbd2faa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/resident-tracking/index.tsx:391"}, "properties": {"repobilityId": "0645869f5295f811", "scanner": "scanner-primary", "fingerprint": "eb443422dcbd2faa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6561f17e569a07b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/resident-tracking/history.tsx:849"}, "properties": {"repobilityId": "c5f0439836095874", "scanner": "scanner-primary", "fingerprint": "6561f17e569a07b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-66ac7894cffc56d5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/drivers/index.tsx:511"}, "properties": {"repobilityId": "915320f362bb0fd6", "scanner": "scanner-primary", "fingerprint": "66ac7894cffc56d5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fb671cd292ecca29", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/maintenance/dashboard.tsx:425"}, "properties": {"repobilityId": "2b782a518283d08f", "scanner": "scanner-primary", "fingerprint": "fb671cd292ecca29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6bc44d95170aeb1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/maintenance/work-orders/index.tsx:563"}, "properties": {"repobilityId": "6c8a90369c4a447d", "scanner": "scanner-primary", "fingerprint": "e6bc44d95170aeb1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-569e5014e312e786", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/wandering/index.tsx:331"}, "properties": {"repobilityId": "c15e4703d4b36a3b", "scanner": "scanner-primary", "fingerprint": "569e5014e312e786", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9abd906137b95b88", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/fuel/index.tsx:776"}, "properties": {"repobilityId": "66566c8047832627", "scanner": "scanner-primary", "fingerprint": "9abd906137b95b88", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a078a1f6d6565754", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/vehicles/trips.tsx:528"}, "properties": {"repobilityId": "78e046254107dd55", "scanner": "scanner-primary", "fingerprint": "a078a1f6d6565754", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-37a9123c276fb593", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/vehicles/index.tsx:346"}, "properties": {"repobilityId": "5f752aed2833d984", "scanner": "scanner-primary", "fingerprint": "37a9123c276fb593", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-af4d224e002cd0b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-assets/devices/show.tsx:207"}, "properties": {"repobilityId": "8bd62fcdaede4e4d", "scanner": "scanner-primary", "fingerprint": "af4d224e002cd0b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2e77a7235a940a73", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/fleet-assets/devices/index.tsx:491"}, "properties": {"repobilityId": "589d42bcf729e62e", "scanner": "scanner-primary", "fingerprint": "2e77a7235a940a73", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0b618c682f845f3d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/Protocols.tsx:459"}, "properties": {"repobilityId": "c09a31fe333fe26e", "scanner": "scanner-primary", "fingerprint": "0b618c682f845f3d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-131c95dd81d4dedd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/Dashboard.tsx:96"}, "properties": {"repobilityId": "f1ed26145f35512f", "scanner": "scanner-primary", "fingerprint": "131c95dd81d4dedd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-644faee153b7d9f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/Events.tsx:430"}, "properties": {"repobilityId": "7eb73af749c705c5", "scanner": "scanner-primary", "fingerprint": "644faee153b7d9f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf4a99d81c06b2f8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/Events.tsx:493"}, "properties": {"repobilityId": "ec3f7c5a6de2b1a6", "scanner": "scanner-primary", "fingerprint": "bf4a99d81c06b2f8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7d5ee662b110b4ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-clinical/observations.tsx:361"}, "properties": {"repobilityId": "957e82e2dc4b7073", "scanner": "scanner-primary", "fingerprint": "7d5ee662b110b4ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01ed2954894070a9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-clinical/observations.tsx:419"}, "properties": {"repobilityId": "86bee71a71611f08", "scanner": "scanner-primary", "fingerprint": "01ed2954894070a9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bfa6da726a871ed7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/staff/index.tsx:64"}, "properties": {"repobilityId": "05353a218f9e085e", "scanner": "scanner-primary", "fingerprint": "bfa6da726a871ed7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9fc1256ab8b5ff74", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/CeoReports/Index.tsx:215"}, "properties": {"repobilityId": "66f899dd0b593c61", "scanner": "scanner-primary", "fingerprint": "9fc1256ab8b5ff74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3fe3d27425716221", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/CeoReports/_dialogs.tsx:165"}, "properties": {"repobilityId": "607741653ed4a989", "scanner": "scanner-primary", "fingerprint": "3fe3d27425716221", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b98436fa905580bd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Policies/Index.tsx:128"}, "properties": {"repobilityId": "57687857843e64cf", "scanner": "scanner-primary", "fingerprint": "b98436fa905580bd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2c31ede599504fa4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Policies/Show.tsx:107"}, "properties": {"repobilityId": "d6d4562bcdf8ed1f", "scanner": "scanner-primary", "fingerprint": "2c31ede599504fa4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e5736111cb9bc075", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Packs/_dialogs.tsx:128"}, "properties": {"repobilityId": "c2a66d5b3494b18b", "scanner": "scanner-primary", "fingerprint": "e5736111cb9bc075", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-108e341c5d0953e7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Meetings/Index.tsx:190"}, "properties": {"repobilityId": "c760d9df68f9a702", "scanner": "scanner-primary", "fingerprint": "108e341c5d0953e7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6d19ecb6ed21893f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Meetings/Calendar.tsx:344"}, "properties": {"repobilityId": "447be483df377d3d", "scanner": "scanner-primary", "fingerprint": "6d19ecb6ed21893f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b011885fa38aa258", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Meetings/Show.tsx:661"}, "properties": {"repobilityId": "81011d23d4da0d10", "scanner": "scanner-primary", "fingerprint": "b011885fa38aa258", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-31dd162c8eee2d77", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/Governance/Risks/Index.tsx:198"}, "properties": {"repobilityId": "4cea079a3374fae6", "scanner": "scanner-primary", "fingerprint": "31dd162c8eee2d77", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-02b4e857429190fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Governance/Resolutions/_dialogs.tsx:119"}, "properties": {"repobilityId": "bdad4633618e0def", "scanner": "scanner-primary", "fingerprint": "02b4e857429190fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e3ecfe16b09c1a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/assets/index.tsx:240"}, "properties": {"repobilityId": "f70e85dbb5408eee", "scanner": "scanner-primary", "fingerprint": "4e3ecfe16b09c1a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-328fe3b7cbed2af8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/assets/index.tsx:315"}, "properties": {"repobilityId": "33a3c3c9b19ecaaf", "scanner": "scanner-primary", "fingerprint": "328fe3b7cbed2af8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b60daa40b28d47ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/_dialogs.tsx:237"}, "properties": {"repobilityId": "ec8a2be515c1c714", "scanner": "scanner-primary", "fingerprint": "b60daa40b28d47ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eefa4f49284c1269", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/index.tsx:1000"}, "properties": {"repobilityId": "8d0cfa3fbae88b8b", "scanner": "scanner-primary", "fingerprint": "eefa4f49284c1269", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff3f89c52be73575", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/components/tomorrow-panel.tsx:66"}, "properties": {"repobilityId": "ef88b980ea1dca92", "scanner": "scanner-primary", "fingerprint": "ff3f89c52be73575", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-583334687801a799", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/my-day/components/stream-context-menu.tsx:88"}, "properties": {"repobilityId": "46811aca6e0bceee", "scanner": "scanner-primary", "fingerprint": "583334687801a799", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e56267e51bce0caf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Index.tsx:871"}, "properties": {"repobilityId": "47b42b8f4578e1ab", "scanner": "scanner-primary", "fingerprint": "e56267e51bce0caf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c2d2dbcdb79448cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/AuditLog.tsx:336"}, "properties": {"repobilityId": "fc61f7a73d143a06", "scanner": "scanner-primary", "fingerprint": "c2d2dbcdb79448cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b908cbf74df1897b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/PrnRecords.tsx:126"}, "properties": {"repobilityId": "c8ae8db051053ea3", "scanner": "scanner-primary", "fingerprint": "b908cbf74df1897b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f9c41e98ec140e96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Medications.tsx:267"}, "properties": {"repobilityId": "5514e73d48575db1", "scanner": "scanner-primary", "fingerprint": "f9c41e98ec140e96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-871a64bed656b615", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/MedicationErrors.tsx:168"}, "properties": {"repobilityId": "625fa5b14ba695fb", "scanner": "scanner-primary", "fingerprint": "871a64bed656b615", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a99c42ab1a51310", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Destructions.tsx:312"}, "properties": {"repobilityId": "323624b851414c22", "scanner": "scanner-primary", "fingerprint": "8a99c42ab1a51310", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f83011c4c0cfc185", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/Reports.tsx:403"}, "properties": {"repobilityId": "1c96fd0e535f0dff", "scanner": "scanner-primary", "fingerprint": "f83011c4c0cfc185", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ebdec009c1204bc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emar/components/audit-log-modal.tsx:119"}, "properties": {"repobilityId": "35765f11951f9e3a", "scanner": "scanner-primary", "fingerprint": "ebdec009c1204bc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f999e1df05ae23b2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/audit/index.tsx:57"}, "properties": {"repobilityId": "032f6b4e37ca5456", "scanner": "scanner-primary", "fingerprint": "f999e1df05ae23b2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b89eef1db0ed0ac0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Dashboard.tsx:948"}, "properties": {"repobilityId": "e530f493b832b912", "scanner": "scanner-primary", "fingerprint": "b89eef1db0ed0ac0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-78edac5e39d068bc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/fixed-assets/Index.tsx:449"}, "properties": {"repobilityId": "2c98da33ee36c541", "scanner": "scanner-primary", "fingerprint": "78edac5e39d068bc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d91667ffac93f538", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/journals/Index.tsx:259"}, "properties": {"repobilityId": "6ec9a87b85bfd6e5", "scanner": "scanner-primary", "fingerprint": "d91667ffac93f538", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4721f450baa8602a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/journals/Index.tsx:289"}, "properties": {"repobilityId": "83d13a62fef30022", "scanner": "scanner-primary", "fingerprint": "4721f450baa8602a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-373c9df4861274b5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/CashFlowForecast/Index.tsx:208"}, "properties": {"repobilityId": "90791707e03c03a1", "scanner": "scanner-primary", "fingerprint": "373c9df4861274b5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0226a9b3d50f1033", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Intercompany/Index.tsx:300"}, "properties": {"repobilityId": "d382929b58574710", "scanner": "scanner-primary", "fingerprint": "0226a9b3d50f1033", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88f3f4665f06b9b6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/recurring-charges/Index.tsx:197"}, "properties": {"repobilityId": "65a8e6d29b4b8102", "scanner": "scanner-primary", "fingerprint": "88f3f4665f06b9b6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6627a687b5e26b37", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/audit-exports/Index.tsx:221"}, "properties": {"repobilityId": "65769883c4be452f", "scanner": "scanner-primary", "fingerprint": "6627a687b5e26b37", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e5f5923cb77c541e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/vendors/Index.tsx:279"}, "properties": {"repobilityId": "05666fc0bd0e147a", "scanner": "scanner-primary", "fingerprint": "e5f5923cb77c541e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-08a8f61bee7cd21c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/gst-returns/Index.tsx:318"}, "properties": {"repobilityId": "2d86cde417bb4a2d", "scanner": "scanner-primary", "fingerprint": "08a8f61bee7cd21c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-69a0130ea9484f68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/gst-returns/Show.tsx:401"}, "properties": {"repobilityId": "08076ea2890c673c", "scanner": "scanner-primary", "fingerprint": "69a0130ea9484f68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19e18cf145a4eb1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/payment-allocations/Index.tsx:163"}, "properties": {"repobilityId": "9747775d85bb051f", "scanner": "scanner-primary", "fingerprint": "19e18cf145a4eb1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eee45ad0214436c8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/IrdFilings/Index.tsx:447"}, "properties": {"repobilityId": "f6ba8bc4e1439548", "scanner": "scanner-primary", "fingerprint": "eee45ad0214436c8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7c99e054f9252298", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-transactions/Index.tsx:541"}, "properties": {"repobilityId": "badc733dff8e3074", "scanner": "scanner-primary", "fingerprint": "7c99e054f9252298", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6d90644b0a5d2113", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bills/Index.tsx:315"}, "properties": {"repobilityId": "7f4a534ab82353c8", "scanner": "scanner-primary", "fingerprint": "6d90644b0a5d2113", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-10c4f646773fe8d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/sites-overview/Show.tsx:359"}, "properties": {"repobilityId": "bdc81765afc3fb17", "scanner": "scanner-primary", "fingerprint": "10c4f646773fe8d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb74302c50da2cd7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/accounts/Index.tsx:118"}, "properties": {"repobilityId": "2457364e68862313", "scanner": "scanner-primary", "fingerprint": "bb74302c50da2cd7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb76194563f9d9b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/accounts/Show.tsx:203"}, "properties": {"repobilityId": "d733ad41007da6c8", "scanner": "scanner-primary", "fingerprint": "eb76194563f9d9b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-425b6f46ce3e111a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/billing/Index.tsx:194"}, "properties": {"repobilityId": "84164b5ab57fa21b", "scanner": "scanner-primary", "fingerprint": "425b6f46ce3e111a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b495732ad9617a97", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/fx-revaluations/Index.tsx:180"}, "properties": {"repobilityId": "07e6ea5515302a9f", "scanner": "scanner-primary", "fingerprint": "b495732ad9617a97", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9cb56899d11b8584", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/fx-revaluations/Index.tsx:211"}, "properties": {"repobilityId": "b98474819db2bec8", "scanner": "scanner-primary", "fingerprint": "9cb56899d11b8584", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-715ff9386b3a3267", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/price-books/Index.tsx:155"}, "properties": {"repobilityId": "1f498baa89def92f", "scanner": "scanner-primary", "fingerprint": "715ff9386b3a3267", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b649e47384865758", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/price-books/Index.tsx:186"}, "properties": {"repobilityId": "b9568d44efa87e43", "scanner": "scanner-primary", "fingerprint": "b649e47384865758", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-86ef70982423630f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/credit-notes/Index.tsx:215"}, "properties": {"repobilityId": "8f4f7ee1da9e8157", "scanner": "scanner-primary", "fingerprint": "86ef70982423630f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f84964e8cb405ee5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/eftpos/Batches.tsx:287"}, "properties": {"repobilityId": "60eb101b43fd1840", "scanner": "scanner-primary", "fingerprint": "f84964e8cb405ee5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b8b3626ccab6db18", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/bank-reconciliation/Reconcile.tsx:357"}, "properties": {"repobilityId": "65b8eacd89c1c682", "scanner": "scanner-primary", "fingerprint": "b8b3626ccab6db18", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8f1e3dd34cca1fae", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-reconciliation/Index.tsx:278"}, "properties": {"repobilityId": "4cd38a25034bd69b", "scanner": "scanner-primary", "fingerprint": "8f1e3dd34cca1fae", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2b812fb9b4f508e6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/payment-runs/Index.tsx:198"}, "properties": {"repobilityId": "66dcbae8acbf40d8", "scanner": "scanner-primary", "fingerprint": "2b812fb9b4f508e6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-df8a12c6f6e93b7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/donor-funds/Show.tsx:377"}, "properties": {"repobilityId": "f19f54c0d5cef6b8", "scanner": "scanner-primary", "fingerprint": "df8a12c6f6e93b7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-334a729c3fdf54bb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/purchase-orders/Index.tsx:205"}, "properties": {"repobilityId": "21063b1c37f4b4f5", "scanner": "scanner-primary", "fingerprint": "334a729c3fdf54bb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8f268ebcc04095b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/bank-feeds/Logs.tsx:137"}, "properties": {"repobilityId": "11de946af250b145", "scanner": "scanner-primary", "fingerprint": "8f268ebcc04095b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ad38fa6664c7bd8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/bank-feeds/Logs.tsx:162"}, "properties": {"repobilityId": "abeeeec1b511eb9b", "scanner": "scanner-primary", "fingerprint": "1ad38fa6664c7bd8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9983a9574e55a34a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/site-dashboard/Show.tsx:189"}, "properties": {"repobilityId": "1f4effa69c98162a", "scanner": "scanner-primary", "fingerprint": "9983a9574e55a34a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53a3965bad2b1656", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/Consolidation/Index.tsx:214"}, "properties": {"repobilityId": "64c4e86f305dc862", "scanner": "scanner-primary", "fingerprint": "53a3965bad2b1656", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-004ed05e21bdcd42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/finance/petty-cash/Show.tsx:272"}, "properties": {"repobilityId": "892d296e786873b6", "scanner": "scanner-primary", "fingerprint": "004ed05e21bdcd42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76ac200257d30851", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/quotes/Index.tsx:208"}, "properties": {"repobilityId": "86dd503f95911995", "scanner": "scanner-primary", "fingerprint": "76ac200257d30851", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1ed6d90dc15df699", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/payment-matching/Index.tsx:411"}, "properties": {"repobilityId": "3d55d322604fb3ea", "scanner": "scanner-primary", "fingerprint": "1ed6d90dc15df699", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-87d930a9abcd2dbf", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/finance/invoices/Index.tsx:330"}, "properties": {"repobilityId": "e32301e98ab63584", "scanner": "scanner-primary", "fingerprint": "87d930a9abcd2dbf", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f384ce2ba4c9fe46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/incidents/show.tsx:1962"}, "properties": {"repobilityId": "ffdd56d49d139a95", "scanner": "scanner-primary", "fingerprint": "f384ce2ba4c9fe46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02eb05e5fd1dad38", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/incidents/index.tsx:130"}, "properties": {"repobilityId": "3dc0d1ffbd526736", "scanner": "scanner-primary", "fingerprint": "02eb05e5fd1dad38", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5766b27805ffd3b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/compliance/index.tsx:245"}, "properties": {"repobilityId": "417cc13546b466f5", "scanner": "scanner-primary", "fingerprint": "5766b27805ffd3b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ceb3926e1d6f4e6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/Roadmap/Dashboard.tsx:330"}, "properties": {"repobilityId": "a495027bb092f559", "scanner": "scanner-primary", "fingerprint": "ceb3926e1d6f4e6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9d044f81524cb0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/dashboard.tsx:717"}, "properties": {"repobilityId": "ed8a9c33aebfc715", "scanner": "scanner-primary", "fingerprint": "a9d044f81524cb0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-183d8fb55fffc07b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/worker-participation/index.tsx:1390"}, "properties": {"repobilityId": "5ea2dde918087876", "scanner": "scanner-primary", "fingerprint": "183d8fb55fffc07b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-236d95da6b2f857a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/corrective-actions/index.tsx:314"}, "properties": {"repobilityId": "5bc152de8d619b70", "scanner": "scanner-primary", "fingerprint": "236d95da6b2f857a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-543cb55b7a174856", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/first-aid/index.tsx:500"}, "properties": {"repobilityId": "c5f51422bf356acc", "scanner": "scanner-primary", "fingerprint": "543cb55b7a174856", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1e9bb76d330c411", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/first-aid/index.tsx:566"}, "properties": {"repobilityId": "581f9d7e7af2c8c4", "scanner": "scanner-primary", "fingerprint": "a1e9bb76d330c411", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6c82fbcc495518d3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/procedures/index.tsx:338"}, "properties": {"repobilityId": "8eca41ab1bddfa06", "scanner": "scanner-primary", "fingerprint": "6c82fbcc495518d3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b5a23ced75212ffa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/events/show.tsx:377"}, "properties": {"repobilityId": "0ffb2ba12282723f", "scanner": "scanner-primary", "fingerprint": "b5a23ced75212ffa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d8206e848070eb07", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/lone-workers/index.tsx:492"}, "properties": {"repobilityId": "696c113fa57af456", "scanner": "scanner-primary", "fingerprint": "d8206e848070eb07", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-879c70673f2e4521", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/drills/index.tsx:430"}, "properties": {"repobilityId": "9716005da579dd49", "scanner": "scanner-primary", "fingerprint": "879c70673f2e4521", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-915e222da02b70b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/health-safety/risk-assessments/index.tsx:129"}, "properties": {"repobilityId": "1045781480d9d992", "scanner": "scanner-primary", "fingerprint": "915e222da02b70b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42d5cd725c763bb7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/substances/index.tsx:362"}, "properties": {"repobilityId": "d342ff2a949b7a6d", "scanner": "scanner-primary", "fingerprint": "42d5cd725c763bb7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-dab84494d26ecead", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/restraints/index.tsx:915"}, "properties": {"repobilityId": "1e5843586412a17c", "scanner": "scanner-primary", "fingerprint": "dab84494d26ecead", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-81ff82a11066b613", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/ppe/index.tsx:698"}, "properties": {"repobilityId": "d105a9a01f16f71c", "scanner": "scanner-primary", "fingerprint": "81ff82a11066b613", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bf758429df681570", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/health-safety/injuries/index.tsx:341"}, "properties": {"repobilityId": "9c7b64e69e31f9b6", "scanner": "scanner-primary", "fingerprint": "bf758429df681570", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-06bbdb0993a20cb5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/attendance/index.tsx:440"}, "properties": {"repobilityId": "85bfb397eb16d43c", "scanner": "scanner-primary", "fingerprint": "06bbdb0993a20cb5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82fe2e7ff7e2956f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/employees/show.tsx:1000"}, "properties": {"repobilityId": "0ed68057a012c06c", "scanner": "scanner-primary", "fingerprint": "82fe2e7ff7e2956f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51e178b556318d6a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/employees/index.tsx:231"}, "properties": {"repobilityId": "394a086adf2f745e", "scanner": "scanner-primary", "fingerprint": "51e178b556318d6a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-351779f09f742ea7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/compensation/bonuses.tsx:231"}, "properties": {"repobilityId": "38b859eb00de4e16", "scanner": "scanner-primary", "fingerprint": "351779f09f742ea7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-69ad2f34aba6b0a6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/compensation/review-detail.tsx:613"}, "properties": {"repobilityId": "80098578bba62894", "scanner": "scanner-primary", "fingerprint": "69ad2f34aba6b0a6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b40997f2b165c5f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/goals/index.tsx:242"}, "properties": {"repobilityId": "745599ae70595c28", "scanner": "scanner-primary", "fingerprint": "b40997f2b165c5f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d7570a98c4ba3d93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/directory/show.tsx:453"}, "properties": {"repobilityId": "2a09995e8a0321a8", "scanner": "scanner-primary", "fingerprint": "d7570a98c4ba3d93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2ebb89b819c4237b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/performance/index.tsx:1127"}, "properties": {"repobilityId": "bc0f03e79eaaa4ef", "scanner": "scanner-primary", "fingerprint": "2ebb89b819c4237b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-823730f5445397a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/performance/skills/index.tsx:238"}, "properties": {"repobilityId": "f9f059d6623f4c95", "scanner": "scanner-primary", "fingerprint": "823730f5445397a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d51aa87256f8301f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feed/index.tsx:457"}, "properties": {"repobilityId": "4673f80be0b89813", "scanner": "scanner-primary", "fingerprint": "d51aa87256f8301f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-396eba68949fb206", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/candidates/show.tsx:2010"}, "properties": {"repobilityId": "af622a1dae991a19", "scanner": "scanner-primary", "fingerprint": "396eba68949fb206", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9f954bcbb438b3f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/candidates/create-offer.tsx:793"}, "properties": {"repobilityId": "871290820d57d50d", "scanner": "scanner-primary", "fingerprint": "d9f954bcbb438b3f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a20d37c9572c8f58", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/jobs.tsx:886"}, "properties": {"repobilityId": "c71b9e671b837128", "scanner": "scanner-primary", "fingerprint": "a20d37c9572c8f58", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a111afa584090f8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/analytics.tsx:351"}, "properties": {"repobilityId": "16c69debcfcfa186", "scanner": "scanner-primary", "fingerprint": "a111afa584090f8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ccc16e4229116050", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/recruitment/index.tsx:266"}, "properties": {"repobilityId": "2e136956ef6ecfcf", "scanner": "scanner-primary", "fingerprint": "ccc16e4229116050", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5624904a1a772542", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/job-postings/show.tsx:199"}, "properties": {"repobilityId": "42309744afbc80be", "scanner": "scanner-primary", "fingerprint": "5624904a1a772542", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4709b680085f3262", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/job-postings/index.tsx:286"}, "properties": {"repobilityId": "e6c0b6bc156a972c", "scanner": "scanner-primary", "fingerprint": "4709b680085f3262", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1272fa0c7b2a1b23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/onboarding/emails.tsx:397"}, "properties": {"repobilityId": "890f81edf1c4e942", "scanner": "scanner-primary", "fingerprint": "1272fa0c7b2a1b23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3d1445507b34287", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/hr/onboarding/emails.tsx:481"}, "properties": {"repobilityId": "89711abef8e5aea5", "scanner": "scanner-primary", "fingerprint": "c3d1445507b34287", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2c712ab2186e1032", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/time/index.tsx:628"}, "properties": {"repobilityId": "992f4910aa60fa8a", "scanner": "scanner-primary", "fingerprint": "2c712ab2186e1032", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-34b5ab7b7e66398f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/my/index.tsx:741"}, "properties": {"repobilityId": "c095647e8c9edc6c", "scanner": "scanner-primary", "fingerprint": "34b5ab7b7e66398f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1d0549bed322de79", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/documents/policies/show.tsx:338"}, "properties": {"repobilityId": "aa3f2ceda35ff7de", "scanner": "scanner-primary", "fingerprint": "1d0549bed322de79", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a950e167cbc43d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feedback/index.tsx:359"}, "properties": {"repobilityId": "44b78a7bae6d5b0c", "scanner": "scanner-primary", "fingerprint": "4a950e167cbc43d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4caa9d92d344018e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/hr/feedback/request.tsx:280"}, "properties": {"repobilityId": "c1e65ec12ff4ab22", "scanner": "scanner-primary", "fingerprint": "4caa9d92d344018e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1616912607683636", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/clients/Financials.tsx:219"}, "properties": {"repobilityId": "4596d2d09df66b1f", "scanner": "scanner-primary", "fingerprint": "1616912607683636", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-527ca0831385dcc4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/calendar.tsx:183"}, "properties": {"repobilityId": "922c35d141102498", "scanner": "scanner-primary", "fingerprint": "527ca0831385dcc4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0424bd92f10d97a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/portal/calendar.tsx:319"}, "properties": {"repobilityId": "e875e6be6e117a66", "scanner": "scanner-primary", "fingerprint": "f0424bd92f10d97a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-dc582458422ed121", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/messages.tsx:551"}, "properties": {"repobilityId": "57f2e581c08e29de", "scanner": "scanner-primary", "fingerprint": "dc582458422ed121", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8cd6eea8ae758ffe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/client.tsx:429"}, "properties": {"repobilityId": "6f55401dd1a4f59b", "scanner": "scanner-primary", "fingerprint": "8cd6eea8ae758ffe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3a1a8111b8051c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/index.tsx:80"}, "properties": {"repobilityId": "2ce1af6d28b22e85", "scanner": "scanner-primary", "fingerprint": "c3a1a8111b8051c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-859143d49929d543", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/portal/documents.tsx:200"}, "properties": {"repobilityId": "daa7473339999a96", "scanner": "scanner-primary", "fingerprint": "859143d49929d543", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26f28cb393d8c6dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/meds/today/index.tsx:220"}, "properties": {"repobilityId": "67fa22f87a4e7abe", "scanner": "scanner-primary", "fingerprint": "26f28cb393d8c6dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3592e17e91c69e2d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/reports/module.tsx:51"}, "properties": {"repobilityId": "ba860dd82fc68565", "scanner": "scanner-primary", "fingerprint": "3592e17e91c69e2d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a8963314ccfc582b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/reports/assets.tsx:23"}, "properties": {"repobilityId": "36274955904712ee", "scanner": "scanner-primary", "fingerprint": "a8963314ccfc582b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a90b89039e95400e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/reports/index.tsx:42"}, "properties": {"repobilityId": "8daa633597189824", "scanner": "scanner-primary", "fingerprint": "a90b89039e95400e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98da1f3702d96f20", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/maintenance-health.tsx:304"}, "properties": {"repobilityId": "528428f74f27d190", "scanner": "scanner-primary", "fingerprint": "98da1f3702d96f20", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6cbafdebd1ea6b42", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/maintenance-health.tsx:277"}, "properties": {"repobilityId": "86f4a2d6c383aecd", "scanner": "scanner-primary", "fingerprint": "6cbafdebd1ea6b42", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0a286d0908c6fb90", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/dashboard.tsx:233"}, "properties": {"repobilityId": "418c879de5366b2e", "scanner": "scanner-primary", "fingerprint": "0a286d0908c6fb90", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9366f872d0a111e7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/category.tsx:317"}, "properties": {"repobilityId": "77d7ec68521069a1", "scanner": "scanner-primary", "fingerprint": "9366f872d0a111e7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ba6a82450221eb71", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/alerts-events.tsx:289"}, "properties": {"repobilityId": "47294d54013440ad", "scanner": "scanner-primary", "fingerprint": "ba6a82450221eb71", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a852423ceccd741c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/integrations/queclink-hub.tsx:3367"}, "properties": {"repobilityId": "f2e2b8b764e979d1", "scanner": "scanner-primary", "fingerprint": "a852423ceccd741c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-00e9c1c56845ed24", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/device-groups/show.tsx:224"}, "properties": {"repobilityId": "c2014a6ff5dc0844", "scanner": "scanner-primary", "fingerprint": "00e9c1c56845ed24", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ca236a42fd5b7043", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/device-groups/index.tsx:130"}, "properties": {"repobilityId": "8c4c5d93871bc940", "scanner": "scanner-primary", "fingerprint": "ca236a42fd5b7043", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0eeb38a0ce6c2911", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/device-groups/index.tsx:168"}, "properties": {"repobilityId": "83602d2d4ef6ffae", "scanner": "scanner-primary", "fingerprint": "0eeb38a0ce6c2911", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4b27cd2094074c8a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/devices/show.tsx:747"}, "properties": {"repobilityId": "0672819dfb916e0c", "scanner": "scanner-primary", "fingerprint": "4b27cd2094074c8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-283f7054162bb297", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/security-devices/devices/index.tsx:185"}, "properties": {"repobilityId": "f44ac1207dff6b67", "scanner": "scanner-primary", "fingerprint": "283f7054162bb297", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8d0afbb8a9f5f894", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/security-devices/devices/shared.tsx:164"}, "properties": {"repobilityId": "200b380854819043", "scanner": "scanner-primary", "fingerprint": "8d0afbb8a9f5f894", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-312850e8af4a5542", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/breaches.tsx:214"}, "properties": {"repobilityId": "44ad3d10eea6007a", "scanner": "scanner-primary", "fingerprint": "312850e8af4a5542", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-db17a6e77482cf73", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/retention.tsx:173"}, "properties": {"repobilityId": "1e59289493b48421", "scanner": "scanner-primary", "fingerprint": "db17a6e77482cf73", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d8fe89967e3837d3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/dpia.tsx:230"}, "properties": {"repobilityId": "ba8e97e5efafe962", "scanner": "scanner-primary", "fingerprint": "d8fe89967e3837d3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-20d38ea208062844", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/requests.tsx:259"}, "properties": {"repobilityId": "efdd80859181e25b", "scanner": "scanner-primary", "fingerprint": "20d38ea208062844", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e114244272b5e9c9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/privacy/legal-holds.tsx:200"}, "properties": {"repobilityId": "fa6b6dd4dde7b69b", "scanner": "scanner-primary", "fingerprint": "e114244272b5e9c9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4f0fe77fd815ba40", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/safeguarding/index.tsx:95"}, "properties": {"repobilityId": "c28fa45b4a0ea8f5", "scanner": "scanner-primary", "fingerprint": "4f0fe77fd815ba40", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-577493f50557b735", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_dialog-shared.tsx:268"}, "properties": {"repobilityId": "00f44843eefce300", "scanner": "scanner-primary", "fingerprint": "577493f50557b735", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b02c1678a2c58006", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/show.tsx:712"}, "properties": {"repobilityId": "b22f05fee41ae7df", "scanner": "scanner-primary", "fingerprint": "b02c1678a2c58006", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2bc9f1b3f4853d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_wizard.tsx:1411"}, "properties": {"repobilityId": "6dfbe1b777f05af5", "scanner": "scanner-primary", "fingerprint": "d2bc9f1b3f4853d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a02bbeaa90a9a33c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/index.tsx:599"}, "properties": {"repobilityId": "2a90cab406dd5256", "scanner": "scanner-primary", "fingerprint": "a02bbeaa90a9a33c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e2049b0c36c195d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_site-geofence-dialog.tsx:357"}, "properties": {"repobilityId": "9a08805f2d102467", "scanner": "scanner-primary", "fingerprint": "1e2049b0c36c195d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e0cca0a4e1861c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/_ledger-panel.tsx:531"}, "properties": {"repobilityId": "133e17b049bd85a1", "scanner": "scanner-primary", "fingerprint": "6e0cca0a4e1861c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42a4a1003f3d6b7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/documents.tsx:433"}, "properties": {"repobilityId": "841e4beb49a5e23e", "scanner": "scanner-primary", "fingerprint": "42a4a1003f3d6b7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b7e077003af8460", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/hazards/index.tsx:574"}, "properties": {"repobilityId": "9aef66f555c4158d", "scanner": "scanner-primary", "fingerprint": "1b7e077003af8460", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9531718689b6b94a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/sites/hazards/index.tsx:623"}, "properties": {"repobilityId": "47d838c6b7a40532", "scanner": "scanner-primary", "fingerprint": "9531718689b6b94a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9cd0921e4fc19482", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors/_dialogs.tsx:723"}, "properties": {"repobilityId": "e00c48706b5fb452", "scanner": "scanner-primary", "fingerprint": "9cd0921e4fc19482", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8e73d7262b5b727", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/clients/_dialogs.tsx:518"}, "properties": {"repobilityId": "ec934879b19aa328", "scanner": "scanner-primary", "fingerprint": "b8e73d7262b5b727", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dda48ddd301aebb0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/ledger/index.tsx:381"}, "properties": {"repobilityId": "7ea812f7f92ad401", "scanner": "scanner-primary", "fingerprint": "dda48ddd301aebb0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c519dc40ef24aa3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/contacts/_dialogs.tsx:95"}, "properties": {"repobilityId": "37db9e39ad7c1d8c", "scanner": "scanner-primary", "fingerprint": "5c519dc40ef24aa3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d70c2dca495e62f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors-credentials/global.tsx:1721"}, "properties": {"repobilityId": "d77d1428565d2573", "scanner": "scanner-primary", "fingerprint": "0d70c2dca495e62f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e6b13e53d32391e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/vendors-credentials/_context-menu.tsx:90"}, "properties": {"repobilityId": "4eb30cf15bb9a015", "scanner": "scanner-primary", "fingerprint": "1e6b13e53d32391e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de8a8ef4dce7510e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/reports/overdue-actions.tsx:159"}, "properties": {"repobilityId": "925abc15d2dc0e95", "scanner": "scanner-primary", "fingerprint": "de8a8ef4dce7510e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f6c327a0b510332d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_dialogs.tsx:451"}, "properties": {"repobilityId": "4099d2bf2933c69c", "scanner": "scanner-primary", "fingerprint": "f6c327a0b510332d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-101e37225816aaa9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:424"}, "properties": {"repobilityId": "2e071fef153c8170", "scanner": "scanner-primary", "fingerprint": "101e37225816aaa9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b10a3de6342d9a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_calendar-grid.tsx:260"}, "properties": {"repobilityId": "87bdc56c6c1b5924", "scanner": "scanner-primary", "fingerprint": "4b10a3de6342d9a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a22a8b59b175c755", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_templates-panel.tsx:323"}, "properties": {"repobilityId": "ec748acc528f8562", "scanner": "scanner-primary", "fingerprint": "a22a8b59b175c755", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-410531bf872c62e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:265"}, "properties": {"repobilityId": "921d7ce5a9ec92f8", "scanner": "scanner-primary", "fingerprint": "410531bf872c62e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b13ae7f7f36bb1e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/meal-planner/_hero.tsx:234"}, "properties": {"repobilityId": "c28c245451245336", "scanner": "scanner-primary", "fingerprint": "b13ae7f7f36bb1e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-22113ad43bdbf257", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/_dialogs.tsx:476"}, "properties": {"repobilityId": "fa84000275a297bc", "scanner": "scanner-primary", "fingerprint": "22113ad43bdbf257", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96daabc7daf73c29", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/index.tsx:782"}, "properties": {"repobilityId": "b5ae9bea0fe76637", "scanner": "scanner-primary", "fingerprint": "96daabc7daf73c29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-957bf25c88263dc2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/rooms/_asset-dialogs.tsx:148"}, "properties": {"repobilityId": "421ad2fc7ce9e9e5", "scanner": "scanner-primary", "fingerprint": "957bf25c88263dc2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c8ae068135f0b7d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/plan/_inspector.tsx:1227"}, "properties": {"repobilityId": "91e96af6b72c7cdd", "scanner": "scanner-primary", "fingerprint": "c8ae068135f0b7d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a523d4dbf17901c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/credentials/_dialogs.tsx:816"}, "properties": {"repobilityId": "3a2ed4283ddad563", "scanner": "scanner-primary", "fingerprint": "3a523d4dbf17901c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a36ab6481ffeedb5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/calendar/_parts.tsx:641"}, "properties": {"repobilityId": "679648f2e7939447", "scanner": "scanner-primary", "fingerprint": "a36ab6481ffeedb5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14a6eeaad14fa3b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/sites/calendar/SiteCalendar.tsx:1238"}, "properties": {"repobilityId": "e9d4a727abff89c7", "scanner": "scanner-primary", "fingerprint": "14a6eeaad14fa3b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abbdeffbdc703e1c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 resources/js/pages/sites/feedback/Index.tsx:931"}, "properties": {"repobilityId": "50b131346e10159e", "scanner": "scanner-primary", "fingerprint": "abbdeffbdc703e1c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d8c26a042776d78f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/fleet-management/reports.tsx:302"}, "properties": {"repobilityId": "f737203e3743a86c", "scanner": "scanner-primary", "fingerprint": "d8c26a042776d78f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f931d3775d5ae30e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 resources/js/pages/emergency/access.tsx:183"}, "properties": {"repobilityId": "75f75768f27e0f6f", "scanner": "scanner-primary", "fingerprint": "f931d3775d5ae30e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f443b924683ca07", "level": "error", "message": {"text": "Runtime dotenv file present in repo: .env.dusk.local"}, "properties": {"repobilityId": "1a5832bdee78c182", "scanner": "scanner-primary", "fingerprint": "6f443b924683ca07", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".env.dusk.local"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa3a5aa8143d8c3a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/components/two-factor-setup-modal.tsx:78"}, "properties": {"repobilityId": "403d2531e08c6e70", "scanner": "scanner-primary", "fingerprint": "aa3a5aa8143d8c3a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/components/two-factor-setup-modal.tsx"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-f64c6228781b983a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/my-calendar.tsx:436"}, "properties": {"repobilityId": "cf877ff4f4bc42c7", "scanner": "scanner-primary", "fingerprint": "f64c6228781b983a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/my-calendar.tsx"}, "region": {"startLine": 436}}}]}, {"ruleId": "scanner-44fd48b09ea3331b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/two-factor.tsx:100"}, "properties": {"repobilityId": "12c4ae43ec001d21", "scanner": "scanner-primary", "fingerprint": "44fd48b09ea3331b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/settings/two-factor.tsx"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-dabdcbfd14fe55b1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/audit-logs.tsx:626"}, "properties": {"repobilityId": "a5173c7127ee7eea", "scanner": "scanner-primary", "fingerprint": "dabdcbfd14fe55b1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/settings/audit-logs.tsx"}, "region": {"startLine": 626}}}]}, {"ruleId": "scanner-27908e551b6de6b2", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/settings/users/index.tsx:622"}, "properties": {"repobilityId": "28402f53965a6ac1", "scanner": "scanner-primary", "fingerprint": "27908e551b6de6b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/settings/users/index.tsx"}, "region": {"startLine": 622}}}]}, {"ruleId": "scanner-e758ddad8dc77e25", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/index.tsx:180"}, "properties": {"repobilityId": "d25e9710316e08a6", "scanner": "scanner-primary", "fingerprint": "e758ddad8dc77e25", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/daily-notes/index.tsx"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-d8a610d63a38e57d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/with-concerns.tsx:82"}, "properties": {"repobilityId": "8a7893d83b1979e7", "scanner": "scanner-primary", "fingerprint": "d8a610d63a38e57d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/daily-notes/with-concerns.tsx"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-ae6c7c5834ad3539", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/daily-notes/with-incidents.tsx:82"}, "properties": {"repobilityId": "94421e0c78a223f5", "scanner": "scanner-primary", "fingerprint": "ae6c7c5834ad3539", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/daily-notes/with-incidents.tsx"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-1b4ee22f175e2f96", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/procedure-runs/index.tsx:140"}, "properties": {"repobilityId": "20938c3e87d503bb", "scanner": "scanner-primary", "fingerprint": "1b4ee22f175e2f96", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/procedure-runs/index.tsx"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-ada41f712b1f074a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/procedure-runs/overdue.tsx:78"}, "properties": {"repobilityId": "372165c67600c9dc", "scanner": "scanner-primary", "fingerprint": "ada41f712b1f074a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/procedure-runs/overdue.tsx"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-4bcc91d00b22ed0f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/requests/index.tsx:150"}, "properties": {"repobilityId": "46eb6f191bb6bbd3", "scanner": "scanner-primary", "fingerprint": "4bcc91d00b22ed0f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/requests/index.tsx"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-04d88a01d2eb1983", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/communication-logs/index.tsx:147"}, "properties": {"repobilityId": "73eb497c97719fa5", "scanner": "scanner-primary", "fingerprint": "04d88a01d2eb1983", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/communication-logs/index.tsx"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-1fabeb05d22447bb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/resources/index.tsx:167"}, "properties": {"repobilityId": "1be06d21c2d9ac2e", "scanner": "scanner-primary", "fingerprint": "1fabeb05d22447bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/resources/index.tsx"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-d40afd10001f8f27", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/index.tsx:145"}, "properties": {"repobilityId": "35631c16d1d2f3ed", "scanner": "scanner-primary", "fingerprint": "d40afd10001f8f27", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/risk-plan-activations/index.tsx"}, "region": {"startLine": 145}}}]}, {"ruleId": "scanner-e533b39a49d0e4e7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/needing-acknowledgment.tsx:86"}, "properties": {"repobilityId": "cbd07fc526865720", "scanner": "scanner-primary", "fingerprint": "e533b39a49d0e4e7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/risk-plan-activations/needing-acknowledgment.tsx"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-fa53d10f7933e3d8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/risk-plan-activations/for-client.tsx:89"}, "properties": {"repobilityId": "e3ce8b5794b91c05", "scanner": "scanner-primary", "fingerprint": "fa53d10f7933e3d8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/risk-plan-activations/for-client.tsx"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-26d341b6137c5236", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/awaiting-approval.tsx:102"}, "properties": {"repobilityId": "5720f504464f8c3f", "scanner": "scanner-primary", "fingerprint": "26d341b6137c5236", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/tasks/awaiting-approval.tsx"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-ee747f3043ca4629", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/index.tsx:155"}, "properties": {"repobilityId": "4751a4adea151095", "scanner": "scanner-primary", "fingerprint": "ee747f3043ca4629", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/tasks/index.tsx"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-655013f1f0427873", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/tasks/overdue.tsx:83"}, "properties": {"repobilityId": "e8ea275a76f39654", "scanner": "scanner-primary", "fingerprint": "655013f1f0427873", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/tasks/overdue.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-873a17ddea05cf7e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/handover-notes/unacknowledged.tsx:78"}, "properties": {"repobilityId": "ff676d049a679f7a", "scanner": "scanner-primary", "fingerprint": "873a17ddea05cf7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/handover-notes/unacknowledged.tsx"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-ea681b4eefaac11b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/handover-notes/index.tsx:123"}, "properties": {"repobilityId": "9af880cebea6735c", "scanner": "scanner-primary", "fingerprint": "ea681b4eefaac11b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/handover-notes/index.tsx"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-48f5c296f5cb5e54", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/respite/evidence-packs/index.tsx:133"}, "properties": {"repobilityId": "748a827dd8987b64", "scanner": "scanner-primary", "fingerprint": "48f5c296f5cb5e54", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/respite/evidence-packs/index.tsx"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-b8ad3cdd129466a1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/map.tsx:500"}, "properties": {"repobilityId": "e9b300cd7c647486", "scanner": "scanner-primary", "fingerprint": "b8ad3cdd129466a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/control-room/map.tsx"}, "region": {"startLine": 500}}}]}, {"ruleId": "scanner-45bc0240e5895244", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/broadcast.tsx:553"}, "properties": {"repobilityId": "2044c420d1d50696", "scanner": "scanner-primary", "fingerprint": "45bc0240e5895244", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/control-room/broadcast.tsx"}, "region": {"startLine": 553}}}]}, {"ruleId": "scanner-d802f4ddfc602702", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/alerts/index.tsx:859"}, "properties": {"repobilityId": "8d95fe01469d8136", "scanner": "scanner-primary", "fingerprint": "d802f4ddfc602702", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/control-room/alerts/index.tsx"}, "region": {"startLine": 859}}}]}, {"ruleId": "scanner-bd17ce9959f0c46a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/sla/breaches.tsx:337"}, "properties": {"repobilityId": "702f5c0d15a65f99", "scanner": "scanner-primary", "fingerprint": "bd17ce9959f0c46a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/control-room/sla/breaches.tsx"}, "region": {"startLine": 337}}}]}, {"ruleId": "scanner-7d5eca86ca2bcfdd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/control-room/devices/index.tsx:425"}, "properties": {"repobilityId": "17b53540953f2917", "scanner": "scanner-primary", "fingerprint": "7d5eca86ca2bcfdd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/control-room/devices/index.tsx"}, "region": {"startLine": 425}}}]}, {"ruleId": "scanner-98584c533e248d52", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/notifications/index.tsx:717"}, "properties": {"repobilityId": "e089c36c043cd547", "scanner": "scanner-primary", "fingerprint": "98584c533e248d52", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/notifications/index.tsx"}, "region": {"startLine": 717}}}]}, {"ruleId": "scanner-df423bc62c9de282", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/notifications/Index.tsx:166"}, "properties": {"repobilityId": "3961f2f05d963b10", "scanner": "scanner-primary", "fingerprint": "df423bc62c9de282", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/notifications/Index.tsx"}, "region": {"startLine": 166}}}]}, {"ruleId": "scanner-0068b78bc8855ce2", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/mileage/Index.tsx:203"}, "properties": {"repobilityId": "ea7b8c3afeec5255", "scanner": "scanner-primary", "fingerprint": "0068b78bc8855ce2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/mileage/Index.tsx"}, "region": {"startLine": 203}}}]}, {"ruleId": "scanner-53e56b93d0b8f96b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/geofences/Index.tsx:145"}, "properties": {"repobilityId": "872b7f47da211808", "scanner": "scanner-primary", "fingerprint": "53e56b93d0b8f96b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/geofences/Index.tsx"}, "region": {"startLine": 145}}}]}, {"ruleId": "scanner-ff63b22a1f0ce192", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/shifts/series/Index.tsx:254"}, "properties": {"repobilityId": "1293366aefa29eba", "scanner": "scanner-primary", "fingerprint": "ff63b22a1f0ce192", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/shifts/series/Index.tsx"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-98bddbbf7ad41270", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/onboarding/Index.tsx:228"}, "properties": {"repobilityId": "948e85e21f00cd39", "scanner": "scanner-primary", "fingerprint": "98bddbbf7ad41270", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/onboarding/Index.tsx"}, "region": {"startLine": 228}}}]}, {"ruleId": "scanner-e6dbc5ad8076130c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/calendar.tsx:373"}, "properties": {"repobilityId": "fc210b5a931fb4fb", "scanner": "scanner-primary", "fingerprint": "e6dbc5ad8076130c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/clients/calendar.tsx"}, "region": {"startLine": 373}}}]}, {"ruleId": "scanner-729862826b22567b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/visit-requests.tsx:361"}, "properties": {"repobilityId": "ad759f4e7388e6be", "scanner": "scanner-primary", "fingerprint": "729862826b22567b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/clients/visit-requests.tsx"}, "region": {"startLine": 361}}}]}, {"ruleId": "scanner-3fc46abb58c657e1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2796"}, "properties": {"repobilityId": "23a7ce8ddf43ead3", "scanner": "scanner-primary", "fingerprint": "3fc46abb58c657e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx"}, "region": {"startLine": 2796}}}]}, {"ruleId": "scanner-2e26aa8249c06ea5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/client-funds/Index.tsx:188"}, "properties": {"repobilityId": "943bb20f38c5dba8", "scanner": "scanner-primary", "fingerprint": "2e26aa8249c06ea5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/client-funds/Index.tsx"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-a8551d0253744f3c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/evv/Index.tsx:219"}, "properties": {"repobilityId": "e5bdb86af8bae50b", "scanner": "scanner-primary", "fingerprint": "a8551d0253744f3c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/evv/Index.tsx"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-3ec0bae1a6db6b95", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/job-board/Index.tsx:352"}, "properties": {"repobilityId": "3d32e1b7a128732f", "scanner": "scanner-primary", "fingerprint": "3ec0bae1a6db6b95", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/job-board/Index.tsx"}, "region": {"startLine": 352}}}]}, {"ruleId": "scanner-ddc34809460fab81", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/family-portal/Index.tsx:157"}, "properties": {"repobilityId": "0718b002901969c1", "scanner": "scanner-primary", "fingerprint": "ddc34809460fab81", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/family-portal/Index.tsx"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-1ad9c1cbc346b9f8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/service-agreements/Index.tsx:279"}, "properties": {"repobilityId": "f99eafbff576b89c", "scanner": "scanner-primary", "fingerprint": "1ad9c1cbc346b9f8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/service-agreements/Index.tsx"}, "region": {"startLine": 279}}}]}, {"ruleId": "scanner-2b86b1f3b5b1e25c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/timesheets/payroll-adjustments.tsx:147"}, "properties": {"repobilityId": "2ca3e1f726efec20", "scanner": "scanner-primary", "fingerprint": "2b86b1f3b5b1e25c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/timesheets/payroll-adjustments.tsx"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-2f22760f77a8126f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/qualifications/Index.tsx:137"}, "properties": {"repobilityId": "7917a0ab86b381ba", "scanner": "scanner-primary", "fingerprint": "2f22760f77a8126f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/qualifications/Index.tsx"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-a525ff3b39a94c1a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/forms/Index.tsx:176"}, "properties": {"repobilityId": "46d3512c30ba7ac1", "scanner": "scanner-primary", "fingerprint": "a525ff3b39a94c1a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/forms/Index.tsx"}, "region": {"startLine": 176}}}]}, {"ruleId": "scanner-f0dd001bdd220a38", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/operations/calendar-sync/Index.tsx:153"}, "properties": {"repobilityId": "86c596d9a6f49344", "scanner": "scanner-primary", "fingerprint": "f0dd001bdd220a38", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/operations/calendar-sync/Index.tsx"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-4e4338c39b0e8990", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/bookings/index.tsx:278"}, "properties": {"repobilityId": "7801b4b6768f9a02", "scanner": "scanner-primary", "fingerprint": "4e4338c39b0e8990", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/bookings/index.tsx"}, "region": {"startLine": 278}}}]}, {"ruleId": "scanner-4fd32e6ad89ced44", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/trips/index.tsx:543"}, "properties": {"repobilityId": "b9c661f0ecc97ecc", "scanner": "scanner-primary", "fingerprint": "4fd32e6ad89ced44", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/trips/index.tsx"}, "region": {"startLine": 543}}}]}, {"ruleId": "scanner-6fa2397587b4bf38", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/handovers/index.tsx:269"}, "properties": {"repobilityId": "e1c0607157299e96", "scanner": "scanner-primary", "fingerprint": "6fa2397587b4bf38", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/handovers/index.tsx"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-e1f43f29fa3fd2c8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/transports/medications.tsx:783"}, "properties": {"repobilityId": "6a3a46833a4dbcd9", "scanner": "scanner-primary", "fingerprint": "e1f43f29fa3fd2c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/transports/medications.tsx"}, "region": {"startLine": 783}}}]}, {"ruleId": "scanner-8d8ff1cbe1c364e0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/transports/index.tsx:495"}, "properties": {"repobilityId": "a35b89d8aedf777d", "scanner": "scanner-primary", "fingerprint": "8d8ff1cbe1c364e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/transports/index.tsx"}, "region": {"startLine": 495}}}]}, {"ruleId": "scanner-2d49ca3e74b05964", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/assets/index.tsx:280"}, "properties": {"repobilityId": "a9f5260a02906e80", "scanner": "scanner-primary", "fingerprint": "2d49ca3e74b05964", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/assets/index.tsx"}, "region": {"startLine": 280}}}]}, {"ruleId": "scanner-31fdc7a509460202", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/incidents/index.tsx:292"}, "properties": {"repobilityId": "09fd889b8d351f03", "scanner": "scanner-primary", "fingerprint": "31fdc7a509460202", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/incidents/index.tsx"}, "region": {"startLine": 292}}}]}, {"ruleId": "scanner-0ef4906a743bbf76", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/mileage/index.tsx:410"}, "properties": {"repobilityId": "47a49697d42faeb2", "scanner": "scanner-primary", "fingerprint": "0ef4906a743bbf76", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/mileage/index.tsx"}, "region": {"startLine": 410}}}]}, {"ruleId": "scanner-042007caa82b6fa3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/outings/index.tsx:311"}, "properties": {"repobilityId": "a3f8220b7c3115ce", "scanner": "scanner-primary", "fingerprint": "042007caa82b6fa3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/outings/index.tsx"}, "region": {"startLine": 311}}}]}, {"ruleId": "scanner-8dcbcd3d7f752ada", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/alerts/index.tsx:768"}, "properties": {"repobilityId": "83a3f4710fd566bd", "scanner": "scanner-primary", "fingerprint": "8dcbcd3d7f752ada", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/alerts/index.tsx"}, "region": {"startLine": 768}}}]}, {"ruleId": "scanner-77eb9a3d629d8778", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/drivers/index.tsx:511"}, "properties": {"repobilityId": "82b7c3d77a350bd7", "scanner": "scanner-primary", "fingerprint": "77eb9a3d629d8778", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/drivers/index.tsx"}, "region": {"startLine": 511}}}]}, {"ruleId": "scanner-bdb866cd856b3efb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/maintenance/work-orders/index.tsx:563"}, "properties": {"repobilityId": "9643b1aac6d898bd", "scanner": "scanner-primary", "fingerprint": "bdb866cd856b3efb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/maintenance/work-orders/index.tsx"}, "region": {"startLine": 563}}}]}, {"ruleId": "scanner-0249de53067e35df", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/wandering/index.tsx:331"}, "properties": {"repobilityId": "f71a93fa0ab81e9d", "scanner": "scanner-primary", "fingerprint": "0249de53067e35df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/wandering/index.tsx"}, "region": {"startLine": 331}}}]}, {"ruleId": "scanner-3eed99ab2b0d4794", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/fuel/index.tsx:776"}, "properties": {"repobilityId": "0049300fef9d905d", "scanner": "scanner-primary", "fingerprint": "3eed99ab2b0d4794", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/fuel/index.tsx"}, "region": {"startLine": 776}}}]}, {"ruleId": "scanner-79572468f8517bf6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/vehicles/trips.tsx:528"}, "properties": {"repobilityId": "5a35c0f587eaa622", "scanner": "scanner-primary", "fingerprint": "79572468f8517bf6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/vehicles/trips.tsx"}, "region": {"startLine": 528}}}]}, {"ruleId": "scanner-b809f5dd3123ebd5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/vehicles/index.tsx:346"}, "properties": {"repobilityId": "908e7e6f7e863b75", "scanner": "scanner-primary", "fingerprint": "b809f5dd3123ebd5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/vehicles/index.tsx"}, "region": {"startLine": 346}}}]}, {"ruleId": "scanner-d89a44aafdbbb9e2", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/fleet-assets/devices/index.tsx:491"}, "properties": {"repobilityId": "79fb46a2d0bd195a", "scanner": "scanner-primary", "fingerprint": "d89a44aafdbbb9e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/fleet-assets/devices/index.tsx"}, "region": {"startLine": 491}}}]}, {"ruleId": "scanner-8ef90f3e3a87a47a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/Protocols.tsx:459"}, "properties": {"repobilityId": "72ba4301e2784172", "scanner": "scanner-primary", "fingerprint": "8ef90f3e3a87a47a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-clinical/Protocols.tsx"}, "region": {"startLine": 459}}}]}, {"ruleId": "scanner-faad06d641342608", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/Events.tsx:493"}, "properties": {"repobilityId": "929f9bda57834f7c", "scanner": "scanner-primary", "fingerprint": "faad06d641342608", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-clinical/Events.tsx"}, "region": {"startLine": 493}}}]}, {"ruleId": "scanner-81e644969f160ee8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-clinical/observations.tsx:419"}, "properties": {"repobilityId": "5cc4144ad9e3706b", "scanner": "scanner-primary", "fingerprint": "81e644969f160ee8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-clinical/observations.tsx"}, "region": {"startLine": 419}}}]}, {"ruleId": "scanner-e002a59ed260ed66", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Policies/Index.tsx:128"}, "properties": {"repobilityId": "d4c3ab6ccfa69d3b", "scanner": "scanner-primary", "fingerprint": "e002a59ed260ed66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/Governance/Policies/Index.tsx"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-3d99a6cbca8695de", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Policies/Show.tsx:107"}, "properties": {"repobilityId": "f863fc5fdd52e16b", "scanner": "scanner-primary", "fingerprint": "3d99a6cbca8695de", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/Governance/Policies/Show.tsx"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-7db23422a5e27ab4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Meetings/Index.tsx:190"}, "properties": {"repobilityId": "5706fcf1f4802839", "scanner": "scanner-primary", "fingerprint": "7db23422a5e27ab4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/Governance/Meetings/Index.tsx"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-f9b5de5188fbd109", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/Governance/Risks/Index.tsx:198"}, "properties": {"repobilityId": "6ea45fb19ba1a441", "scanner": "scanner-primary", "fingerprint": "f9b5de5188fbd109", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/Governance/Risks/Index.tsx"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-bb34a7ff4b6d5bca", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/assets/index.tsx:315"}, "properties": {"repobilityId": "4871d23823b43eda", "scanner": "scanner-primary", "fingerprint": "bb34a7ff4b6d5bca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/assets/index.tsx"}, "region": {"startLine": 315}}}]}, {"ruleId": "scanner-982d662f0cfc39d9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/audit/index.tsx:57"}, "properties": {"repobilityId": "6b4f1e3b09d16f0b", "scanner": "scanner-primary", "fingerprint": "982d662f0cfc39d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/audit/index.tsx"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-be63fa71578dfa68", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/fixed-assets/Index.tsx:449"}, "properties": {"repobilityId": "2426d2429e976786", "scanner": "scanner-primary", "fingerprint": "be63fa71578dfa68", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/fixed-assets/Index.tsx"}, "region": {"startLine": 449}}}]}, {"ruleId": "scanner-4f7e98e2215a5b1c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/journals/Index.tsx:289"}, "properties": {"repobilityId": "2ab9c34d9af4f831", "scanner": "scanner-primary", "fingerprint": "4f7e98e2215a5b1c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/journals/Index.tsx"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-709e44c7aac81651", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/CashFlowForecast/Index.tsx:208"}, "properties": {"repobilityId": "79429bdcd4cfb051", "scanner": "scanner-primary", "fingerprint": "709e44c7aac81651", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/CashFlowForecast/Index.tsx"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-39600a17075bf951", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/recurring-charges/Index.tsx:197"}, "properties": {"repobilityId": "3e53e1b7adbbbe85", "scanner": "scanner-primary", "fingerprint": "39600a17075bf951", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/recurring-charges/Index.tsx"}, "region": {"startLine": 197}}}]}, {"ruleId": "scanner-c90c7e361e53347c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/audit-exports/Index.tsx:221"}, "properties": {"repobilityId": "1d83a472fb39b395", "scanner": "scanner-primary", "fingerprint": "c90c7e361e53347c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/audit-exports/Index.tsx"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-cd68b359d0306ab3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/vendors/Index.tsx:279"}, "properties": {"repobilityId": "c3351965ea1cc08e", "scanner": "scanner-primary", "fingerprint": "cd68b359d0306ab3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/vendors/Index.tsx"}, "region": {"startLine": 279}}}]}, {"ruleId": "scanner-c2591633683e312e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/gst-returns/Index.tsx:318"}, "properties": {"repobilityId": "ded8d3a85f739917", "scanner": "scanner-primary", "fingerprint": "c2591633683e312e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/gst-returns/Index.tsx"}, "region": {"startLine": 318}}}]}, {"ruleId": "scanner-1ad751f0bb20689e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/IrdFilings/Index.tsx:447"}, "properties": {"repobilityId": "984509eac7003c77", "scanner": "scanner-primary", "fingerprint": "1ad751f0bb20689e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/IrdFilings/Index.tsx"}, "region": {"startLine": 447}}}]}, {"ruleId": "scanner-7d0aa1e49b9c0cce", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-transactions/Index.tsx:541"}, "properties": {"repobilityId": "16c16bd977c6f628", "scanner": "scanner-primary", "fingerprint": "7d0aa1e49b9c0cce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/bank-transactions/Index.tsx"}, "region": {"startLine": 541}}}]}, {"ruleId": "scanner-c550187df34e39fd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bills/Index.tsx:315"}, "properties": {"repobilityId": "9543498904d1e8b3", "scanner": "scanner-primary", "fingerprint": "c550187df34e39fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/bills/Index.tsx"}, "region": {"startLine": 315}}}]}, {"ruleId": "scanner-0bee5e38c3410d84", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/billing/Index.tsx:194"}, "properties": {"repobilityId": "a9e54fd723f31dc3", "scanner": "scanner-primary", "fingerprint": "0bee5e38c3410d84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/billing/Index.tsx"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-76f216804cd5809c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/fx-revaluations/Index.tsx:211"}, "properties": {"repobilityId": "8f5d29cd5c4a1bf3", "scanner": "scanner-primary", "fingerprint": "76f216804cd5809c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/fx-revaluations/Index.tsx"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-af14ea0b3e5f695c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/price-books/Index.tsx:186"}, "properties": {"repobilityId": "6e83d64d6050cd09", "scanner": "scanner-primary", "fingerprint": "af14ea0b3e5f695c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/price-books/Index.tsx"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-84bab36a7c3714b2", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/credit-notes/Index.tsx:215"}, "properties": {"repobilityId": "9d066fcce452f86b", "scanner": "scanner-primary", "fingerprint": "84bab36a7c3714b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/credit-notes/Index.tsx"}, "region": {"startLine": 215}}}]}, {"ruleId": "scanner-7e255dbfff46f073", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/eftpos/Batches.tsx:287"}, "properties": {"repobilityId": "0730381f41ac7684", "scanner": "scanner-primary", "fingerprint": "7e255dbfff46f073", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/eftpos/Batches.tsx"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-b44a20439dcb29d3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-reconciliation/Index.tsx:278"}, "properties": {"repobilityId": "a93f911bf42d35b6", "scanner": "scanner-primary", "fingerprint": "b44a20439dcb29d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/bank-reconciliation/Index.tsx"}, "region": {"startLine": 278}}}]}, {"ruleId": "scanner-bb1a772a83d3f197", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/payment-runs/Index.tsx:198"}, "properties": {"repobilityId": "6c478eb88358ee2c", "scanner": "scanner-primary", "fingerprint": "bb1a772a83d3f197", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/payment-runs/Index.tsx"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-f742f4a05a5d83ab", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/purchase-orders/Index.tsx:205"}, "properties": {"repobilityId": "8f9f9032fb77c14f", "scanner": "scanner-primary", "fingerprint": "f742f4a05a5d83ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/purchase-orders/Index.tsx"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-5c0c7f671bed73ca", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/bank-feeds/Logs.tsx:162"}, "properties": {"repobilityId": "348e761d717b4543", "scanner": "scanner-primary", "fingerprint": "5c0c7f671bed73ca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/bank-feeds/Logs.tsx"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-d27c31ce23ed8f68", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/quotes/Index.tsx:208"}, "properties": {"repobilityId": "a6868b29a0cd562a", "scanner": "scanner-primary", "fingerprint": "d27c31ce23ed8f68", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/quotes/Index.tsx"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-63318dd8e303fab9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/payment-matching/Index.tsx:411"}, "properties": {"repobilityId": "62d5e79210f49560", "scanner": "scanner-primary", "fingerprint": "63318dd8e303fab9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/payment-matching/Index.tsx"}, "region": {"startLine": 411}}}]}, {"ruleId": "scanner-f47373e8e6843aa8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/finance/invoices/Index.tsx:330"}, "properties": {"repobilityId": "deb65155e6dbd807", "scanner": "scanner-primary", "fingerprint": "f47373e8e6843aa8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/finance/invoices/Index.tsx"}, "region": {"startLine": 330}}}]}, {"ruleId": "scanner-83d2dbb2278fc92b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/first-aid/index.tsx:566"}, "properties": {"repobilityId": "7430de729319b8c6", "scanner": "scanner-primary", "fingerprint": "83d2dbb2278fc92b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/first-aid/index.tsx"}, "region": {"startLine": 566}}}]}, {"ruleId": "scanner-bd93ea36d764ba1f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/procedures/index.tsx:338"}, "properties": {"repobilityId": "cc4eed03939bc546", "scanner": "scanner-primary", "fingerprint": "bd93ea36d764ba1f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/procedures/index.tsx"}, "region": {"startLine": 338}}}]}, {"ruleId": "scanner-ebdfeafa62949f76", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/lone-workers/index.tsx:492"}, "properties": {"repobilityId": "b19eb04952da3c61", "scanner": "scanner-primary", "fingerprint": "ebdfeafa62949f76", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/lone-workers/index.tsx"}, "region": {"startLine": 492}}}]}, {"ruleId": "scanner-479daf3244facbbb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/drills/index.tsx:430"}, "properties": {"repobilityId": "28b531dc0fdfaa17", "scanner": "scanner-primary", "fingerprint": "479daf3244facbbb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/drills/index.tsx"}, "region": {"startLine": 430}}}]}, {"ruleId": "scanner-842707b76bfbfe61", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/substances/index.tsx:362"}, "properties": {"repobilityId": "bbddd1130aa0dcbe", "scanner": "scanner-primary", "fingerprint": "842707b76bfbfe61", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/substances/index.tsx"}, "region": {"startLine": 362}}}]}, {"ruleId": "scanner-83e7d3394ece6c9d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/restraints/index.tsx:915"}, "properties": {"repobilityId": "89f6ec579d955a88", "scanner": "scanner-primary", "fingerprint": "83e7d3394ece6c9d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/restraints/index.tsx"}, "region": {"startLine": 915}}}]}, {"ruleId": "scanner-c37e9132aaf20e03", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/ppe/index.tsx:698"}, "properties": {"repobilityId": "fb21ecb791a578d3", "scanner": "scanner-primary", "fingerprint": "c37e9132aaf20e03", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/ppe/index.tsx"}, "region": {"startLine": 698}}}]}, {"ruleId": "scanner-609e91b36b3e4429", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/health-safety/injuries/index.tsx:341"}, "properties": {"repobilityId": "4c2ee62631259d32", "scanner": "scanner-primary", "fingerprint": "609e91b36b3e4429", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/health-safety/injuries/index.tsx"}, "region": {"startLine": 341}}}]}, {"ruleId": "scanner-bd87bc0faaba4839", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/hr/onboarding/emails.tsx:481"}, "properties": {"repobilityId": "e89bef2b26ca47c9", "scanner": "scanner-primary", "fingerprint": "bd87bc0faaba4839", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/hr/onboarding/emails.tsx"}, "region": {"startLine": 481}}}]}, {"ruleId": "scanner-091ffa637d994b9b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/portal/calendar.tsx:319"}, "properties": {"repobilityId": "f56fb178c50945e7", "scanner": "scanner-primary", "fingerprint": "091ffa637d994b9b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/portal/calendar.tsx"}, "region": {"startLine": 319}}}]}, {"ruleId": "scanner-ed13c6993fc91caa", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/reports/module.tsx:51"}, "properties": {"repobilityId": "e5418f0af1633c74", "scanner": "scanner-primary", "fingerprint": "ed13c6993fc91caa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/reports/module.tsx"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-98f89e7fa80283ec", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/maintenance-health.tsx:277"}, "properties": {"repobilityId": "70947b158635b101", "scanner": "scanner-primary", "fingerprint": "98f89e7fa80283ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/security-devices/maintenance-health.tsx"}, "region": {"startLine": 277}}}]}, {"ruleId": "scanner-b9bdc6a086208de4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/category.tsx:317"}, "properties": {"repobilityId": "7a1202222279a8c6", "scanner": "scanner-primary", "fingerprint": "b9bdc6a086208de4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/security-devices/category.tsx"}, "region": {"startLine": 317}}}]}, {"ruleId": "scanner-3a7ffa5fc1aa0ee3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/alerts-events.tsx:289"}, "properties": {"repobilityId": "15960e2ae5b787c3", "scanner": "scanner-primary", "fingerprint": "3a7ffa5fc1aa0ee3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/security-devices/alerts-events.tsx"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-53154af43dc01289", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/device-groups/show.tsx:224"}, "properties": {"repobilityId": "7453b70196579a67", "scanner": "scanner-primary", "fingerprint": "53154af43dc01289", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/security-devices/device-groups/show.tsx"}, "region": {"startLine": 224}}}]}, {"ruleId": "scanner-3090eaf50b11bad8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/device-groups/index.tsx:168"}, "properties": {"repobilityId": "7c31de2aa4dc8d61", "scanner": "scanner-primary", "fingerprint": "3090eaf50b11bad8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/security-devices/device-groups/index.tsx"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-87d4e346aefc6019", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/security-devices/devices/index.tsx:185"}, "properties": {"repobilityId": "b1042304b28eb004", "scanner": "scanner-primary", "fingerprint": "87d4e346aefc6019", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/security-devices/devices/index.tsx"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-ecc92853b0299e22", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/breaches.tsx:214"}, "properties": {"repobilityId": "9d36f950ea9931e6", "scanner": "scanner-primary", "fingerprint": "ecc92853b0299e22", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/privacy/breaches.tsx"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-e53289115fbbd594", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/retention.tsx:173"}, "properties": {"repobilityId": "dcef5918d4cc3a49", "scanner": "scanner-primary", "fingerprint": "e53289115fbbd594", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/privacy/retention.tsx"}, "region": {"startLine": 173}}}]}, {"ruleId": "scanner-0d32a1916e846bf2", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/dpia.tsx:230"}, "properties": {"repobilityId": "34ad94d8fc135b70", "scanner": "scanner-primary", "fingerprint": "0d32a1916e846bf2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/privacy/dpia.tsx"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-52cd10100c487030", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/requests.tsx:259"}, "properties": {"repobilityId": "a3973b254ef754c5", "scanner": "scanner-primary", "fingerprint": "52cd10100c487030", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/privacy/requests.tsx"}, "region": {"startLine": 259}}}]}, {"ruleId": "scanner-e8b296c5386d1f44", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/privacy/legal-holds.tsx:200"}, "properties": {"repobilityId": "0102c8734a774da2", "scanner": "scanner-primary", "fingerprint": "e8b296c5386d1f44", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/privacy/legal-holds.tsx"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-d0094c80ba6517bb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/sites/hazards/index.tsx:623"}, "properties": {"repobilityId": "eaf96ba6d1fd26c0", "scanner": "scanner-primary", "fingerprint": "d0094c80ba6517bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/sites/hazards/index.tsx"}, "region": {"startLine": 623}}}]}, {"ruleId": "scanner-8bd1c3827171a3a4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in resources/js/pages/sites/feedback/Index.tsx:931"}, "properties": {"repobilityId": "6a58f4fa9374e146", "scanner": "scanner-primary", "fingerprint": "8bd1c3827171a3a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "resources/js/pages/sites/feedback/Index.tsx"}, "region": {"startLine": 931}}}]}, {"ruleId": "scanner-b7c413cb2907eb4d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/codemod-page-header.mjs:7"}, "properties": {"repobilityId": "c804ff5b20ce972d", "scanner": "scanner-primary", "fingerprint": "b7c413cb2907eb4d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/codemod-page-header.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-17d8dcb914e4a789", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/codemod-fleet-hero.mjs:5"}, "properties": {"repobilityId": "6f53c956427c2c45", "scanner": "scanner-primary", "fingerprint": "17d8dcb914e4a789", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/codemod-fleet-hero.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-5f8cb2f23e944689", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "59dcc65cd6591e5f", "scanner": "scanner-primary", "fingerprint": "5f8cb2f23e944689", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/database-bootstrap.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-5f8cb2f23e944689", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6f5d4dae265c1168", "scanner": "scanner-primary", "fingerprint": "5f8cb2f23e944689", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/database-bootstrap.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-5f8cb2f23e944689", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e1744f05616002ed", "scanner": "scanner-primary", "fingerprint": "5f8cb2f23e944689", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/database-bootstrap.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-266162aa2c525a31", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "48cdc55ebd779fb0", "scanner": "scanner-primary", "fingerprint": "266162aa2c525a31", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/lint.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-48dd1b55730d05c6", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "5e8f5fd393dd1618", "scanner": "scanner-primary", "fingerprint": "48dd1b55730d05c6", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/lint.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-24b7d46a15674d19", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "01cba8d4e81d0c92", "scanner": "scanner-primary", "fingerprint": "24b7d46a15674d19", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-24b7d46a15674d19", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7a6b37a6d7a0c86b", "scanner": "scanner-primary", "fingerprint": "24b7d46a15674d19", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-24b7d46a15674d19", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7c6318842ee7b464", "scanner": "scanner-primary", "fingerprint": "24b7d46a15674d19", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-24b7d46a15674d19", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3d958f3dba1e85ae", "scanner": "scanner-primary", "fingerprint": "24b7d46a15674d19", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual.yml"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-1a50467f36b413ec", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "aecc3f31ca3f42da", "scanner": "scanner-primary", "fingerprint": "1a50467f36b413ec", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tests.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-1a50467f36b413ec", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bea9864abc705eec", "scanner": "scanner-primary", "fingerprint": "1a50467f36b413ec", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tests.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-1a50467f36b413ec", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fc166fcb4bb93c1b", "scanner": "scanner-primary", "fingerprint": "1a50467f36b413ec", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tests.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-169a34f9c93059a4", "level": "note", "message": {"text": "Very large file: resources/js/components/app-sidebar.tsx (3174 lines)"}, "properties": {"repobilityId": "00393ca33ded8ba3", "scanner": "scanner-primary", "fingerprint": "169a34f9c93059a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-67c3b468fc9e36ea", "level": "note", "message": {"text": "Very large file: resources/js/components/rostering/calendar-pane.tsx (1679 lines)"}, "properties": {"repobilityId": "d8a822af7673e203", "scanner": "scanner-primary", "fingerprint": "67c3b468fc9e36ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c913e06eb47b3a31", "level": "note", "message": {"text": "Very large file: resources/js/components/rostering/template-dialogs.tsx (1594 lines)"}, "properties": {"repobilityId": "cc2599088bbeaceb", "scanner": "scanner-primary", "fingerprint": "c913e06eb47b3a31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7151351cf510ef81", "level": "note", "message": {"text": "Very large file: resources/js/components/clients/add-client-dialog.tsx (2765 lines)"}, "properties": {"repobilityId": "3a1957534e749ee0", "scanner": "scanner-primary", "fingerprint": "7151351cf510ef81", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d3a15cbccab163bc", "level": "note", "message": {"text": "Very large file: resources/js/components/clients/profile/flows.tsx (2810 lines)"}, "properties": {"repobilityId": "c68f0c20beadd50a", "scanner": "scanner-primary", "fingerprint": "d3a15cbccab163bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b3f4049736c2d5bc", "level": "note", "message": {"text": "Very large file: resources/js/components/sites/add-site-dialog.tsx (2367 lines)"}, "properties": {"repobilityId": "d081071dd99b09c0", "scanner": "scanner-primary", "fingerprint": "b3f4049736c2d5bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e3e04dfa70dcb8d3", "level": "note", "message": {"text": "Very large file: resources/js/components/timesheets/create-timesheet-dialog.tsx (1142 lines)"}, "properties": {"repobilityId": "cf5767a441bc7c24", "scanner": "scanner-primary", "fingerprint": "e3e04dfa70dcb8d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2261feaaef707853", "level": "note", "message": {"text": "Very large file: resources/js/pages/welcome.tsx (808 lines)"}, "properties": {"repobilityId": "63b53cd51e8a521b", "scanner": "scanner-primary", "fingerprint": "2261feaaef707853", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b5afecb8a2cd8c0c", "level": "note", "message": {"text": "Very large file: resources/js/pages/settings/service-contexts.tsx (1573 lines)"}, "properties": {"repobilityId": "73f5f341d73670c7", "scanner": "scanner-primary", "fingerprint": "b5afecb8a2cd8c0c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c0d26e554c02ea21", "level": "note", "message": {"text": "Very large file: resources/js/pages/settings/data.tsx (2402 lines)"}, "properties": {"repobilityId": "7f9d8753f41da7a4", "scanner": "scanner-primary", "fingerprint": "c0d26e554c02ea21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-18d169795118b083", "level": "note", "message": {"text": "Very large file: resources/js/pages/settings/profile.tsx (1349 lines)"}, "properties": {"repobilityId": "0fe3505e48dc76b8", "scanner": "scanner-primary", "fingerprint": "18d169795118b083", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9e07f7eb14af014c", "level": "note", "message": {"text": "Very large file: resources/js/pages/settings/access.tsx (1208 lines)"}, "properties": {"repobilityId": "03c99654d7d6fa6e", "scanner": "scanner-primary", "fingerprint": "9e07f7eb14af014c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5e0749fed4d5886e", "level": "note", "message": {"text": "Very large file: resources/js/pages/settings/notification-escalations.tsx (1277 lines)"}, "properties": {"repobilityId": "241c5b8f0ca93887", "scanner": "scanner-primary", "fingerprint": "5e0749fed4d5886e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2afd6b10f027c26f", "level": "note", "message": {"text": "Very large file: resources/js/pages/settings/branding.tsx (1835 lines)"}, "properties": {"repobilityId": "df413e3cf4181f38", "scanner": "scanner-primary", "fingerprint": "2afd6b10f027c26f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-47fed74a450af266", "level": "note", "message": {"text": "Very large file: resources/js/pages/settings/users/show.tsx (1078 lines)"}, "properties": {"repobilityId": "503378ec998b3537", "scanner": "scanner-primary", "fingerprint": "47fed74a450af266", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b9054e2ce860de5a", "level": "note", "message": {"text": "Very large file: resources/js/pages/control-room/shifts.tsx (1163 lines)"}, "properties": {"repobilityId": "cd94964b24a01335", "scanner": "scanner-primary", "fingerprint": "b9054e2ce860de5a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9d6782dead696d34", "level": "note", "message": {"text": "Very large file: resources/js/pages/control-room/settings.tsx (2244 lines)"}, "properties": {"repobilityId": "d6750d5212eaac21", "scanner": "scanner-primary", "fingerprint": "9d6782dead696d34", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e184a1c9bcdcd85", "level": "note", "message": {"text": "Very large file: resources/js/pages/control-room/show.tsx (1738 lines)"}, "properties": {"repobilityId": "06babe480525c5e4", "scanner": "scanner-primary", "fingerprint": "1e184a1c9bcdcd85", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b1810293ca129f0f", "level": "note", "message": {"text": "Very large file: resources/js/pages/control-room/index.tsx (1663 lines)"}, "properties": {"repobilityId": "c7234a289d56e6d7", "scanner": "scanner-primary", "fingerprint": "b1810293ca129f0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9e8f4a39c6554ada", "level": "note", "message": {"text": "Very large file: resources/js/pages/control-room/playbooks/show.tsx (1293 lines)"}, "properties": {"repobilityId": "430f3d2fa636aa9c", "scanner": "scanner-primary", "fingerprint": "9e8f4a39c6554ada", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-af0597526e3de4df", "level": "note", "message": {"text": "Very large file: resources/js/pages/control-room/playbooks/index.tsx (1038 lines)"}, "properties": {"repobilityId": "328908de3b81ccba", "scanner": "scanner-primary", "fingerprint": "af0597526e3de4df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fd6a330c079b5866", "level": "note", "message": {"text": "Very large file: resources/js/pages/notifications/index.tsx (934 lines)"}, "properties": {"repobilityId": "f75a13bbe175031a", "scanner": "scanner-primary", "fingerprint": "fd6a330c079b5866", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-584a4227fae12c99", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/care-plans/Show.tsx (1665 lines)"}, "properties": {"repobilityId": "7a2baf6493d23058", "scanner": "scanner-primary", "fingerprint": "584a4227fae12c99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8727c71df5ea2f0a", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/rostering/index.tsx (3231 lines)"}, "properties": {"repobilityId": "085de9d0b1d01a09", "scanner": "scanner-primary", "fingerprint": "8727c71df5ea2f0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fbf8b174c6fd1364", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/handovers/components/handover-wizard.tsx (1324 lines)"}, "properties": {"repobilityId": "efa76fca02bcaba5", "scanner": "scanner-primary", "fingerprint": "fbf8b174c6fd1364", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1406d078e09e41c", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/shifts/show.tsx (3678 lines)"}, "properties": {"repobilityId": "02960e0960a812f3", "scanner": "scanner-primary", "fingerprint": "e1406d078e09e41c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8d892cffd8b8fc7e", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/shifts/components/create-shift-dialog.tsx (1999 lines)"}, "properties": {"repobilityId": "794819e938ab0da3", "scanner": "scanner-primary", "fingerprint": "8d892cffd8b8fc7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fe6593c0d7b6d167", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/messages/Index.tsx (1413 lines)"}, "properties": {"repobilityId": "c5a9e404aff88a14", "scanner": "scanner-primary", "fingerprint": "fe6593c0d7b6d167", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d133c2e71720638e", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/clients/show.tsx (5475 lines)"}, "properties": {"repobilityId": "01aa1174f8ce91fc", "scanner": "scanner-primary", "fingerprint": "d133c2e71720638e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c4f2e5b8c85c1ec1", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/clients/medical.tsx (3336 lines)"}, "properties": {"repobilityId": "f597ec33961256af", "scanner": "scanner-primary", "fingerprint": "c4f2e5b8c85c1ec1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63b70508db22d929", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/clients/index.tsx (1723 lines)"}, "properties": {"repobilityId": "4e5de19f66ee061d", "scanner": "scanner-primary", "fingerprint": "63b70508db22d929", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d45a90ee27bce72", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/clients/documents.tsx (1336 lines)"}, "properties": {"repobilityId": "43caa0b8b24d6191", "scanner": "scanner-primary", "fingerprint": "5d45a90ee27bce72", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-93ede889ac5e3773", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx (3251 lines)"}, "properties": {"repobilityId": "18d3b6d74bd36db9", "scanner": "scanner-primary", "fingerprint": "93ede889ac5e3773", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7b279beb5bd29d48", "level": "note", "message": {"text": "Very large file: resources/js/pages/operations/service-agreements/Show.tsx (1405 lines)"}, "properties": {"repobilityId": "40e6eae7fa1be854", "scanner": "scanner-primary", "fingerprint": "7b279beb5bd29d48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d50723505cfbf683", "level": "note", "message": {"text": "Very large file: resources/js/pages/fleet-assets/transports/show.tsx (1728 lines)"}, "properties": {"repobilityId": "190c0377b94d4aa8", "scanner": "scanner-primary", "fingerprint": "d50723505cfbf683", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b2ffdae2a6011d83", "level": "note", "message": {"text": "Very large file: resources/js/pages/fleet-assets/transports/create.tsx (1072 lines)"}, "properties": {"repobilityId": "a3b8f06328c6d5ce", "scanner": "scanner-primary", "fingerprint": "b2ffdae2a6011d83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8ac0c58641e64668", "level": "note", "message": {"text": "Very large file: resources/js/pages/fleet-assets/assets/show.tsx (1196 lines)"}, "properties": {"repobilityId": "ee7fa33a2aefb7da", "scanner": "scanner-primary", "fingerprint": "8ac0c58641e64668", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-61bd126ca3a967ca", "level": "note", "message": {"text": "Very large file: resources/js/pages/fleet-assets/outings/create.tsx (865 lines)"}, "properties": {"repobilityId": "c585ea1fd45be31d", "scanner": "scanner-primary", "fingerprint": "61bd126ca3a967ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f17332c240b34425", "level": "note", "message": {"text": "Very large file: resources/js/pages/Governance/Budgets/Show.tsx (1305 lines)"}, "properties": {"repobilityId": "ce6cc233bd0ae1d1", "scanner": "scanner-primary", "fingerprint": "f17332c240b34425", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-31b22398c33143cd", "level": "note", "message": {"text": "Very large file: resources/js/pages/Governance/Meetings/Show.tsx (1117 lines)"}, "properties": {"repobilityId": "0441e0f671588091", "scanner": "scanner-primary", "fingerprint": "31b22398c33143cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2951b734adc6612f", "level": "note", "message": {"text": "Very large file: resources/js/pages/assets/show.tsx (1354 lines)"}, "properties": {"repobilityId": "9376b2d95187abec", "scanner": "scanner-primary", "fingerprint": "2951b734adc6612f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9fad0b83c400b711", "level": "note", "message": {"text": "Very large file: resources/js/pages/my-day/_dialogs.tsx (2077 lines)"}, "properties": {"repobilityId": "afeede1f5aafdbbc", "scanner": "scanner-primary", "fingerprint": "9fad0b83c400b711", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cb921dca476da383", "level": "note", "message": {"text": "Very large file: resources/js/pages/emar/Index.tsx (1428 lines)"}, "properties": {"repobilityId": "7066236338be304e", "scanner": "scanner-primary", "fingerprint": "cb921dca476da383", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c8254e3c013f88ba", "level": "note", "message": {"text": "Very large file: resources/js/pages/incidents/show.tsx (2196 lines)"}, "properties": {"repobilityId": "50bd0bcd366be5cd", "scanner": "scanner-primary", "fingerprint": "c8254e3c013f88ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7c9816bc29f7297e", "level": "note", "message": {"text": "Very large file: resources/js/pages/Roadmap/Dashboard.tsx (2750 lines)"}, "properties": {"repobilityId": "9cfba2db32a5adc0", "scanner": "scanner-primary", "fingerprint": "7c9816bc29f7297e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ffa3dd5293d70c99", "level": "note", "message": {"text": "Very large file: resources/js/pages/health-safety/dashboard.tsx (1675 lines)"}, "properties": {"repobilityId": "4184d1ee8dc23a46", "scanner": "scanner-primary", "fingerprint": "ffa3dd5293d70c99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-585815971dc59901", "level": "note", "message": {"text": "Very large file: resources/js/pages/health-safety/worker-participation/index.tsx (4006 lines)"}, "properties": {"repobilityId": "f06d65316c9cb05a", "scanner": "scanner-primary", "fingerprint": "585815971dc59901", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c6d3a655c945c3c0", "level": "note", "message": {"text": "Very large file: resources/js/pages/health-safety/restraints/index.tsx (1333 lines)"}, "properties": {"repobilityId": "44d36a9c9dd86ee3", "scanner": "scanner-primary", "fingerprint": "c6d3a655c945c3c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-474d0f3436dc4ba9", "level": "note", "message": {"text": "Very large file: resources/js/pages/health-safety/ppe/index.tsx (1610 lines)"}, "properties": {"repobilityId": "a85eaa90d76c99b9", "scanner": "scanner-primary", "fingerprint": "474d0f3436dc4ba9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7e433078b5f0edd1", "level": "note", "message": {"text": "Very large file: resources/js/pages/attendance/index.tsx (1592 lines)"}, "properties": {"repobilityId": "db9980ded5a69ee5", "scanner": "scanner-primary", "fingerprint": "7e433078b5f0edd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8ae994a4c9b8ae2d", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/settings/automations.tsx (1076 lines)"}, "properties": {"repobilityId": "ceab76735ef827c7", "scanner": "scanner-primary", "fingerprint": "8ae994a4c9b8ae2d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d64b1d3c11e946a0", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/employees/show.tsx (3016 lines)"}, "properties": {"repobilityId": "af93926cce6379c6", "scanner": "scanner-primary", "fingerprint": "d64b1d3c11e946a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b2099ec1b4fad22a", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/employees/documents.tsx (1319 lines)"}, "properties": {"repobilityId": "08c88edebdf234f1", "scanner": "scanner-primary", "fingerprint": "b2099ec1b4fad22a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-20b07c95609ec96f", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/goals/show.tsx (1387 lines)"}, "properties": {"repobilityId": "3ab5d0760e9c1350", "scanner": "scanner-primary", "fingerprint": "20b07c95609ec96f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6f1f51624883bd4f", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/directory/show.tsx (1147 lines)"}, "properties": {"repobilityId": "19790b2386c70349", "scanner": "scanner-primary", "fingerprint": "6f1f51624883bd4f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d85055297860df2c", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/performance/index.tsx (1206 lines)"}, "properties": {"repobilityId": "dc90e85e0c632ab2", "scanner": "scanner-primary", "fingerprint": "d85055297860df2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea0500f04a7ea3e9", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/candidates/show.tsx (2328 lines)"}, "properties": {"repobilityId": "2b67b2ef1db88696", "scanner": "scanner-primary", "fingerprint": "ea0500f04a7ea3e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-38412ced90dfa8e3", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/payroll/index.tsx (1017 lines)"}, "properties": {"repobilityId": "1eab002ded15ec39", "scanner": "scanner-primary", "fingerprint": "38412ced90dfa8e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-91ee7c99b1cbd3c8", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/recruitment/jobs.tsx (1332 lines)"}, "properties": {"repobilityId": "e30edfc42f37ad85", "scanner": "scanner-primary", "fingerprint": "91ee7c99b1cbd3c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2dd54b4558a028c9", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/onboarding/index.tsx (944 lines)"}, "properties": {"repobilityId": "1021f64771d0f706", "scanner": "scanner-primary", "fingerprint": "2dd54b4558a028c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ff5c1bd45ceeb8e5", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/time/index.tsx (1613 lines)"}, "properties": {"repobilityId": "c9aea35a2c5c8dbb", "scanner": "scanner-primary", "fingerprint": "ff5c1bd45ceeb8e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-71280f50af5bfe71", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/my/payslips.tsx (935 lines)"}, "properties": {"repobilityId": "80ea04e2e44367a6", "scanner": "scanner-primary", "fingerprint": "71280f50af5bfe71", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2225916738f20587", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/wellbeing/index.tsx (1208 lines)"}, "properties": {"repobilityId": "0822a310bde953bb", "scanner": "scanner-primary", "fingerprint": "2225916738f20587", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-206d57b16a64eb29", "level": "note", "message": {"text": "Very large file: resources/js/pages/hr/leave/index.tsx (1387 lines)"}, "properties": {"repobilityId": "0858e2247eeddd6c", "scanner": "scanner-primary", "fingerprint": "206d57b16a64eb29", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-413eaf990e1dae7b", "level": "note", "message": {"text": "Very large file: resources/js/pages/clients/medical.tsx (1706 lines)"}, "properties": {"repobilityId": "57b913f37c9a8a2b", "scanner": "scanner-primary", "fingerprint": "413eaf990e1dae7b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e6a69f7af0ea3e19", "level": "note", "message": {"text": "Very large file: resources/js/pages/portal/messages.tsx (1690 lines)"}, "properties": {"repobilityId": "5435ebdfca7d5e89", "scanner": "scanner-primary", "fingerprint": "e6a69f7af0ea3e19", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f31c8f29d8b3d798", "level": "note", "message": {"text": "Very large file: resources/js/pages/portal/family-dashboard.tsx (2227 lines)"}, "properties": {"repobilityId": "0eeff64fe55cef7e", "scanner": "scanner-primary", "fingerprint": "f31c8f29d8b3d798", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b9e3c1030c5db2e5", "level": "note", "message": {"text": "Very large file: resources/js/pages/meds/today/index.tsx (1891 lines)"}, "properties": {"repobilityId": "d192f3cfaa00799b", "scanner": "scanner-primary", "fingerprint": "b9e3c1030c5db2e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-362dae7256ab7439", "level": "note", "message": {"text": "Very large file: resources/js/pages/security-devices/integrations/queclink-hub.tsx (4267 lines)"}, "properties": {"repobilityId": "7e8af01849b22a70", "scanner": "scanner-primary", "fingerprint": "362dae7256ab7439", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b0b27a8528e38cb8", "level": "note", "message": {"text": "Very large file: resources/js/pages/security-devices/devices/show.tsx (1503 lines)"}, "properties": {"repobilityId": "0b03115dffa0c1e7", "scanner": "scanner-primary", "fingerprint": "b0b27a8528e38cb8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6fa1d969fbbeb6c2", "level": "note", "message": {"text": "Very large file: resources/js/pages/safeguarding/show.tsx (1903 lines)"}, "properties": {"repobilityId": "640dc1b00a98555e", "scanner": "scanner-primary", "fingerprint": "6fa1d969fbbeb6c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c3fd98d5b99ef07e", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/show.tsx (6163 lines)"}, "properties": {"repobilityId": "0ff3507286cc24e6", "scanner": "scanner-primary", "fingerprint": "c3fd98d5b99ef07e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-288daf4e57f53161", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/_wizard.tsx (2106 lines)"}, "properties": {"repobilityId": "94a13aa9c4c6becb", "scanner": "scanner-primary", "fingerprint": "288daf4e57f53161", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6dad392fdf43647a", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/index.tsx (1901 lines)"}, "properties": {"repobilityId": "e75a7f589d048a95", "scanner": "scanner-primary", "fingerprint": "6dad392fdf43647a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-215e1f94d2ca6406", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/hardware/index.tsx (1055 lines)"}, "properties": {"repobilityId": "2212af903323b875", "scanner": "scanner-primary", "fingerprint": "215e1f94d2ca6406", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6d20f399835e58e0", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/compliance/Index.tsx (1202 lines)"}, "properties": {"repobilityId": "8d5a3014093ab9e8", "scanner": "scanner-primary", "fingerprint": "6d20f399835e58e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-10081788d96a687a", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/vendors-credentials/global.tsx (1950 lines)"}, "properties": {"repobilityId": "2033c14be99a13dd", "scanner": "scanner-primary", "fingerprint": "10081788d96a687a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4c3714a7a3c659a4", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/meal-planner/_dialogs.tsx (1333 lines)"}, "properties": {"repobilityId": "6e958449f1baa29c", "scanner": "scanner-primary", "fingerprint": "4c3714a7a3c659a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-eaa3eda29f84797c", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/meal-planner/_calendar-grid.tsx (1368 lines)"}, "properties": {"repobilityId": "945af910cd30972b", "scanner": "scanner-primary", "fingerprint": "eaa3eda29f84797c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-14b5e38ea9a9ad27", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/meal-planner/_hero.tsx (856 lines)"}, "properties": {"repobilityId": "c26c2da7f461533e", "scanner": "scanner-primary", "fingerprint": "14b5e38ea9a9ad27", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c58e5ac6d967bec3", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/rooms/index.tsx (1349 lines)"}, "properties": {"repobilityId": "8012d3d9aa55d23f", "scanner": "scanner-primary", "fingerprint": "c58e5ac6d967bec3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6e65e60f25ebd940", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/plan/_inspector.tsx (1474 lines)"}, "properties": {"repobilityId": "f33d1084cdfde4fb", "scanner": "scanner-primary", "fingerprint": "6e65e60f25ebd940", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-102c07e2bc53dd37", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/plan/_canvas.tsx (3159 lines)"}, "properties": {"repobilityId": "e7668ae2c50dcd35", "scanner": "scanner-primary", "fingerprint": "102c07e2bc53dd37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3e1b26073b1667e9", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/credentials/_dialogs.tsx (1368 lines)"}, "properties": {"repobilityId": "a43aaae813c14123", "scanner": "scanner-primary", "fingerprint": "3e1b26073b1667e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0bb02dcbfe736be0", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/calendar/_parts.tsx (1874 lines)"}, "properties": {"repobilityId": "06b7f7856689bf86", "scanner": "scanner-primary", "fingerprint": "0bb02dcbfe736be0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-48bb7e58ce610931", "level": "note", "message": {"text": "Very large file: resources/js/pages/sites/calendar/SiteCalendar.tsx (3628 lines)"}, "properties": {"repobilityId": "9694790508cfd048", "scanner": "scanner-primary", "fingerprint": "48bb7e58ce610931", "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": "eb68759c08d9f180", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "7b515616fa924ecf", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "c23de196bc02a3cd", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "5056cbbc24413ea5", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "b9e50ee29b61e396", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "a53bcceefe7645c3", "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": "e7e2df39fcaa0bd3", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-fdc6747395794b0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in playwright.config.ts:58"}, "properties": {"repobilityId": "ec77f4a0531ea002", "scanner": "scanner-primary", "fingerprint": "fdc6747395794b0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b653a73db60559d4", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/e2e/global-setup.ts:59"}, "properties": {"repobilityId": "421bce47408b39d1", "scanner": "scanner-primary", "fingerprint": "b653a73db60559d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-425cbb20dff6929e", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/components/end-of-shift-checklist.tsx:606"}, "properties": {"repobilityId": "8743876ef6343c38", "scanner": "scanner-primary", "fingerprint": "425cbb20dff6929e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-322f066ab4aa8af2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/fleet-map.tsx:103"}, "properties": {"repobilityId": "e0e82bd044e25e3c", "scanner": "scanner-primary", "fingerprint": "322f066ab4aa8af2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3dd7c3e180080b89", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/components/app-sidebar.tsx:760"}, "properties": {"repobilityId": "8d95ec28985ff38e", "scanner": "scanner-primary", "fingerprint": "3dd7c3e180080b89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afbe0ec923ea9263", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/client-edit-dialog.tsx:83"}, "properties": {"repobilityId": "3efd7e12d851e338", "scanner": "scanner-primary", "fingerprint": "afbe0ec923ea9263", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-abc19a13221b86dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/assign-worker-dialog.tsx:61"}, "properties": {"repobilityId": "397e3c6d8d047b29", "scanner": "scanner-primary", "fingerprint": "abc19a13221b86dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b08c777610cd7e5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/rostering/reassign-dialog.tsx:115"}, "properties": {"repobilityId": "9fbb9f1d86fb4edc", "scanner": "scanner-primary", "fingerprint": "b08c777610cd7e5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a090320f65d9c8dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/components/rostering/week-picker.tsx:171"}, "properties": {"repobilityId": "996df330d863b595", "scanner": "scanner-primary", "fingerprint": "a090320f65d9c8dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b60a3b77105ee627", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/components/rostering/day-detail-dialog.tsx:439"}, "properties": {"repobilityId": "d2694be949bf0a08", "scanner": "scanner-primary", "fingerprint": "b60a3b77105ee627", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a9636d649eaa147", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/components/rostering/calendar-pane.tsx:99"}, "properties": {"repobilityId": "3c385a31994891da", "scanner": "scanner-primary", "fingerprint": "1a9636d649eaa147", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-39a7cc5ec1242b95", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/components/finance/wizard.ts:3"}, "properties": {"repobilityId": "1087a611c75d75a4", "scanner": "scanner-primary", "fingerprint": "39a7cc5ec1242b95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-210b755def7e3d1e", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/components/page/page-hero-stats.tsx:26"}, "properties": {"repobilityId": "75822e8c71b3456a", "scanner": "scanner-primary", "fingerprint": "210b755def7e3d1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4aba744dece1ed68", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/components/timesheets/create-timesheet-dialog.tsx:376"}, "properties": {"repobilityId": "be7a4125b9fcd15c", "scanner": "scanner-primary", "fingerprint": "4aba744dece1ed68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7170bb2e6a439605", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/components/timesheets/timesheets-hero.tsx:92"}, "properties": {"repobilityId": "f01330d0f8ca74e7", "scanner": "scanner-primary", "fingerprint": "7170bb2e6a439605", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a22e7cba5b2ac857", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/pages/settings/notification-escalations.tsx:371"}, "properties": {"repobilityId": "f8f3f69bad849108", "scanner": "scanner-primary", "fingerprint": "a22e7cba5b2ac857", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db6111c96a45f2d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/control-room/messaging.tsx:153"}, "properties": {"repobilityId": "b781cd12bad0d9a7", "scanner": "scanner-primary", "fingerprint": "db6111c96a45f2d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1429a68305303062", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/pages/operations/rostering/index.tsx:1353"}, "properties": {"repobilityId": "8b1d2023a83d13d2", "scanner": "scanner-primary", "fingerprint": "1429a68305303062", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e15da33e518f6b8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:348"}, "properties": {"repobilityId": "7271c79caef83588", "scanner": "scanner-primary", "fingerprint": "e15da33e518f6b8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d10e726356f8827", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/shifts/components/create-shift-dialog.tsx:581"}, "properties": {"repobilityId": "649e8f44fca107d1", "scanner": "scanner-primary", "fingerprint": "2d10e726356f8827", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b75398338401b20b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/shifts/components/use-create-shift-launcher.tsx:104"}, "properties": {"repobilityId": "149ae1658269bbee", "scanner": "scanner-primary", "fingerprint": "b75398338401b20b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c54dedac7fab5240", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/calendar.tsx:327"}, "properties": {"repobilityId": "51a6afe02daedca8", "scanner": "scanner-primary", "fingerprint": "c54dedac7fab5240", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf9d2c552a8d19cc", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/pages/operations/clients/tabs/timeline-tab.tsx:412"}, "properties": {"repobilityId": "0376d83ea12f49e1", "scanner": "scanner-primary", "fingerprint": "bf9d2c552a8d19cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ec78e1d801b0b86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/tabs/timeline-tab.tsx:198"}, "properties": {"repobilityId": "3f44c78c1dd9ce7f", "scanner": "scanner-primary", "fingerprint": "1ec78e1d801b0b86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc2306f8f0b6581a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2730"}, "properties": {"repobilityId": "aea5dec88ab46c4f", "scanner": "scanner-primary", "fingerprint": "dc2306f8f0b6581a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f925a75d5d9275c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/fleet-assets/reports/reimbursement.tsx:33"}, "properties": {"repobilityId": "56621c404ae7efff", "scanner": "scanner-primary", "fingerprint": "0f925a75d5d9275c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1284ecaa0c841a8e", "level": "none", "message": {"text": "Commented-code block (8 lines) in resources/js/pages/my-day/index.tsx:322"}, "properties": {"repobilityId": "bd031cbed3ba8dcf", "scanner": "scanner-primary", "fingerprint": "1284ecaa0c841a8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6380ad08b1001eda", "level": "none", "message": {"text": "Commented-code block (9 lines) in resources/js/pages/my-day/components/my-day-hero.tsx:286"}, "properties": {"repobilityId": "cc70e10892815c90", "scanner": "scanner-primary", "fingerprint": "6380ad08b1001eda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96cdf960bcbfc0e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/security-devices/integrations/queclink-hub.tsx:506"}, "properties": {"repobilityId": "7cd1a6cd24e4af8b", "scanner": "scanner-primary", "fingerprint": "96cdf960bcbfc0e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c758b051408d6f59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/vendors-credentials/_audit-dialog.tsx:118"}, "properties": {"repobilityId": "e583974ac8aa1027", "scanner": "scanner-primary", "fingerprint": "c758b051408d6f59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-24d83d87ae663717", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:74"}, "properties": {"repobilityId": "b2a29a95aac22767", "scanner": "scanner-primary", "fingerprint": "24d83d87ae663717", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed4693b10ced0626", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/pages/sites/plan/_builder-dialog.tsx:107"}, "properties": {"repobilityId": "7e5c17cc8518337f", "scanner": "scanner-primary", "fingerprint": "ed4693b10ced0626", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13bef30be5898037", "level": "none", "message": {"text": "Commented-code block (6 lines) in resources/js/pages/sites/plan/_canvas.tsx:2093"}, "properties": {"repobilityId": "b8b76b3dd07e0adf", "scanner": "scanner-primary", "fingerprint": "13bef30be5898037", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fa7e9761075c677", "level": "none", "message": {"text": "Commented-code block (5 lines) in resources/js/pages/sites/calendar/SiteCalendar.tsx:675"}, "properties": {"repobilityId": "92ea498ff3ed3d6e", "scanner": "scanner-primary", "fingerprint": "4fa7e9761075c677", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd477029cb9a47f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/hooks/use-web-push.ts:62"}, "properties": {"repobilityId": "32ca62a37d24963c", "scanner": "scanner-primary", "fingerprint": "dd477029cb9a47f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b946634a573a07ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 resources/js/hooks/use-two-factor-auth.ts:16"}, "properties": {"repobilityId": "083f83f0ee5d6d53", "scanner": "scanner-primary", "fingerprint": "b946634a573a07ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5650e4e6f2c6df11", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/codemod-page-header.mjs:1"}, "properties": {"repobilityId": "3b2d32154285cd9c", "scanner": "scanner-primary", "fingerprint": "5650e4e6f2c6df11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2eafc3188c36bb02", "level": "none", "message": {"text": "3 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "bd934ba112b02ffa", "scanner": "scanner-primary", "fingerprint": "2eafc3188c36bb02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-8459bac88596c4b5", "level": "error", "message": {"text": "Dangling fetch: POST /fleet/maps/usage (resources/js/components/fleet-map.tsx:103)"}, "properties": {"repobilityId": "e8f89cea9bb36c4e", "scanner": "scanner-primary", "fingerprint": "8459bac88596c4b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88392d2c57f64572", "level": "error", "message": {"text": "Dangling fetch: GET /operations/clients/${clientId}/location/history?${params.toString()} (resources/js/components/client-location-tab.tsx:277)"}, "properties": {"repobilityId": "2f420c755c2ae7d0", "scanner": "scanner-primary", "fingerprint": "88392d2c57f64572", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a102535c73538bc", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/credentials/${credentialId}/totp/code (resources/js/components/credential-totp-display.tsx:30)"}, "properties": {"repobilityId": "a4ad0796f1730e67", "scanner": "scanner-primary", "fingerprint": "2a102535c73538bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f609f951540ca9b2", "level": "error", "message": {"text": "Dangling fetch: GET /rag/clients (resources/js/components/global-query-bar.tsx:76)"}, "properties": {"repobilityId": "a07a05dc1d52feed", "scanner": "scanner-primary", "fingerprint": "f609f951540ca9b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96dfc25d99881378", "level": "error", "message": {"text": "Dangling fetch: POST /rag/ask (resources/js/components/global-query-bar.tsx:122)"}, "properties": {"repobilityId": "467b723fe8c74b85", "scanner": "scanner-primary", "fingerprint": "96dfc25d99881378", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99fbff9b2a1caf8a", "level": "error", "message": {"text": "Dangling fetch: GET /operations/clients/${clientId}/edit?modal=1 (resources/js/components/client-edit-dialog.tsx:83)"}, "properties": {"repobilityId": "37e74200a08d1bf2", "scanner": "scanner-primary", "fingerprint": "99fbff9b2a1caf8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88e6fc76d98aa140", "level": "error", "message": {"text": "Dangling fetch: GET /operations/clients/${client.id}/assignments?modal=1 (resources/js/components/assign-worker-dialog.tsx:61)"}, "properties": {"repobilityId": "f548d107381df95e", "scanner": "scanner-primary", "fingerprint": "88e6fc76d98aa140", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-641953fbd41609b4", "level": "error", "message": {"text": "Dangling fetch: GET /operations/shifts/${shiftId}/candidates (resources/js/components/rostering/reassign-dialog.tsx:115)"}, "properties": {"repobilityId": "13040143624af0b9", "scanner": "scanner-primary", "fingerprint": "641953fbd41609b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e42bc7ecfed0d261", "level": "error", "message": {"text": "Dangling fetch: GET /operations/rostering/calendar/events?${params.toString()} (resources/js/components/rostering/calendar-pane.tsx:1018)"}, "properties": {"repobilityId": "78ee8d62d12bccfc", "scanner": "scanner-primary", "fingerprint": "e42bc7ecfed0d261", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d270856717982b6f", "level": "error", "message": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${activeRow.medication.id}/scan-verify (resources/js/components/operations/shift-medication-card.tsx:247)"}, "properties": {"repobilityId": "b934d5ee0c7d1a26", "scanner": "scanner-primary", "fingerprint": "d270856717982b6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-82592033e9bfa1b3", "level": "error", "message": {"text": "Dangling fetch: GET /emar/audit/event/${encodeURIComponent(event.id)}/integrity (resources/js/components/emar/medication-event-drawer.tsx:144)"}, "properties": {"repobilityId": "67d5fe19b3c36d33", "scanner": "scanner-primary", "fingerprint": "82592033e9bfa1b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e685baeeec7cf70c", "level": "error", "message": {"text": "Dangling fetch: POST /clients/${ctx.clientId}/calendar/appointments (resources/js/components/clients/profile/flows.tsx:1584)"}, "properties": {"repobilityId": "b1931802b1b46085", "scanner": "scanner-primary", "fingerprint": "e685baeeec7cf70c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77a9a430878c64e8", "level": "error", "message": {"text": "Dangling fetch: POST /operations/clients/${clientId}/family-chat (resources/js/components/clients/profile/family-chat.tsx:60)"}, "properties": {"repobilityId": "0a0497c40d31861c", "scanner": "scanner-primary", "fingerprint": "77a9a430878c64e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b4be4dd7ed596b9", "level": "error", "message": {"text": "Dangling fetch: GET /clients/${clientId}/behaviour/abc?page=${p} (resources/js/components/clients/profile/tabs/behaviour-abc.tsx:83)"}, "properties": {"repobilityId": "4c2ee4e52cd22c2d", "scanner": "scanner-primary", "fingerprint": "7b4be4dd7ed596b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e10a4cd2594f8336", "level": "error", "message": {"text": "Dangling fetch: GET /api/medications/clients/${clientId}/medications/${medicationId}/versions (resources/js/components/medications/MedicationVersionHistory.tsx:48)"}, "properties": {"repobilityId": "9d2c8e62085ae32f", "scanner": "scanner-primary", "fingerprint": "e10a4cd2594f8336", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-162a46bd4a7d8738", "level": "error", "message": {"text": "Dangling fetch: GET /api/medications/interactions (resources/js/components/medications/DrugInteractionManager.tsx:55)"}, "properties": {"repobilityId": "760fbab0001a2918", "scanner": "scanner-primary", "fingerprint": "162a46bd4a7d8738", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f6d7ef3bacbbfe46", "level": "error", "message": {"text": "Dangling fetch: POST /api/medications/interactions (resources/js/components/medications/DrugInteractionManager.tsx:67)"}, "properties": {"repobilityId": "faedcbb69de325e1", "scanner": "scanner-primary", "fingerprint": "f6d7ef3bacbbfe46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4c4482653088ea9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/administrations/${administrationId}/attachments (resources/js/components/medications/AdministrationEvidenceDialog.tsx:89)"}, "properties": {"repobilityId": "32d6747fd85a3563", "scanner": "scanner-primary", "fingerprint": "4c4482653088ea9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c6d6f64ae8a2325a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/medications/clients/${clientId}/administrations/${administrationId}/attachments/${attachmentId} (resources/js/components/medications/AdministrationEvidenceDialog.tsx:129)"}, "properties": {"repobilityId": "2665c6448daeed8b", "scanner": "scanner-primary", "fingerprint": "c6d6f64ae8a2325a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-700e5e5ab5c42047", "level": "error", "message": {"text": "Dangling fetch: GET /api/medications/clients/${clientId}/medications/${medicationId}/scheduled-counts (resources/js/components/medications/ScheduledStockCounts.tsx:84)"}, "properties": {"repobilityId": "700974f7ca4e0391", "scanner": "scanner-primary", "fingerprint": "700e5e5ab5c42047", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ac647ce00868eb2f", "level": "error", "message": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/attachments (resources/js/components/medications/SupportingEvidenceDialog.tsx:87)"}, "properties": {"repobilityId": "fbacb969e7e3453c", "scanner": "scanner-primary", "fingerprint": "ac647ce00868eb2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-94a7553bd66d59f8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/medications/clients/${clientId}/attachments/${attachmentId} (resources/js/components/medications/SupportingEvidenceDialog.tsx:128)"}, "properties": {"repobilityId": "c54714797bdcd1c5", "scanner": "scanner-primary", "fingerprint": "94a7553bd66d59f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-803e890e5ca08928", "level": "error", "message": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${medication.id}/scan-verify (resources/js/components/medications/RecordAdministrationDialog.tsx:318)"}, "properties": {"repobilityId": "9dba5e4ed0e3085b", "scanner": "scanner-primary", "fingerprint": "803e890e5ca08928", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-12c67fc5d2650306", "level": "error", "message": {"text": "Dangling fetch: POST /api/medications/clients/${clientId}/medications/${medicationId}/scan-verify (resources/js/lib/medication-scan.ts:43)"}, "properties": {"repobilityId": "e76412009a6e298d", "scanner": "scanner-primary", "fingerprint": "12c67fc5d2650306", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a02a2a5acb24bbc1", "level": "error", "message": {"text": "Dangling fetch: PUT /calendar/shifts/${shiftId} (resources/js/pages/my-calendar.tsx:343)"}, "properties": {"repobilityId": "7dc7890ae5b9b853", "scanner": "scanner-primary", "fingerprint": "a02a2a5acb24bbc1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bf8093b492f7af0", "level": "error", "message": {"text": "Dangling fetch: PUT /calendar/shifts/${shiftId} (resources/js/pages/my-calendar.tsx:372)"}, "properties": {"repobilityId": "cc4a59ebad3047e6", "scanner": "scanner-primary", "fingerprint": "3bf8093b492f7af0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bd1be887cd9245e", "level": "error", "message": {"text": "Dangling fetch: GET /my-calendar/events?${params.toString()} (resources/js/pages/my-calendar.tsx:397)"}, "properties": {"repobilityId": "53c354bc1402cfe8", "scanner": "scanner-primary", "fingerprint": "5bd1be887cd9245e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a318f02cf831c23f", "level": "error", "message": {"text": "Dangling fetch: POST /settings/templates/${template.id}/preview (resources/js/pages/settings/templates.tsx:867)"}, "properties": {"repobilityId": "ec51c68ae91df064", "scanner": "scanner-primary", "fingerprint": "a318f02cf831c23f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24fdb566ffc71b87", "level": "error", "message": {"text": "Dangling fetch: GET /settings/calendar-sync/resources/${provider} (resources/js/pages/settings/calendar-sync.tsx:107)"}, "properties": {"repobilityId": "7c8e518690ac6e12", "scanner": "scanner-primary", "fingerprint": "24fdb566ffc71b87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-709f8eef95fb8bcf", "level": "error", "message": {"text": "Dangling fetch: POST /control-room/messaging/thread?${params.toString()} (resources/js/pages/control-room/messaging.tsx:133)"}, "properties": {"repobilityId": "64f2033a34d9a9ac", "scanner": "scanner-primary", "fingerprint": "709f8eef95fb8bcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-221e4168b6c1791a", "level": "error", "message": {"text": "Dangling fetch: GET /operations/shifts/${shift.id}/editable (resources/js/pages/operations/rostering/index.tsx:1873)"}, "properties": {"repobilityId": "13aeda6685465f94", "scanner": "scanner-primary", "fingerprint": "221e4168b6c1791a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e53988c82f35c7c", "level": "error", "message": {"text": "Dangling fetch: GET /operations/timesheets/${shift.timesheet_id}?modal=1 (resources/js/pages/operations/rostering/index.tsx:1926)"}, "properties": {"repobilityId": "2934b0f37b7f5072", "scanner": "scanner-primary", "fingerprint": "9e53988c82f35c7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26b72a3519d57e9f", "level": "error", "message": {"text": "Dangling fetch: POST /operations/coverage/reservations (resources/js/pages/operations/rostering/conflicts.tsx:208)"}, "properties": {"repobilityId": "655aac2d6326119e", "scanner": "scanner-primary", "fingerprint": "26b72a3519d57e9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9519ca23106a3341", "level": "error", "message": {"text": "Dangling fetch: PATCH /operations/shifts/${shift.id}/tasks/${task.id} (resources/js/pages/operations/shifts/show.tsx:857)"}, "properties": {"repobilityId": "f9cd26ec299d56f1", "scanner": "scanner-primary", "fingerprint": "9519ca23106a3341", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25b62e073b81993e", "level": "error", "message": {"text": "Dangling fetch: GET /operations/messages-search?q=${encodeURIComponent(q)} (resources/js/pages/operations/messages/Index.tsx:338)"}, "properties": {"repobilityId": "47170e18c9c77907", "scanner": "scanner-primary", "fingerprint": "25b62e073b81993e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36355e67e92f176b", "level": "error", "message": {"text": "Dangling fetch: POST /clients/${client.id}/calendar/events?${params.toString()} (resources/js/pages/operations/clients/calendar.tsx:308)"}, "properties": {"repobilityId": "007007a51e3a65a7", "scanner": "scanner-primary", "fingerprint": "36355e67e92f176b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5958da6b9b2c94e5", "level": "error", "message": {"text": "Dangling fetch: GET /clients/${clientId}/meal-preferences (resources/js/pages/operations/clients/_food-meal-preferences.tsx:56)"}, "properties": {"repobilityId": "4c4734e5ba34015a", "scanner": "scanner-primary", "fingerprint": "5958da6b9b2c94e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8961b8ef87c82378", "level": "error", "message": {"text": "Dangling fetch: POST /operations/clients/${clientId}/notes/${h.source_id}/pin (resources/js/pages/operations/clients/tabs/timeline-tab.tsx:198)"}, "properties": {"repobilityId": "a3aaf5256396549c", "scanner": "scanner-primary", "fingerprint": "8961b8ef87c82378", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23807f3620b330bf", "level": "error", "message": {"text": "Dangling fetch: GET /clients/${clientId}/calendar/events?${params.toString()} (resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2730)"}, "properties": {"repobilityId": "68a49c6502e46f76", "scanner": "scanner-primary", "fingerprint": "23807f3620b330bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-815f5a447eb722bc", "level": "error", "message": {"text": "Dangling fetch: POST /clients/${clientId}/calendar/appointments (resources/js/pages/operations/clients/tabs/legacy-profile-sections.tsx:2760)"}, "properties": {"repobilityId": "c1f974daa3123049", "scanner": "scanner-primary", "fingerprint": "815f5a447eb722bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abf5e75fae35d00d", "level": "error", "message": {"text": "Dangling fetch: GET /fleet-assets/reports/reimbursement/data?${params.toString()} (resources/js/pages/fleet-assets/reports/reimbursement.tsx:33)"}, "properties": {"repobilityId": "c10c2210d645bf42", "scanner": "scanner-primary", "fingerprint": "abf5e75fae35d00d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e124b1074f6fa4a", "level": "error", "message": {"text": "Dangling fetch: POST /governance/meetings/${selectedId}/packs (resources/js/pages/Governance/Packs/_dialogs.tsx:56)"}, "properties": {"repobilityId": "acbe07837896bbe7", "scanner": "scanner-primary", "fingerprint": "6e124b1074f6fa4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c2b44d620cdb3d83", "level": "error", "message": {"text": "Dangling fetch: POST /governance/packs/${pack.id}/read (resources/js/pages/Governance/Packs/Show.tsx:61)"}, "properties": {"repobilityId": "8b4a7d50b018669f", "scanner": "scanner-primary", "fingerprint": "c2b44d620cdb3d83", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4c598b8c3e36931c", "level": "error", "message": {"text": "Dangling fetch: POST /governance/resolutions/${resolution.id}/finalize (resources/js/pages/Governance/Resolutions/Show.tsx:170)"}, "properties": {"repobilityId": "e764d0646e2d8520", "scanner": "scanner-primary", "fingerprint": "4c598b8c3e36931c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e3670b6c22b8938f", "level": "error", "message": {"text": "Dangling fetch: GET /roadmap/dashboard (resources/js/pages/Roadmap/Dashboard.tsx:596)"}, "properties": {"repobilityId": "74b05f711f3f1d13", "scanner": "scanner-primary", "fingerprint": "e3670b6c22b8938f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4279f983ad55acc4", "level": "error", "message": {"text": "Dangling fetch: GET /roadmap/quarterly-plans/${planId} (resources/js/pages/Roadmap/Dashboard.tsx:695)"}, "properties": {"repobilityId": "8dc3fa63145bd6a2", "scanner": "scanner-primary", "fingerprint": "4279f983ad55acc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-54944c51d63f044c", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:828)"}, "properties": {"repobilityId": "8063fb54ab7e84f2", "scanner": "scanner-primary", "fingerprint": "54944c51d63f044c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-173f8111f7fd35e3", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:855)"}, "properties": {"repobilityId": "cc4981da3b160ea3", "scanner": "scanner-primary", "fingerprint": "173f8111f7fd35e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7e355f3420f0d5fd", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/triage (resources/js/pages/Roadmap/Dashboard.tsx:899)"}, "properties": {"repobilityId": "a58e84a7ce5a40f1", "scanner": "scanner-primary", "fingerprint": "7e355f3420f0d5fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-fc0acedb5f526948", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestionId}/convert (resources/js/pages/Roadmap/Dashboard.tsx:940)"}, "properties": {"repobilityId": "56e290ef06218b1f", "scanner": "scanner-primary", "fingerprint": "fc0acedb5f526948", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-cb366271047f23fd", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/decisions/${decisionId}/resolve (resources/js/pages/Roadmap/Dashboard.tsx:982)"}, "properties": {"repobilityId": "7ae50908e17a2095", "scanner": "scanner-primary", "fingerprint": "cb366271047f23fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-88d2fb5d74f2ff21", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/quarterly-plans/generate (resources/js/pages/Roadmap/Dashboard.tsx:1016)"}, "properties": {"repobilityId": "9b925f574e1ce860", "scanner": "scanner-primary", "fingerprint": "88d2fb5d74f2ff21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-97cceb062ce76870", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/suggestions/ingest (resources/js/pages/Roadmap/Dashboard.tsx:1051)"}, "properties": {"repobilityId": "0bddbd7caf32efd2", "scanner": "scanner-primary", "fingerprint": "97cceb062ce76870", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a382aed6e340c2e1", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestion.id}/triage (resources/js/pages/Roadmap/Suggestions/Index.tsx:95)"}, "properties": {"repobilityId": "ccfc88a695c6c9d8", "scanner": "scanner-primary", "fingerprint": "a382aed6e340c2e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7aa80142e82cbd73", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/suggestions/${suggestion.id}/convert (resources/js/pages/Roadmap/Suggestions/Index.tsx:124)"}, "properties": {"repobilityId": "a013928b26e7e8b1", "scanner": "scanner-primary", "fingerprint": "7aa80142e82cbd73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-951784fa65b52b3d", "level": "error", "message": {"text": "Dangling fetch: POST /roadmap/decisions/${decisionId}/resolve (resources/js/pages/Roadmap/Decisions/Index.tsx:68)"}, "properties": {"repobilityId": "ef3ba85af9d7f74b", "scanner": "scanner-primary", "fingerprint": "951784fa65b52b3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e53818974ba1b70e", "level": "error", "message": {"text": "Dangling fetch: POST /hr/reports/builder/preview (resources/js/pages/hr/reports/builder.tsx:125)"}, "properties": {"repobilityId": "eec4037cbfc5b005", "scanner": "scanner-primary", "fingerprint": "e53818974ba1b70e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c938a65f722905f2", "level": "error", "message": {"text": "Dangling fetch: POST /hr/reports/saved/${report.id}/run (resources/js/pages/hr/reports/saved.tsx:73)"}, "properties": {"repobilityId": "97f8077b50520c4f", "scanner": "scanner-primary", "fingerprint": "c938a65f722905f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-641ec766fce9fd9f", "level": "error", "message": {"text": "Dangling fetch: GET /catering/library-counts (resources/js/pages/catering/_tabs.tsx:72)"}, "properties": {"repobilityId": "0dbd5c958d054e9c", "scanner": "scanner-primary", "fingerprint": "641ec766fce9fd9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7d35e79a93a9dd01", "level": "error", "message": {"text": "Dangling fetch: GET /portal/clients/${client.id}/calendar/events?${params.toString()} (resources/js/pages/portal/calendar.tsx:260)"}, "properties": {"repobilityId": "902496f738a8120b", "scanner": "scanner-primary", "fingerprint": "7d35e79a93a9dd01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9562e62447bec265", "level": "error", "message": {"text": "Dangling fetch: GET /portal/clients/${client.id}/messages-search?q=${encodeURIComponent(q)} (resources/js/pages/portal/messages.tsx:321)"}, "properties": {"repobilityId": "a4068ab1137c6863", "scanner": "scanner-primary", "fingerprint": "9562e62447bec265", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fff07ff8a515c205", "level": "error", "message": {"text": "Dangling fetch: GET /portal/clients/${client.id}/location/history?${params.toString()} (resources/js/pages/portal/location.tsx:140)"}, "properties": {"repobilityId": "da2eafb7043f0ed9", "scanner": "scanner-primary", "fingerprint": "fff07ff8a515c205", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20918d50b8b2b927", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${site.id}/documents (resources/js/pages/sites/edit.tsx:304)"}, "properties": {"repobilityId": "7fc0c0b32c5e4a46", "scanner": "scanner-primary", "fingerprint": "20918d50b8b2b927", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d2685f80978e6b97", "level": "error", "message": {"text": "Dangling fetch: DELETE /sites/${site.id}/documents/${deleteCandidate} (resources/js/pages/sites/edit.tsx:322)"}, "properties": {"repobilityId": "8db635b2d48d0744", "scanner": "scanner-primary", "fingerprint": "d2685f80978e6b97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8c8d56c439d44438", "level": "error", "message": {"text": "Dangling fetch: GET /sites/geocode/search?q=${encodeURIComponent(searchTerm.trim())} (resources/js/pages/sites/_overview-dialogs.tsx:262)"}, "properties": {"repobilityId": "b8360dc98f3126ea", "scanner": "scanner-primary", "fingerprint": "8c8d56c439d44438", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9afb2be6ef40e32f", "level": "error", "message": {"text": "Dangling fetch: GET /credential-types (resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:74)"}, "properties": {"repobilityId": "c0c4f8fe9d289ebe", "scanner": "scanner-primary", "fingerprint": "9afb2be6ef40e32f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ac20ed778f68679", "level": "error", "message": {"text": "Dangling fetch: PUT /credential-types (resources/js/pages/sites/vendors-credentials/_manage-types-dialog.tsx:129)"}, "properties": {"repobilityId": "ab8fae866d0c765f", "scanner": "scanner-primary", "fingerprint": "8ac20ed778f68679", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffd160b2e500b2d2", "level": "error", "message": {"text": "Dangling fetch: PUT /catering/products/${product.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:245)"}, "properties": {"repobilityId": "992c254cc1d6aa9b", "scanner": "scanner-primary", "fingerprint": "ffd160b2e500b2d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ebc1ef30a20ef707", "level": "error", "message": {"text": "Dangling fetch: DELETE /catering/products/${product.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:259)"}, "properties": {"repobilityId": "b57d2b5c4eded08f", "scanner": "scanner-primary", "fingerprint": "ebc1ef30a20ef707", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-465d20ef03c847f6", "level": "error", "message": {"text": "Dangling fetch: PUT /catering/tags/${tag.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:579)"}, "properties": {"repobilityId": "919e6ecd0d249f20", "scanner": "scanner-primary", "fingerprint": "465d20ef03c847f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d6d97a1a2c4ed3ac", "level": "error", "message": {"text": "Dangling fetch: DELETE /catering/tags/${tag.id} (resources/js/pages/sites/meal-planner/_library-dialogs.tsx:593)"}, "properties": {"repobilityId": "8ce2c9390edaffcb", "scanner": "scanner-primary", "fingerprint": "d6d97a1a2c4ed3ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-25c0c1e0a32eac12", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${siteId}/meal-planner/takeaway-vendors (resources/js/pages/sites/meal-planner/_dialogs.tsx:130)"}, "properties": {"repobilityId": "aa4221879958886f", "scanner": "scanner-primary", "fingerprint": "25c0c1e0a32eac12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1ebca7989cdb57b5", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:152)"}, "properties": {"repobilityId": "1f2d940893155ade", "scanner": "scanner-primary", "fingerprint": "1ebca7989cdb57b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ef6b1cdb280e00d5", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:185)"}, "properties": {"repobilityId": "66626236b2e72e97", "scanner": "scanner-primary", "fingerprint": "ef6b1cdb280e00d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d3fb167739bd73b1", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-planner/check-conflicts (resources/js/pages/sites/meal-planner/_dialogs.tsx:231)"}, "properties": {"repobilityId": "064b7a47f39fcf3e", "scanner": "scanner-primary", "fingerprint": "d3fb167739bd73b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2a0e06c82150fa30", "level": "error", "message": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-planner/settings (resources/js/pages/sites/meal-planner/_dialogs.tsx:1214)"}, "properties": {"repobilityId": "04ea65d3d0eb7efc", "scanner": "scanner-primary", "fingerprint": "2a0e06c82150fa30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1c07db3306730246", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_dialogs.tsx:1230)"}, "properties": {"repobilityId": "b693331700884698", "scanner": "scanner-primary", "fingerprint": "1c07db3306730246", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4792798f33b95c76", "level": "error", "message": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-templates/${id} (resources/js/pages/sites/meal-planner/_dialogs.tsx:1243)"}, "properties": {"repobilityId": "2ce37dd8c85708c7", "scanner": "scanner-primary", "fingerprint": "4792798f33b95c76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-655ab2b53fac118c", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${list.id}/receive (resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:224)"}, "properties": {"repobilityId": "722e2d6226a10704", "scanner": "scanner-primary", "fingerprint": "655ab2b53fac118c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bf6161e42e9e3bde", "level": "error", "message": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-shopping-lists/${listId}/items/${item.id} (resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:321)"}, "properties": {"repobilityId": "5dc22c23e8bd7917", "scanner": "scanner-primary", "fingerprint": "bf6161e42e9e3bde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b9b8dd25603b6dd4", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${list.id}/items (resources/js/pages/sites/meal-planner/_shopping-list-panel.tsx:364)"}, "properties": {"repobilityId": "5246fc0202e9154c", "scanner": "scanner-primary", "fingerprint": "b9b8dd25603b6dd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b901aac60044967a", "level": "error", "message": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-planner/residents/${resident.id} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:548)"}, "properties": {"repobilityId": "2326cf8391b653cd", "scanner": "scanner-primary", "fingerprint": "b901aac60044967a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f6581e8db7091c20", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:709)"}, "properties": {"repobilityId": "3464f7002029cb0f", "scanner": "scanner-primary", "fingerprint": "f6581e8db7091c20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3dc2f785caa4d9f5", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan/${entry.id}/${path} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1041)"}, "properties": {"repobilityId": "aac49090a0a4c3cd", "scanner": "scanner-primary", "fingerprint": "3dc2f785caa4d9f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-374a2ba36093b582", "level": "error", "message": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-plan/${entry.id} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1044)"}, "properties": {"repobilityId": "b09f084b0fdbe624", "scanner": "scanner-primary", "fingerprint": "374a2ba36093b582", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c1c180f38e1ed6d5", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1047)"}, "properties": {"repobilityId": "2b032998df266177", "scanner": "scanner-primary", "fingerprint": "c1c180f38e1ed6d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7cdc24cd1a6168af", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1051)"}, "properties": {"repobilityId": "9e596f5ca7754032", "scanner": "scanner-primary", "fingerprint": "7cdc24cd1a6168af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-15cc49cb33d15b8f", "level": "error", "message": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-plan/${entryId} (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1067)"}, "properties": {"repobilityId": "47b0adf1fca2c786", "scanner": "scanner-primary", "fingerprint": "15cc49cb33d15b8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-9de1986dd887a63b", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-plan-week/copy (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1076)"}, "properties": {"repobilityId": "25c8f8cd4d8b1915", "scanner": "scanner-primary", "fingerprint": "9de1986dd887a63b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c93a0417eae284d5", "level": "error", "message": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-plan-week/clear (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1086)"}, "properties": {"repobilityId": "f4d6c87d0abffc8d", "scanner": "scanner-primary", "fingerprint": "c93a0417eae284d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3d4287f3712a8af7", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates/${t.id}/apply (resources/js/pages/sites/meal-planner/_calendar-grid.tsx:1098)"}, "properties": {"repobilityId": "0f28da23b801a64c", "scanner": "scanner-primary", "fingerprint": "3d4287f3712a8af7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3a723a54535f427b", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-inventory/adjust (resources/js/pages/sites/meal-planner/_inventory-table.tsx:98)"}, "properties": {"repobilityId": "8b41e49bf3498d17", "scanner": "scanner-primary", "fingerprint": "3a723a54535f427b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-76e5f92662a9706d", "level": "error", "message": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-inventory/items/${item.id} (resources/js/pages/sites/meal-planner/_inventory-table.tsx:109)"}, "properties": {"repobilityId": "31b6391b14a6706f", "scanner": "scanner-primary", "fingerprint": "76e5f92662a9706d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-516b8d75c1bd6a34", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-planner/bootstrap (resources/js/pages/sites/meal-planner/index.tsx:118)"}, "properties": {"repobilityId": "9f458f0e9595d7d8", "scanner": "scanner-primary", "fingerprint": "516b8d75c1bd6a34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a3244b60e71e78de", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-plan (resources/js/pages/sites/meal-planner/index.tsx:167)"}, "properties": {"repobilityId": "76500fd8d491b037", "scanner": "scanner-primary", "fingerprint": "a3244b60e71e78de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a8831a5fca484d5d", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-plan/week-summary (resources/js/pages/sites/meal-planner/index.tsx:168)"}, "properties": {"repobilityId": "c5bc581c41a14e07", "scanner": "scanner-primary", "fingerprint": "a8831a5fca484d5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ca962f15d92d00bf", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-inventory (resources/js/pages/sites/meal-planner/index.tsx:186)"}, "properties": {"repobilityId": "2bfe24ef2bdabf92", "scanner": "scanner-primary", "fingerprint": "ca962f15d92d00bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-59fb1db8d820fbe7", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/index.tsx:198)"}, "properties": {"repobilityId": "ffcec5543ecce547", "scanner": "scanner-primary", "fingerprint": "59fb1db8d820fbe7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-94499968a93d6ad6", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${currentSiteId}/meal-templates (resources/js/pages/sites/meal-planner/index.tsx:210)"}, "properties": {"repobilityId": "6a78a8fab823bc54", "scanner": "scanner-primary", "fingerprint": "94499968a93d6ad6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-28362d80d2e4176c", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_templates-panel.tsx:43)"}, "properties": {"repobilityId": "185a6c85f7fb8964", "scanner": "scanner-primary", "fingerprint": "28362d80d2e4176c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8efb5f7cc93eb0da", "level": "error", "message": {"text": "Dangling fetch: DELETE /sites/${siteId}/meal-templates/${t.id} (resources/js/pages/sites/meal-planner/_templates-panel.tsx:53)"}, "properties": {"repobilityId": "9e0cbf099e5fa5d0", "scanner": "scanner-primary", "fingerprint": "8efb5f7cc93eb0da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7a2d6561da963da8", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates/${t.id}/apply (resources/js/pages/sites/meal-planner/_templates-panel.tsx:63)"}, "properties": {"repobilityId": "77c2aafa326f532c", "scanner": "scanner-primary", "fingerprint": "7a2d6561da963da8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ba34e5a6f800a2ac", "level": "error", "message": {"text": "Dangling fetch: PUT /sites/${siteId}/meal-templates/${initial.id} (resources/js/pages/sites/meal-planner/_templates-panel.tsx:278)"}, "properties": {"repobilityId": "b689e56bd6f36062", "scanner": "scanner-primary", "fingerprint": "ba34e5a6f800a2ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-41bbc105d98066ce", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-templates (resources/js/pages/sites/meal-planner/_templates-panel.tsx:279)"}, "properties": {"repobilityId": "a9e5d04688415fc4", "scanner": "scanner-primary", "fingerprint": "41bbc105d98066ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d16a5402fc12b24a", "level": "error", "message": {"text": "Dangling fetch: PUT /catering/recipes/${recipe.id} (resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:160)"}, "properties": {"repobilityId": "c6a62246ffec556a", "scanner": "scanner-primary", "fingerprint": "d16a5402fc12b24a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-0ee7e0b7ddf4d6a3", "level": "error", "message": {"text": "Dangling fetch: DELETE /catering/recipes/${recipe.id} (resources/js/pages/sites/meal-planner/_recipe-edit-dialog.tsx:178)"}, "properties": {"repobilityId": "edfdd4c4f607db3a", "scanner": "scanner-primary", "fingerprint": "0ee7e0b7ddf4d6a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b00da60af6bbbb78", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:261)"}, "properties": {"repobilityId": "c8a18c09bd538bbd", "scanner": "scanner-primary", "fingerprint": "b00da60af6bbbb78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3b46d516d86dd8e2", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/generate (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:267)"}, "properties": {"repobilityId": "a9fa2c003421df07", "scanner": "scanner-primary", "fingerprint": "3b46d516d86dd8e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4df3cd21eb0abe9b", "level": "error", "message": {"text": "Dangling fetch: GET /sites/${siteId}/meal-shopping-lists (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:272)"}, "properties": {"repobilityId": "0e731d9302b011c7", "scanner": "scanner-primary", "fingerprint": "4df3cd21eb0abe9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1d594112c804acbd", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/meal-shopping-lists/${draft.id}/items (resources/js/pages/sites/meal-planner/_recipes-panel.tsx:285)"}, "properties": {"repobilityId": "47241e54f5bcf12f", "scanner": "scanner-primary", "fingerprint": "1d594112c804acbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-183d1fce4e9d9e8e", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/credentials/${credential.id}/reveal (resources/js/pages/sites/credentials/_dialogs.tsx:493)"}, "properties": {"repobilityId": "2407401bd18485f2", "scanner": "scanner-primary", "fingerprint": "183d1fce4e9d9e8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d5e8477f78f693a", "level": "error", "message": {"text": "Dangling fetch: POST /sites/${siteId}/credentials/${credential.id}/copy (resources/js/pages/sites/credentials/_dialogs.tsx:548)"}, "properties": {"repobilityId": "56b77395762571c7", "scanner": "scanner-primary", "fingerprint": "7d5e8477f78f693a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecacb285b222ee34", "level": "error", "message": {"text": "Dangling fetch: GET /fleet/trips/${trip.id}/playback (resources/js/pages/fleet-management/trip.tsx:63)"}, "properties": {"repobilityId": "7ad4044cddb8c330", "scanner": "scanner-primary", "fingerprint": "ecacb285b222ee34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-85b62816afbc2d65", "level": "note", "message": {"text": "Unused endpoint: POST /attendance/clock-out"}, "properties": {"repobilityId": "7018d91b7c1d022e", "scanner": "scanner-primary", "fingerprint": "85b62816afbc2d65", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4cfd429eab31ddcd", "level": "note", "message": {"text": "Unused endpoint: POST /attendance/handover"}, "properties": {"repobilityId": "936040068f381c2c", "scanner": "scanner-primary", "fingerprint": "4cfd429eab31ddcd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a7a87191205883e", "level": "note", "message": {"text": "Unused endpoint: POST /inbox/notifications/read-all"}, "properties": {"repobilityId": "24876fd39d9994dd", "scanner": "scanner-primary", "fingerprint": "9a7a87191205883e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12d9a5ebcb96f2f5", "level": "note", "message": {"text": "Unused endpoint: POST /inbox/announcements/read-all"}, "properties": {"repobilityId": "740f83f0030a7c05", "scanner": "scanner-primary", "fingerprint": "12d9a5ebcb96f2f5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2076933d6ca0fb52", "level": "note", "message": {"text": "Unused endpoint: POST /system/users/stop-impersonating"}, "properties": {"repobilityId": "1baf68f0ba5c3e75", "scanner": "scanner-primary", "fingerprint": "2076933d6ca0fb52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95ab0976c445e937", "level": "note", "message": {"text": "Unused endpoint: POST /attendance/clock-in"}, "properties": {"repobilityId": "45f86088855ec2f6", "scanner": "scanner-primary", "fingerprint": "95ab0976c445e937", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fe97d905e51f2bc2", "level": "note", "message": {"text": "Unused endpoint: POST /respite/requests"}, "properties": {"repobilityId": "ec1c6d21891fbd8e", "scanner": "scanner-primary", "fingerprint": "fe97d905e51f2bc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0060c35137886cf9", "level": "note", "message": {"text": "Unused endpoint: POST /respite/referrals"}, "properties": {"repobilityId": "60774bfa28cefd47", "scanner": "scanner-primary", "fingerprint": "0060c35137886cf9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a69008b7e2ae10b", "level": "note", "message": {"text": "Unused endpoint: POST /operations/rostering/templates"}, "properties": {"repobilityId": "fc59eceb93a55611", "scanner": "scanner-primary", "fingerprint": "6a69008b7e2ae10b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-57dfff33610448fc", "level": "note", "message": {"text": "Unused endpoint: GET /operations/rostering/conflicts"}, "properties": {"repobilityId": "1c85175fc68069c4", "scanner": "scanner-primary", "fingerprint": "57dfff33610448fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c04d48b2a99a700", "level": "note", "message": {"text": "Unused endpoint: POST /sites/checklists/templates"}, "properties": {"repobilityId": "73746a5f044414f2", "scanner": "scanner-primary", "fingerprint": "9c04d48b2a99a700", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05671ff45f86de0a", "level": "note", "message": {"text": "Unused endpoint: POST /hr/time/clock-in"}, "properties": {"repobilityId": "2a8c6cecd32bac8b", "scanner": "scanner-primary", "fingerprint": "05671ff45f86de0a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5a5fe418032a604", "level": "note", "message": {"text": "Unused endpoint: POST /hr/time/clock-out"}, "properties": {"repobilityId": "558908edf8ba7b07", "scanner": "scanner-primary", "fingerprint": "e5a5fe418032a604", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2916473cce7678c", "level": "note", "message": {"text": "Unused endpoint: POST /meds/today/prn/effect"}, "properties": {"repobilityId": "ebd97f60124d893a", "scanner": "scanner-primary", "fingerprint": "f2916473cce7678c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6d43653833ea4d18", "level": "note", "message": {"text": "Unused endpoint: POST /meds/today/record"}, "properties": {"repobilityId": "eeb16b7c784b58ee", "scanner": "scanner-primary", "fingerprint": "6d43653833ea4d18", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-982149a8e50d4186", "level": "note", "message": {"text": "Unused endpoint: POST /finance/accounts"}, "properties": {"repobilityId": "7f5707e46552c378", "scanner": "scanner-primary", "fingerprint": "982149a8e50d4186", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bc22c83750f3ac1", "level": "note", "message": {"text": "Unused endpoint: POST /finance/journals"}, "properties": {"repobilityId": "b5ce35a719a42222", "scanner": "scanner-primary", "fingerprint": "6bc22c83750f3ac1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2628204af5cf2ffa", "level": "note", "message": {"text": "Unused endpoint: POST /finance/bills"}, "properties": {"repobilityId": "d8cb296163569e65", "scanner": "scanner-primary", "fingerprint": "2628204af5cf2ffa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d63a8ff44e41072b", "level": "note", "message": {"text": "Unused endpoint: POST /finance/purchase-orders"}, "properties": {"repobilityId": "eecded8a2fa12c47", "scanner": "scanner-primary", "fingerprint": "d63a8ff44e41072b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8b28de3b89987d2", "level": "note", "message": {"text": "Unused endpoint: POST /finance/invoices"}, "properties": {"repobilityId": "dd62d34936ba6c2f", "scanner": "scanner-primary", "fingerprint": "e8b28de3b89987d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-229fe759061d358a", "level": "note", "message": {"text": "Unused endpoint: POST /finance/vendors"}, "properties": {"repobilityId": "b9f4450c38428acd", "scanner": "scanner-primary", "fingerprint": "229fe759061d358a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-633d701750dade78", "level": "note", "message": {"text": "Unused endpoint: POST /finance/receivables/allocate"}, "properties": {"repobilityId": "151f0eecb99399f9", "scanner": "scanner-primary", "fingerprint": "633d701750dade78", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca76a51eb06e2475", "level": "note", "message": {"text": "Unused endpoint: POST /hr/offboarding"}, "properties": {"repobilityId": "9ec3d18cebef6134", "scanner": "scanner-primary", "fingerprint": "ca76a51eb06e2475", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b44fbc418c953478", "level": "note", "message": {"text": "Unused endpoint: POST /hr/recruitment/offers"}, "properties": {"repobilityId": "a93e3c4131c60134", "scanner": "scanner-primary", "fingerprint": "b44fbc418c953478", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65d2d2e2bc5d0bdd", "level": "note", "message": {"text": "Unused endpoint: POST /hr/onboarding"}, "properties": {"repobilityId": "ff6127b8d782b9af", "scanner": "scanner-primary", "fingerprint": "65d2d2e2bc5d0bdd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ab4cbbecf9de8fd", "level": "note", "message": {"text": "Unused endpoint: POST /hr/people"}, "properties": {"repobilityId": "54e2a3a71338c6c5", "scanner": "scanner-primary", "fingerprint": "0ab4cbbecf9de8fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-934b47294b4f0cb0", "level": "note", "message": {"text": "Unused endpoint: GET /hr/people"}, "properties": {"repobilityId": "c8e162247763ee2c", "scanner": "scanner-primary", "fingerprint": "934b47294b4f0cb0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-220ff528f6019fc4", "level": "note", "message": {"text": "Unused endpoint: POST /hr/departments"}, "properties": {"repobilityId": "b4b05a4c143c8cb4", "scanner": "scanner-primary", "fingerprint": "220ff528f6019fc4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a3275efb990afed3", "level": "note", "message": {"text": "Unused endpoint: POST /hr/leave"}, "properties": {"repobilityId": "9185c41a86666213", "scanner": "scanner-primary", "fingerprint": "a3275efb990afed3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0e05106656c3a26", "level": "note", "message": {"text": "Unused endpoint: POST /hr/positions"}, "properties": {"repobilityId": "b7dfb01c535893ba", "scanner": "scanner-primary", "fingerprint": "b0e05106656c3a26", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f183948e7163edcd", "level": "note", "message": {"text": "Unused endpoint: POST /hr/feed/kudos"}, "properties": {"repobilityId": "cae3de18431112b2", "scanner": "scanner-primary", "fingerprint": "f183948e7163edcd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b0cdf3d763af16a", "level": "note", "message": {"text": "Unused endpoint: POST /hr/performance/probation"}, "properties": {"repobilityId": "10fa5366d4a4b6b8", "scanner": "scanner-primary", "fingerprint": "9b0cdf3d763af16a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8004b8c33da4b892", "level": "note", "message": {"text": "Unused endpoint: POST /hr/goals"}, "properties": {"repobilityId": "3720f689fb151c89", "scanner": "scanner-primary", "fingerprint": "8004b8c33da4b892", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d8f8cb076cfe9a0f", "level": "note", "message": {"text": "Unused endpoint: POST /hr/performance/supervision"}, "properties": {"repobilityId": "bd56ce85dc0692d0", "scanner": "scanner-primary", "fingerprint": "d8f8cb076cfe9a0f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b4f7702d67f0ba0b", "level": "note", "message": {"text": "Unused endpoint: POST /hr/performance/reviews"}, "properties": {"repobilityId": "8fed295000a5061c", "scanner": "scanner-primary", "fingerprint": "b4f7702d67f0ba0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1faf75510c0ed0c7", "level": "note", "message": {"text": "Unused endpoint: POST /operations/clients"}, "properties": {"repobilityId": "354572d1ee48856a", "scanner": "scanner-primary", "fingerprint": "1faf75510c0ed0c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-334d29cde7f9e76b", "level": "note", "message": {"text": "Unused endpoint: POST /operations/care-plans"}, "properties": {"repobilityId": "96668c0bdc652516", "scanner": "scanner-primary", "fingerprint": "334d29cde7f9e76b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-471d3914911ac509", "level": "note", "message": {"text": "Unused endpoint: POST /emar/refusal-followups"}, "properties": {"repobilityId": "333ef4ad6a67f3ee", "scanner": "scanner-primary", "fingerprint": "471d3914911ac509", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca97db76659b4e55", "level": "note", "message": {"text": "Unused endpoint: POST /sites"}, "properties": {"repobilityId": "37330c5993b6389c", "scanner": "scanner-primary", "fingerprint": "ca97db76659b4e55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-337c3846de0a05a3", "level": "note", "message": {"text": "Unused endpoint: POST /operations/timesheets"}, "properties": {"repobilityId": "ec4e6f3780ea9d2e", "scanner": "scanner-primary", "fingerprint": "337c3846de0a05a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d504b80adc9409ec", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard"}, "properties": {"repobilityId": "813d5c582c2a95d8", "scanner": "scanner-primary", "fingerprint": "d504b80adc9409ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c7d3b0754e1650c", "level": "note", "message": {"text": "Unused endpoint: PUT /settings/terminology"}, "properties": {"repobilityId": "5640528b5169b040", "scanner": "scanner-primary", "fingerprint": "4c7d3b0754e1650c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-050c1d75ce2dd3a7", "level": "note", "message": {"text": "Unused endpoint: POST /settings/service-contexts/default"}, "properties": {"repobilityId": "96861cf89cdfb451", "scanner": "scanner-primary", "fingerprint": "050c1d75ce2dd3a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf6e427ad05d3412", "level": "note", "message": {"text": "Unused endpoint: POST /settings/service-contexts"}, "properties": {"repobilityId": "0144d2bf5dbf3902", "scanner": "scanner-primary", "fingerprint": "cf6e427ad05d3412", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-673b5643a72d73e3", "level": "note", "message": {"text": "Unused endpoint: PUT /settings/modules"}, "properties": {"repobilityId": "6320f9a105ee386c", "scanner": "scanner-primary", "fingerprint": "673b5643a72d73e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77eb032817072186", "level": "note", "message": {"text": "Unused endpoint: PUT /settings/profile/landing"}, "properties": {"repobilityId": "537cb7a3c452216d", "scanner": "scanner-primary", "fingerprint": "77eb032817072186", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0fd42bc3b40bd55", "level": "note", "message": {"text": "Unused endpoint: POST /auth/microsoft/disconnect"}, "properties": {"repobilityId": "c82918640fc619b6", "scanner": "scanner-primary", "fingerprint": "f0fd42bc3b40bd55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f10d336f5a0d22e1", "level": "note", "message": {"text": "Unused endpoint: POST /auth/google/disconnect"}, "properties": {"repobilityId": "c474d1e4f4eee7f9", "scanner": "scanner-primary", "fingerprint": "f10d336f5a0d22e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ae154b5d760b4de", "level": "note", "message": {"text": "Unused endpoint: PUT /settings/email"}, "properties": {"repobilityId": "ddeb23f48b2881e0", "scanner": "scanner-primary", "fingerprint": "9ae154b5d760b4de", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1a3bd7ee3069631", "level": "note", "message": {"text": "Unused endpoint: POST /settings/email/test"}, "properties": {"repobilityId": "8e38fd33a856e29c", "scanner": "scanner-primary", "fingerprint": "b1a3bd7ee3069631", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}