{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8777af77f4fd8526", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/health-server.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/health-server.ts:105"}, "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-ddb33b937b704119", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/test-credit-note.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/test-credit-note.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3f224778a8507d5", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/test-receipt-voucher.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/test-receipt-voucher.ts:38"}, "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-9ade0accea16189c", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/mock-tally-server.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/mock-tally-server.ts:32"}, "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-5bcf3b90cab40cf6", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/uninstall-service.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/uninstall-service.ts:13"}, "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-30ecff52287489a4", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/uninstall-tray.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/uninstall-tray.ts:18"}, "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-92b2facbc23641cf", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/install-tray.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/install-tray.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dda0ef1dfe6be433", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/install-service.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/install-service.ts:29"}, "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-952a2730045ae912", "name": "Stray `console.log` in TS/JS \u2014 bridge/src/diagnose-tally.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/diagnose-tally.ts:53"}, "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-12011f38a9d6dc16", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/procurement-budget-settings.tsx:249", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/procurement-budget-settings.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-cb2fb61c3c682606", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/case-emails-tab.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/case-emails-tab.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1997b6a924d96519", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/case-kanban-board.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/case-kanban-board.tsx:101"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ea9e4bcba25a16c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-sidebar-nav.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-sidebar-nav.tsx:31"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-539d6eb75cd2aabb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/procurement/amc-event-dialog.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/procurement/amc-event-dialog.tsx:222"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-448a1f083e3ef951", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-occupant-form-dialog.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-occupant-form-dialog.tsx:100"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01264daf75c74761", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/space-analytics.tsx:197", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/space-analytics.tsx:197"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62546caa024d843f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/floor-canvas.tsx:325", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/floor-canvas.tsx:325"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9b4c25254848386", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-occupants-panel.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-occupants-panel.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-dd2c87475e397978", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/space-allocation-selector.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/space-allocation-selector.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-d453023130529c08", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-transfer-dialog.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-transfer-dialog.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-8c4e87b0d1673ed5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/collect-payment-dialog.tsx:448", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/collect-payment-dialog.tsx:448"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c2d89f4888724ec", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/calendar-view.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/calendar-view.tsx:160"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f2193c094106432", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/share-payment-link-dialog.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/share-payment-link-dialog.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-06fbf3d3daa60636", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/no-show-refund-dialog.tsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/no-show-refund-dialog.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-e6081626a3d99c82", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/checkout-feedback-dialog.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/checkout-feedback-dialog.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-cb8df97e91e0736c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/booking-addons-section.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/booking-addons-section.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-db45bae2a3dcc26d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/new-booking/booking-summary-section.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/new-booking/booking-summary-section.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8acfbf55399022d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/new-booking/customer-details-section.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/new-booking/customer-details-section.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-d78dc6a6872922a9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/leads/lead-documents-tab.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/leads/lead-documents-tab.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b4ce6b78d90b9ca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/leads/import-leads-dialog.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/leads/import-leads-dialog.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad25809b9e33c864", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/flow-guide-hint.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/flow-guide-hint.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3feebb8d6985b40f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/shared/flow-guide-hint.tsx:47", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/shared/flow-guide-hint.tsx:47"}, "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-2389ea066460d994", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/followups-widget.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/followups-widget.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-67f02f80c34348ed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/enquiry-alert-banner.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/enquiry-alert-banner.tsx:47"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-959ac853102e017f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/approval-bell.tsx:576", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/approval-bell.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-a7b336eb7ca00c34", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/header.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/header.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b16bedb1a395253", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/notification-bell.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/notification-bell.tsx:47"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae7314aa68865b60", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/recent-leads-widget.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/recent-leads-widget.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-5ad932cbf46da8b0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/recent-activities-widget.tsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/recent-activities-widget.tsx:52"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20db0e57786c4253", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/notes-widget.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/notes-widget.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c2fd112122800fb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/rent-revenue-widget.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/rent-revenue-widget.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-2aa6f81ede8a15d7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/schedule-widget.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/schedule-widget.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-4229846914f30031", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/pending-actions-widget.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/pending-actions-widget.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-c32dbc1303a90d5d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/procurement-spend-widget.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/procurement-spend-widget.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-032e3f2165629b4b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/quota-overuse-widget.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/quota-overuse-widget.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-df0a07a31ec9e24e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/renewal-pipeline-widget.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/renewal-pipeline-widget.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-fdf6ef9584bfb769", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/occupancy-widget.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/occupancy-widget.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd68aa6671f8f3dc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/team-performance-widget.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/team-performance-widget.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-567514ae690cdbe3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/mtd-bookings-widget.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/mtd-bookings-widget.tsx:107"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fbb168b6da3b806", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/member-health-widget.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/member-health-widget.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4082a1a9d359b184", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/aggregator-performance-widget.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/aggregator-performance-widget.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-506bed22bfea4d30", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/source-roi-widget.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/source-roi-widget.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54f69529fa0c30a4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/proposals/preset-picker.tsx:278", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/proposals/preset-picker.tsx:278"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7685c8a85498a331", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/contract-accounting-row.tsx:298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/contract-accounting-row.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-cb370e6985eeb45a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/tally-inbox-client.tsx:452", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/tally-inbox-client.tsx:452"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-216c23b5a79a8333", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/action-required-banner.tsx:195", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/action-required-banner.tsx:195"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92fb49a299926e84", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/proposal-payments-tab.tsx:331", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/proposal-payments-tab.tsx:331"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f962dcfc07b5d020", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/statement-lifecycle.tsx:284", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/statement-lifecycle.tsx:284"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47f7a5f4f643fc6e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/print-report-upload-dialog.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/print-report-upload-dialog.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46648f2b6fc42bff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/team/user-activity-log.tsx:261", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/team/user-activity-log.tsx:261"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a65df7b65405e234", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/locations/location-form-dialog.tsx:342", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/locations/location-form-dialog.tsx:342"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bed882a2bb76db9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/vouchers/voucher-issuance-dialog.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/vouchers/voucher-issuance-dialog.tsx:170"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20151854fc327d19", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/vouchers/unifi-panel.tsx:519", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/vouchers/unifi-panel.tsx:519"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-becc3a5e09ef546d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/tally-bridge-health-card.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/tally-bridge-health-card.tsx:121"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a60e3b304bf4b87a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/view-statement-dialog.tsx:746", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/view-statement-dialog.tsx:746"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-651048c528507540", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/generate-statement-dialog.tsx:447", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/generate-statement-dialog.tsx:447"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71b03341b0fc60b3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/facility/report-wizard.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/facility/report-wizard.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-471f9694f4e84af6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rent-management/AssetManager.tsx:433", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rent-management/AssetManager.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-7b3a884a84f34dc9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-space-manager.tsx:329", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-space-manager.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-248881e30f316deb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-bookings-section.tsx:227", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-bookings-section.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be0145d01a10da4f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-service-usage-section.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-service-usage-section.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-4f5c9ec9d85f4bdd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-addons-section.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-addons-section.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-a5b11582a0293660", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/my-ticket-detail-dialog.tsx:276", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/my-ticket-detail-dialog.tsx:276"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-81babd41361e939c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/report-issue-dialog.tsx:274", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/report-issue-dialog.tsx:274"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-891e8f3579cd7ebf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/ticket-detail-dialog.tsx:308", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/ticket-detail-dialog.tsx:308"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afafd087780c891b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/all-books-tab.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/all-books-tab.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-a95ae8f429e052b4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/requests-tab.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/requests-tab.tsx:113"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c7a7eabefa260f4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/my-book-tab.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/my-book-tab.tsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d64289180bd7a884", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/entries-tab.tsx:184", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/entries-tab.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-f54816f85b6eb53c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/procurement/orders/[id]/email/route.ts:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/procurement/orders/[id]/email/route.ts:129"}, "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-9fc4dcc97bfb7c35", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/proposals/[id]/email/route.ts:273", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/proposals/[id]/email/route.ts:273"}, "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-ac1791a8b39b2d45", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/gst-invoices/[id]/email/route.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/gst-invoices/[id]/email/route.ts:125"}, "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-25ba1e380fb9f837", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/contract-payments/[id]/remind/route.ts:104", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/contract-payments/[id]/remind/route.ts:104"}, "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-74fd866fefe25337", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/otp/route.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/otp/route.ts:118"}, "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-9a806011844d6e44", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/contract-expiry/route.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/contract-expiry/route.ts:133"}, "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-05fd90610a7f1449", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/db-backup/route.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/db-backup/route.ts:96"}, "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-b446dcf88ee99389", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/headcount-reminder/route.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/headcount-reminder/route.ts:66"}, "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-88dda9d179f97d84", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/storage-backup/route.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/storage-backup/route.ts:102"}, "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-8b60049ad193b5a0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/route.ts:289", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/route.ts:289"}, "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-208554ea4120bcb6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/email/route.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/email/route.ts:120"}, "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-3c3496b15852b6bd", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/sign/route.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/sign/route.ts:105"}, "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-e22e26c9c7ee07ee", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/leegality/route.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/leegality/route.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-306f43df65e8a939", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/invoices/[id]/email/route.ts:218", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/invoices/[id]/email/route.ts:218"}, "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-fadbd6c11e6334c8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/page.tsx:226", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/page.tsx:226"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96f28ce99e69e3a6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/electricity/page.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/electricity/page.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-47b00f784b83dab7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/payables/page.tsx:422", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/payables/page.tsx:422"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acc30e5d2d9b04a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/orders/[id]/page.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/orders/[id]/page.tsx:216"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1f69198e81856ac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/catalog/[id]/page.tsx:276", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/catalog/[id]/page.tsx:276"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43d071cb594582b9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/vendors/[id]/page.tsx:905", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/vendors/[id]/page.tsx:905"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dd029d605336d91", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/bills/new/page.tsx:695", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/bills/new/page.tsx:695"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9d04d34f1afacf1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/spaces/[id]/page.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/spaces/[id]/page.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-bebd2c950d00e376", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/bookings/[id]/page.tsx:2142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/bookings/[id]/page.tsx:2142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1cbed6ceef2e2dc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/leads/page.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/leads/page.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-0b2c431cb46ca9ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/network/page.tsx:1212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/network/page.tsx:1212"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f14a42927035dfe4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/dashboard/page.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/dashboard/page.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-d1d6d1165a4798e6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/proposals/[id]/page.tsx:1361", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/proposals/[id]/page.tsx:1361"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04b45ca393a46dff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/accounting/page.tsx:647", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/accounting/page.tsx:647"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-346eee3dd5ede1d1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx:1175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx:1175"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2739c42012cf2769", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/my-tickets/page.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/my-tickets/page.tsx:236"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c5bac8816dd688b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/finance/gateway-activity/page.tsx:434", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/finance/gateway-activity/page.tsx:434"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42695b6aa6fbd449", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/locations/page.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/locations/page.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-72baf9728dded616", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/payroll/leaves/page.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/payroll/leaves/page.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-4208028e86331cfc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/billing/page.tsx:1185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/billing/page.tsx:1185"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edde51e19f106170", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/live-headcount/page.tsx:270", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/live-headcount/page.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-bf576727dcc0c396", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/push/page.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/push/page.tsx:241"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12079a4f0d4c64b5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx:1236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx:1236"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8302aad61cde59da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/access-analytics/page.tsx:310", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/access-analytics/page.tsx:310"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d301cc9d400a5dfd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/page.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/page.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-46766c15cbea4f82", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/issues/page.tsx:278", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/issues/page.tsx:278"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6af8679f5ce1961c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/issues/[id]/page.tsx:547", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/issues/[id]/page.tsx:547"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35fad4bdcb6967cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/assets/[id]/page.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/assets/[id]/page.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f9ae8916acab1c7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/my-issues/page.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/my-issues/page.tsx:170"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f683f725dd59596", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/rent-management/leases/[id]/page.tsx:738", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/rent-management/leases/[id]/page.tsx:738"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-91e904c0a30311e3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/rent-management/landlords/[id]/page.tsx:353", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/rent-management/landlords/[id]/page.tsx:353"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f991d718ecf4c13", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/pipeline/page.tsx:69", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/pipeline/page.tsx:69"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f3f22bdf10eb1f8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/infrastructure/page.tsx:434", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/infrastructure/page.tsx:434"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a41f475df0b7146", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/contracts/[id]/page.tsx:1224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/contracts/[id]/page.tsx:1224"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd30c651a022e5d5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/contracts/kyc-pending/page.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/contracts/kyc-pending/page.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-284d907b36a4c056", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/support/page.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/support/page.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e4489b399b17ec4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/documents/page.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/documents/page.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-ea039a7e30cd9f85", "name": "Stray `console.log` in TS/JS \u2014 src/lib/leegality.ts:198", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/leegality.ts:198"}, "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-9ae4ac5c7de64e41", "name": "Stray `console.log` in TS/JS \u2014 src/lib/push.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/push.ts:25"}, "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-1fb7c27ff61e1b0e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/mailer.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/mailer.ts:107"}, "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-3e0bcbfdc6e456dd", "name": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp.ts:554", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp.ts:554"}, "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-7aaa79cef67514d4", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/digio.ts:75", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/digio.ts:75"}, "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-90b221580dc72df9", "name": "Stray `console.log` in TS/JS \u2014 src/lib/facility-notifications.ts:186", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/facility-notifications.ts:186"}, "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-83784070ac69d3e4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/procurement/approval-code.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/procurement/approval-code.ts:26"}, "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-080aba282cf92a0c", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/e-invoice/public-keys.ts:35", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/e-invoice/public-keys.ts:35"}, "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-2cd554a61f788935", "name": "Insecure pattern 'node_child_process' in next.config.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in next.config.ts:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-61aadf2342298f70", "name": "Insecure pattern 'cors_wildcard' in bridge/src/health-server.ts:96", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in bridge/src/health-server.ts:96"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec28176122fadad2", "name": "Insecure pattern 'node_child_process' in bridge/src/tray.ts:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in bridge/src/tray.ts:23"}, "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-9c1d21d6945cf45a", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/shared/flow-guide-hint.tsx:47", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/shared/flow-guide-hint.tsx:47"}, "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-a66aab3958cb1a6f", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/occupancy/route.ts:85", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/occupancy/route.ts:85"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e7e59a45b561656", "name": "Insecure pattern 'document_write' in src/app/(dashboard)/bookings/[id]/page.tsx:612", "shortDescription": {"text": "Insecure pattern 'document_write' in src/app/(dashboard)/bookings/[id]/page.tsx:612"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8608776f7276c247", "name": "Very large file: bridge/src/tally-client.ts (1172 lines)", "shortDescription": {"text": "Very large file: bridge/src/tally-client.ts (1172 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-987c11e8f1787942", "name": "Very large file: src/types/index.ts (3448 lines)", "shortDescription": {"text": "Very large file: src/types/index.ts (3448 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-0116bfc85a6afd6e", "name": "Very large file: src/components/billing/view-statement-dialog.tsx (1457 lines)", "shortDescription": {"text": "Very large file: src/components/billing/view-statement-dialog.tsx (1457 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-4edb0dc16499e252", "name": "Very large file: src/app/api/digest/route.ts (1222 lines)", "shortDescription": {"text": "Very large file: src/app/api/digest/route.ts (1222 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abb6f33505e1b051", "name": "Very large file: src/app/(dashboard)/procurement/page.tsx (1075 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/procurement/page.tsx (1075 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-d920d75fc58c148e", "name": "Very large file: src/app/(dashboard)/procurement/orders/[id]/page.tsx (2436 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/procurement/orders/[id]/page.tsx (2436 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-04b2b5e4dea6d3cc", "name": "Very large file: src/app/(dashboard)/procurement/requests/[id]/page.tsx (1308 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/procurement/requests/[id]/page.tsx (1308 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-b14b2d972eb5cba9", "name": "Very large file: src/app/(dashboard)/procurement/vendors/[id]/page.tsx (1415 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/procurement/vendors/[id]/page.tsx (1415 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-aed317fa5e54fe13", "name": "Very large file: src/app/(dashboard)/procurement/bills/[id]/page.tsx (1803 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/procurement/bills/[id]/page.tsx (1803 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-50de78d07278531b", "name": "Very large file: src/app/(dashboard)/bookings/[id]/page.tsx (2649 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/bookings/[id]/page.tsx (2649 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-623ccefc091359eb", "name": "Very large file: src/app/(dashboard)/network/page.tsx (1573 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/network/page.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-329b3ee5a48c076f", "name": "Very large file: src/app/(dashboard)/proposals/[id]/page.tsx (1576 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/proposals/[id]/page.tsx (1576 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-5691a965ee31fd88", "name": "Very large file: src/app/(dashboard)/accounting/page.tsx (1757 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/accounting/page.tsx (1757 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-5d99261f6047ddcb", "name": "Very large file: src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx (2245 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx (2245 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-e4ad186a871f63c2", "name": "Very large file: src/app/(dashboard)/accounting/tds/page.tsx (1152 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/accounting/tds/page.tsx (1152 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-a0e26d9663714f8b", "name": "Very large file: src/app/(dashboard)/billing/page.tsx (1483 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/billing/page.tsx (1483 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-5c964a0b5a2db684", "name": "Very large file: src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx (1374 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx (1374 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-24f7cbfc18b2fe71", "name": "Very large file: src/app/(dashboard)/contracts/[id]/page.tsx (1733 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/contracts/[id]/page.tsx (1733 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-4b465df79327a426", "name": "Very large file: src/lib/help-content.ts (1577 lines)", "shortDescription": {"text": "Very large file: src/lib/help-content.ts (1577 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-49c690998081b7e1", "name": "Very large file: src/lib/pdf-generator.ts (1639 lines)", "shortDescription": {"text": "Very large file: src/lib/pdf-generator.ts (1639 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-4336e002d10316c2", "name": "Very large file: src/lib/billing.ts (1388 lines)", "shortDescription": {"text": "Very large file: src/lib/billing.ts (1388 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-3e1d5eb4694b475c", "name": "Very large file: src/lib/constants.ts (2088 lines)", "shortDescription": {"text": "Very large file: src/lib/constants.ts (2088 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": "11 test file(s) for 1013 source file(s) (ratio 0.01). 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-89ff96c5ca9612b8", "name": "Node manifest has dependencies but no lockfile: bridge/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: bridge/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 252 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 729 placeholder/mock markers across 204 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1389db4765b83af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/restore/storage-restore.mjs:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/restore/storage-restore.mjs: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-c6121b92d7ef2c67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:58"}, "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-4cae8ae69d3c8635", "name": "Commented-code block (5 lines) in bridge/src/poller.ts:222", "shortDescription": {"text": "Commented-code block (5 lines) in bridge/src/poller.ts:222"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10dc952d3f0b1e7b", "name": "Commented-code block (5 lines) in bridge/src/tally-client.ts:460", "shortDescription": {"text": "Commented-code block (5 lines) in bridge/src/tally-client.ts:460"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de9172e4a63c62f7", "name": "Legacy-named symbol `handoff_v2` in bridge/src/crm-client.ts:144", "shortDescription": {"text": "Legacy-named symbol `handoff_v2` in bridge/src/crm-client.ts:144"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a201ba3e151e72f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/gst-invoice-mode-settings.tsx:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/gst-invoice-mode-settings.tsx:91"}, "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-7ec516ae9d22e561", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/procurement-budget-settings.tsx:318", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/procurement-budget-settings.tsx:318"}, "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-068a21ff307027de", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/payment-gateway-settings.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/payment-gateway-settings.tsx:126"}, "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-11fd05855a3bcf06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/services-settings.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/services-settings.tsx:28"}, "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-e1011b631c92999c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-leave-agreement-tab.tsx:194", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-leave-agreement-tab.tsx:194"}, "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-374d4b0baa6a3ce2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-agreement-tab.tsx:172", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-agreement-tab.tsx:172"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15c2510a14ed8af2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-documents-tab.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-documents-tab.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-9a3066aa9129add4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/procurement/amc-event-dialog.tsx:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/procurement/amc-event-dialog.tsx:88"}, "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-e3cd9a03ed8d78e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/procurement/consumption-correction-dialog.tsx:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/procurement/consumption-correction-dialog.tsx:112"}, "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-15612105f04a0f9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/seat-occupant-form-dialog.tsx:149", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/seat-occupant-form-dialog.tsx:149"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c4214bf72e1438f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-form-dialog.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-form-dialog.tsx:76"}, "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-1cc8e1d3a9ca27ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/seat-occupants-panel.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/seat-occupants-panel.tsx:44"}, "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-e6be5290389262be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-allocation-selector.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-allocation-selector.tsx:40"}, "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-bbc9752d838e00fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/floor-form-dialog.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/floor-form-dialog.tsx:71"}, "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-acc4693de8ee78f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-charges-tab.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-charges-tab.tsx:79"}, "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-d3ef1a83ed87cb1d", "name": "Commented-code block (5 lines) in src/components/bookings/next-action-banner.tsx:200", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/bookings/next-action-banner.tsx:200"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-031526ac07c98170", "name": "Commented-code block (5 lines) in src/components/bookings/collect-payment-dialog.tsx:147", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/bookings/collect-payment-dialog.tsx:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e49d9a5f7385365c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/collect-payment-dialog.tsx:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/collect-payment-dialog.tsx:162"}, "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-6f9cec5aeb70580f", "name": "Commented-code block (6 lines) in src/components/bookings/booking-payment-summary.tsx:64", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/bookings/booking-payment-summary.tsx:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9204b41a26a48e92", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/no-show-refund-dialog.tsx:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/no-show-refund-dialog.tsx:127"}, "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-810973b4c3668643", "name": "Commented-code block (7 lines) in src/components/bookings/booking-lifecycle-timeline.tsx:251", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/bookings/booking-lifecycle-timeline.tsx:251"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c7bb90fa6e2ecd1", "name": "Commented-code block (5 lines) in src/components/bookings/booking-addons-section.tsx:200", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/bookings/booking-addons-section.tsx:200"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bc248c8ef80d751", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/booking-addons-section.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/booking-addons-section.tsx:78"}, "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-621b9733bb90f411", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/cancel-booking-dialog.tsx:165", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/cancel-booking-dialog.tsx:165"}, "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-a6fc0a216e42164c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-documents-tab.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-documents-tab.tsx:47"}, "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-d8e9a4f7e4e305d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-feedbacks-tab.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-feedbacks-tab.tsx:56"}, "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-923a76d375e2ca0d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-contacts-panel.tsx:158", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-contacts-panel.tsx:158"}, "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-83edf337e7a090c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-contracts-tab.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-contracts-tab.tsx:60"}, "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-1334f54a6550c639", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-tasks-tab.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-tasks-tab.tsx:32"}, "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-111c666022abc3a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-proposals-tab.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-proposals-tab.tsx:68"}, "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-303f2753edea5fd0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/network/network-widget.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/network/network-widget.tsx:32"}, "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-0f3ac9a207bfc4ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/shared/email-document-dialog.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/shared/email-document-dialog.tsx:123"}, "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-1022fcb6999384f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/approval-bell.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/approval-bell.tsx:152"}, "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-7a4f46a1c80bb12f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/in-app-notification-bell.tsx:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/in-app-notification-bell.tsx:162"}, "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-ff89f9ac567dbdb8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/proposals/proposal-form.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/proposals/proposal-form.tsx:67"}, "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-3c2cbde92eec7976", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/proposals/booking-confirmation-dialog.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/proposals/booking-confirmation-dialog.tsx:67"}, "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-137417616fe67eea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/manual-print-entry-dialog.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/manual-print-entry-dialog.tsx:134"}, "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-016de0d88ca0ab4a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/statement-lifecycle.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/statement-lifecycle.tsx:47"}, "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-f1ef48786449065b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/petty-cash-issuance.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/petty-cash-issuance.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-048515552eecb16b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/facility-usage-form.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/facility-usage-form.tsx:78"}, "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-cc4e12987207e0a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/print-report-upload-dialog.tsx:248", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/print-report-upload-dialog.tsx:248"}, "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-de0a7dd2175eed67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/gst-invoice-entry.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/gst-invoice-entry.tsx:54"}, "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-d81c9e4d82604419", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/add-contract-payment-dialog.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/add-contract-payment-dialog.tsx:92"}, "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-1db2d6d421fe993d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/team/user-activity-log.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/team/user-activity-log.tsx:123"}, "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-8ee786cbc1d5b69b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/locations/electricity-config-tab.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/locations/electricity-config-tab.tsx:59"}, "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-54488804a6ca2783", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/locations/location-form-dialog.tsx:198", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/locations/location-form-dialog.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-a3d3ca42e42f465e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/vouchers/upload-vouchers-dialog.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/vouchers/upload-vouchers-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-8da4f9f3af691623", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/vouchers/unifi-panel.tsx:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/vouchers/unifi-panel.tsx:156"}, "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-5091d6cc135ad110", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tasks/create-task-dialog.tsx:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tasks/create-task-dialog.tsx:77"}, "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-7a4591aa0d2b445c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/electricity-bills-tab.tsx:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/electricity-bills-tab.tsx:257"}, "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-9d8e4f48a1f01e62", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/refunds-tab.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/refunds-tab.tsx:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8fa22b10e329474", "name": "Commented-code block (7 lines) in src/components/billing/add-usage-charge-dialog.tsx:308", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/billing/add-usage-charge-dialog.tsx:308"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61c411f442ca154e", "name": "Legacy-named symbol `tally_handoff_v2` in src/components/billing/view-statement-dialog.tsx:590", "shortDescription": {"text": "Legacy-named symbol `tally_handoff_v2` in src/components/billing/view-statement-dialog.tsx:590"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0704f6a981eca282", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/view-statement-dialog.tsx:329", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/view-statement-dialog.tsx:329"}, "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-9715696f352c2121", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/electricity-bill-review-dialog.tsx:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/electricity-bill-review-dialog.tsx:91"}, "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-95bdab42adfad4ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/generate-statement-dialog.tsx:188", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/generate-statement-dialog.tsx:188"}, "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-10d3b5e7673a875b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/usage-review-dialog.tsx:200", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/usage-review-dialog.tsx:200"}, "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-844f1ba8af5d1939", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/monthly-billing-tabs.tsx:129", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/monthly-billing-tabs.tsx:129"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9f9f46677df87dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/publish-bridge-card.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/publish-bridge-card.tsx:38"}, "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-f22be0a8298d7051", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/packages/sell-package-dialog.tsx:158", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/packages/sell-package-dialog.tsx:158"}, "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-01032143e56b645d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/facility/report-wizard.tsx:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/facility/report-wizard.tsx:108"}, "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-5e20212d18a8f266", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/facility/asset-form-dialog.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/facility/asset-form-dialog.tsx:50"}, "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-6798dd32d14ed2f1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/activities/lead-timeline.tsx:440", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/activities/lead-timeline.tsx:440"}, "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-54fd809636e49821", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/activities/activity-form.tsx:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/activities/activity-form.tsx:101"}, "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-f73f3998b0ece37c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rent-management/AssetManager.tsx:196", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rent-management/AssetManager.tsx:196"}, "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-296d0532d7dd9bbc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-facilities-section.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-facilities-section.tsx:71"}, "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-2d22b024e91f1f50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/create-contract-dialog.tsx:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/create-contract-dialog.tsx:105"}, "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-9526c7b3a14fb80e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/cosec-access-wizard.tsx:562", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/cosec-access-wizard.tsx:562"}, "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-e23d1f526f133b95", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-vouchers-section.tsx:119", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-vouchers-section.tsx:119"}, "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-b8b48b5eb4a9bc25", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-contacts-panel.tsx:136", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-contacts-panel.tsx:136"}, "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-2525e08011c70fcd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-members-access-section.tsx:548", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-members-access-section.tsx:548"}, "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-2f3378fda748b08e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-electricity-tab.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-electricity-tab.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-698fa347aa5e91c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-addons-section.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-addons-section.tsx:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46af9eb4de1a6591", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-quotas-section.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-quotas-section.tsx:60"}, "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-364de0f45f8ed98b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-documents-tab.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-documents-tab.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-a414c799f21fb436", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/my-ticket-detail-dialog.tsx:189", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/my-ticket-detail-dialog.tsx:189"}, "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-4c36727a3a3dcf38", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/report-issue-dialog.tsx:142", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/report-issue-dialog.tsx:142"}, "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-3e1943187a54ce92", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/petty-cash/approvals-tab.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/petty-cash/approvals-tab.tsx:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-466ab395b293e6c4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/petty-cash/entries-tab.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/petty-cash/entries-tab.tsx:59"}, "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-be644b2864403da2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/providers/current-user-provider.tsx:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/providers/current-user-provider.tsx:8"}, "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-3a76b579958ce138", "name": "Commented-code block (6 lines) in src/app/api/tally/pending/route.ts:265", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/tally/pending/route.ts:265"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edac4479a16c8ab3", "name": "Commented-code block (5 lines) in src/app/api/tally/jobs/route.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/tally/jobs/route.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f14a77cc3f966a32", "name": "Commented-code block (5 lines) in src/app/api/procurement/bills/[id]/route.ts:171", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/procurement/bills/[id]/route.ts: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-247829bd78b44dcf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/procurement/vendor-prices/route.ts:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/procurement/vendor-prices/route.ts: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-655faef6cba818f1", "name": "Commented-code block (5 lines) in src/app/api/bookings/route.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/bookings/route.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2cd3b18014a349ea", "name": "Commented-code block (6 lines) in src/app/api/bookings/[id]/route.ts:450", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/bookings/[id]/route.ts:450"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b43335980e40ada", "name": "Commented-code block (7 lines) in src/app/api/bookings/[id]/email/route.ts:277", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/bookings/[id]/email/route.ts:277"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-443fd406cbd2927f", "name": "Commented-code block (5 lines) in src/app/api/bookings/[id]/comp-request/route.ts:305", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/bookings/[id]/comp-request/route.ts:305"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-50294dba3dbf0983", "name": "Commented-code block (5 lines) in src/app/api/bookings/[id]/defer/route.ts:182", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/bookings/[id]/defer/route.ts:182"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f0c7495ed3c3ecc", "name": "Commented-code block (5 lines) in src/app/api/dashboard/route.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/route.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7adea43ce56dc90", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/route.ts:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/route.ts: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-f230a93a768dbd35", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/proposals/[id]/accept/route.ts:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/proposals/[id]/accept/route.ts:144"}, "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-b114dc59e0b2b6bd", "name": "Commented-code block (5 lines) in src/app/api/proposals/[id]/send-invoice/route.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/proposals/[id]/send-invoice/route.ts:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20370501eb57c7fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/proposals/[id]/send-invoice/route.ts:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/proposals/[id]/send-invoice/route.ts:137"}, "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-23bb7afd700d6ac0", "name": "Legacy-named symbol `bulk_copy` in src/app/api/accounting/contract-facilities/copy/route.ts:77", "shortDescription": {"text": "Legacy-named symbol `bulk_copy` in src/app/api/accounting/contract-facilities/copy/route.ts:77"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd51ae3189c002ef", "name": "Commented-code block (5 lines) in src/app/api/accounting/monthly-summary/route.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/accounting/monthly-summary/route.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb8d556abf8973a8", "name": "Commented-code block (10 lines) in src/app/api/accounting/inbox/route.ts:53", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/accounting/inbox/route.ts:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ff69592b0f17d30", "name": "Commented-code block (5 lines) in src/app/api/addon-catalog/route.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/addon-catalog/route.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4af00185c785ae9d", "name": "Commented-code block (5 lines) in src/app/api/digest/route.ts:455", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/digest/route.ts:455"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bdd4f955c99425a", "name": "Commented-code block (5 lines) in src/app/api/facility/dashboard/route.ts:113", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/facility/dashboard/route.ts:113"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04af9c71db663dc0", "name": "Legacy-named symbol `is_legacy` in src/app/api/cosec/enrollments/route.ts:9", "shortDescription": {"text": "Legacy-named symbol `is_legacy` in src/app/api/cosec/enrollments/route.ts:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-068451cb6739c266", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/payments/create-payment-link/route.ts:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/payments/create-payment-link/route.ts:80"}, "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-f67ecfa49637b370", "name": "Commented-code block (6 lines) in src/app/api/cron/billing-reminder/route.ts:37", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/billing-reminder/route.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c15d633fe37e27a", "name": "Commented-code block (5 lines) in src/app/api/cron/payment-reminder/route.ts:92", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/payment-reminder/route.ts: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-9dac5dd39ff16dc5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/storage-backup/route.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/storage-backup/route.ts:32"}, "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-6a040ddeca3b1b47", "name": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/route.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/route.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61b1a7b6b4d577c7", "name": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/generate-gst-invoice/route.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/generate-gst-invoice/route.ts:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5eeedc038524167a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing-statements/[id]/confirm/route.ts:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing-statements/[id]/confirm/route.ts:150"}, "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-950f96ead6ad1a6c", "name": "Commented-code block (7 lines) in src/app/api/billing-statements/[id]/convert-to-gst-early/route.ts:140", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/billing-statements/[id]/convert-to-gst-early/route.ts:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34fef45d37c16613", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing-statements/[id]/convert-to-gst-early/route.ts:301", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing-statements/[id]/convert-to-gst-early/route.ts:301"}, "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-818ca2e4e6d0c78b", "name": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/void/route.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/void/route.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd00736fee08bfba", "name": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/payment/route.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/payment/route.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21f696427a0775a4", "name": "Commented-code block (6 lines) in src/app/api/booking-credits/route.ts:54", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/booking-credits/route.ts:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef957fe4fdfc44e1", "name": "Commented-code block (6 lines) in src/app/api/contracts/route.ts:25", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/contracts/route.ts:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7dda974a6ef5c0b", "name": "Commented-code block (6 lines) in src/app/api/contracts/[id]/route.ts:85", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/contracts/[id]/route.ts:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e49aac8076b0df31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/contracts/[id]/route.ts:406", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/contracts/[id]/route.ts:406"}, "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-7ec852f4fbacd7f0", "name": "Commented-code block (5 lines) in src/app/api/contracts/[id]/facilities/route.ts:276", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/contracts/[id]/facilities/route.ts:276"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e085ab37c7e1c5f3", "name": "Commented-code block (5 lines) in src/app/api/contracts/[id]/renew/route.ts:198", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/contracts/[id]/renew/route.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4bfd4fc8f8b0bc3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/contracts/[id]/vouchers/[issuanceId]/replace/route.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/contracts/[id]/vouchers/[issuanceId]/replace/route.ts:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9b905646f4a019a", "name": "Commented-code block (7 lines) in src/app/api/public/pay/route.ts:60", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/public/pay/route.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1fd824b41999d7bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/prepaid-purchases/route.ts:179", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/prepaid-purchases/route.ts:179"}, "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-4315a16c40d81b67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/prepaid-purchases/[id]/payment-link/route.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/prepaid-purchases/[id]/payment-link/route.ts:76"}, "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-e079f8e135715c97", "name": "Commented-code block (6 lines) in src/app/api/usage-charges/route.ts:153", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/usage-charges/route.ts:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dc336209cdc9c94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/invoices/route.ts:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/invoices/route.ts:156"}, "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-741b5fe39742f545", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/invoices/[id]/email/route.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/invoices/[id]/email/route.ts: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-7d3ac8083183264c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/new/page.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/new/page.tsx:34"}, "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-764f16398f786d91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/[id]/page.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/[id]/page.tsx:63"}, "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-1a75573a87c40350", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/page.tsx:319", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/page.tsx:319"}, "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-92dbdc922a215de6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/electricity/page.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/electricity/page.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-3f45f06a23d9e5a6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/inventory/page.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/inventory/page.tsx:32"}, "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-78d8b95bdd77e726", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/payables/page.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/payables/page.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-0ed28451b502da22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/page.tsx:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/page.tsx:81"}, "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-68c59dfecb40f844", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/new-service/page.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/new-service/page.tsx:79"}, "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-d6bc5cc65cb87930", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/new/page.tsx:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/new/page.tsx:144"}, "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-d5d26145606a3849", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/[id]/page.tsx:353", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/[id]/page.tsx:353"}, "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-3a7394bf107d44c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/page.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/page.tsx:66"}, "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-16b6c1071ff99f4d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/new/page.tsx:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/new/page.tsx:112"}, "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-9d63d058e8466347", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/[id]/page.tsx:225", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/[id]/page.tsx:225"}, "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-0f15e60affdd8665", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/catalog/page.tsx:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/catalog/page.tsx:112"}, "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-a6c681b0454b970f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/catalog/[id]/page.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/catalog/[id]/page.tsx:97"}, "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-a231021d81755832", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/vendors/page.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/vendors/page.tsx:97"}, "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-69acaac1afe73c94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/vendors/[id]/page.tsx:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/vendors/[id]/page.tsx:77"}, "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-d2ba6cad35460ec3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/page.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/page.tsx:60"}, "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-b595ba795e0164a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/new/page.tsx:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/new/page.tsx:98"}, "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-b91ee34dfb468795", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/[id]/page.tsx:242", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/[id]/page.tsx:242"}, "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-d59a3ddb790dd01d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/consumption/history/page.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/consumption/history/page.tsx:67"}, "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-7f5937304ceace91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/page.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/page.tsx:38"}, "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-051fd9384ff821f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/new/page.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/new/page.tsx:80"}, "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-8f39af820274cecf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/[id]/page.tsx:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/[id]/page.tsx:77"}, "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-5cb09b7c7ceb1003", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/page.tsx:452", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/page.tsx:452"}, "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-9bb47fc0874de44d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/new/page.tsx:540", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/new/page.tsx:540"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-faa30c78bbaa26dd", "name": "Commented-code block (8 lines) in src/app/(dashboard)/bookings/[id]/page.tsx:515", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/(dashboard)/bookings/[id]/page.tsx:515"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f3c5a4280f3496f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/[id]/page.tsx:251", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/[id]/page.tsx:251"}, "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-1c48efa0ac5a5667", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/new/page.tsx:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/new/page.tsx:12"}, "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-b4f73ded87a28b90", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/[id]/page.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/[id]/page.tsx:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-813b0ac56edfd82f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/[id]/edit/page.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/[id]/edit/page.tsx:21"}, "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-aa4b7c843a4e9db9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/dashboard/page.tsx:219", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/dashboard/page.tsx:219"}, "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-85e076d5faac87a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/proposals/page.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/proposals/page.tsx:30"}, "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-58b91b43603a5e2e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/proposals/[id]/page.tsx:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/proposals/[id]/page.tsx:127"}, "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-5aba519fe12db491", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/page.tsx:187", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/page.tsx:187"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f87d427b1808f2ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx:310", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx:310"}, "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-1a98f0685a272dad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/tds/page.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/tds/page.tsx:59"}, "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-68cae00fc20f8758", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/my-tickets/page.tsx:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/my-tickets/page.tsx:77"}, "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-af49fa3f672ba4da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/team/page.tsx:317", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/team/page.tsx:317"}, "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-7565640a4c06b596", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/locations/[id]/page.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/locations/[id]/page.tsx:68"}, "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-010730bc6e589a94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/vouchers/page.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/vouchers/page.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-4e43da6eec6e15e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/tasks/page.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/tasks/page.tsx:58"}, "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-2461bd1b80f2bb3c", "name": "Commented-code block (5 lines) in src/app/(dashboard)/billing/page.tsx:405", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/billing/page.tsx:405"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-550ca6f6fc0a02d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/billing/page.tsx:481", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/billing/page.tsx:481"}, "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-41a9425c26c591bc", "name": "Commented-code block (5 lines) in src/app/(dashboard)/admin/employees/page.tsx:100", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/admin/employees/page.tsx:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-098a9d9d920bc5bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/employees/page.tsx:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/employees/page.tsx:264"}, "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-ed05837f2925ceff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/employees/[id]/page.tsx:204", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/employees/[id]/page.tsx:204"}, "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-5f0bbdecfe3c465d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/push/page.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/push/page.tsx:50"}, "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-6eb5619c8c8e7844", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/tally-sync/page.tsx:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/tally-sync/page.tsx:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2387a56949e9bae9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx:316", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx:316"}, "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-7bdd89d487e8b9d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/dept-ids/page.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/dept-ids/page.tsx:56"}, "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-cbb07bbe2ff4fedd", "name": "Legacy-named symbol `is_legacy` in src/app/(dashboard)/admin/cosec-access/page.tsx:42", "shortDescription": {"text": "Legacy-named symbol `is_legacy` in src/app/(dashboard)/admin/cosec-access/page.tsx:42"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9cec11fe3bf873e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/access-profiles/page.tsx:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/access-profiles/page.tsx:81"}, "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-f608488aacf1ca81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/access-analytics/page.tsx:149", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/access-analytics/page.tsx:149"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4137b28631426da9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/packages/page.tsx:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/packages/page.tsx:140"}, "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-aa018edc7e4ab4f1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/page.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/page.tsx:46"}, "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-5ba7798a989deeef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/team-kpi/page.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/team-kpi/page.tsx:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b33202273f65611e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/issues/page.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/issues/page.tsx:73"}, "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-fa4eb2f5f92698b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/issues/[id]/page.tsx:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/issues/[id]/page.tsx:56"}, "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-52836691db119ed7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/assets/page.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/assets/page.tsx:28"}, "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-dc105348ac2f941a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/assets/[id]/page.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/assets/[id]/page.tsx:22"}, "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-eacfc9a502c2c424", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/my-issues/page.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/my-issues/page.tsx:70"}, "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-8666ade1ced9e238", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/approvals/page.tsx:272", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/approvals/page.tsx:272"}, "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-7e9d4cf3080b2e42", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/activities/page.tsx:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/activities/page.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-c74fe856908eddfc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/page.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/page.tsx:54"}, "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-0ad51b7667924f07", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/page.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/page.tsx:41"}, "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-55385288b7db46b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/new/page.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/new/page.tsx:48"}, "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-5892651970a8fb56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/[id]/page.tsx:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/[id]/page.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-3c122542f8922d43", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/[id]/edit/page.tsx:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/[id]/edit/page.tsx:43"}, "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-8652f5195d101ce8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/page.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/page.tsx:41"}, "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-31f5f597a3cff23b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/new/page.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/new/page.tsx:41"}, "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-fe34bb39bc44b3ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/[id]/page.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/[id]/page.tsx:80"}, "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-1c360762ad3dd17a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/audit-logs/page.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/audit-logs/page.tsx:123"}, "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-f3043fe1a0ad54ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/pipeline/page.tsx:180", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/pipeline/page.tsx:180"}, "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-42c6eace070c899d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/page.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/page.tsx:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7342d445a81b4425", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/[id]/page.tsx:136", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/[id]/page.tsx:136"}, "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-baa92ee001b97531", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/kyc-pending/page.tsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/kyc-pending/page.tsx:85"}, "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-05a4c50e256672d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/support/page.tsx:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/support/page.tsx:94"}, "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-67306682aec6cf56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/documents/page.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/documents/page.tsx:47"}, "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-1be3327660ffea1d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/aggregators/new/page.tsx:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/aggregators/new/page.tsx:12"}, "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-09b29fe166e0d2ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/aggregators/[id]/page.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/aggregators/[id]/page.tsx:47"}, "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-ef0d02aa6f53ee30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/headcount/page.tsx:233", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/headcount/page.tsx:233"}, "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-693fe71f98e87463", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/page.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/page.tsx:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5f1d9dbe475eece", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/leegality.ts:184", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/leegality.ts:184"}, "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-78c9435543c05814", "name": "Commented-code block (6 lines) in src/lib/pdf-generator.ts:72", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/pdf-generator.ts:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f51e52ea8e8999d3", "name": "Commented-code block (9 lines) in src/lib/billing.ts:661", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/billing.ts:661"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9f7e444cf7b0e53", "name": "Legacy-named symbol `gmail_v1` in src/lib/gmail.ts:1", "shortDescription": {"text": "Legacy-named symbol `gmail_v1` in src/lib/gmail.ts:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70fdf1ae70c8c2d6", "name": "Commented-code block (6 lines) in src/lib/payment-reminder.ts:305", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/payment-reminder.ts:305"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9cc44f37fce74734", "name": "Commented-code block (5 lines) in src/lib/constants.ts:337", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/constants.ts:337"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1640d5c4980e73ba", "name": "Commented-code block (5 lines) in src/lib/send-proforma.ts:249", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/send-proforma.ts:249"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5afabce581edd3dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/send-proforma.ts:167", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/send-proforma.ts:167"}, "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-a5fdc151965751ec", "name": "Commented-code block (18 lines) in src/lib/digio.ts:79", "shortDescription": {"text": "Commented-code block (18 lines) in src/lib/digio.ts:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c96973204ebbf113", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/digio.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/digio.ts:79"}, "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-57a5850daf230e45", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/unifi.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/unifi.ts:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27add23b1f51b8f3", "name": "Commented-code block (5 lines) in src/lib/tally/dispatch-tally-invoice.ts:285", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tally/dispatch-tally-invoice.ts:285"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d96219d25688b46", "name": "Commented-code block (5 lines) in src/lib/__tests__/electricity.test.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/electricity.test.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b98e5b0752d00ac0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/e-invoice/adapters/nic-protocol.ts:147", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/e-invoice/adapters/nic-protocol.ts:147"}, "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-12c1e5e936e89068", "name": "Commented-code block (8 lines) in src/lib/uploads/upload-gate.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/uploads/upload-gate.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b87d95923053f4b", "name": "Commented-code block (5 lines) in src/lib/uploads/normalize-pdf-client.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/uploads/normalize-pdf-client.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15c3a1c18e8e9ea8", "name": "Commented-code block (5 lines) in src/lib/uploads/normalize-upload-server.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/uploads/normalize-upload-server.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5c37dcffdfafd81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-fetch.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-fetch.ts:12"}, "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-b2e1db64de01ac2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-push-notifications.ts:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-push-notifications.ts:84"}, "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-5fc6d90eb91d4154", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-debounced.ts:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-debounced.ts:10"}, "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-f697022b8ecb2933", "name": "46 env vars used in code but missing from .env.example", "shortDescription": {"text": "46 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APPROVAL_CODE_SECRET`, `B2_APPLICATION_KEY`, `B2_BUCKET`, `B2_ENDPOINT`, `B2_KEY_ID`, `BACKUP_DB_HOST`, `BACKUP_DB_NAME`, `BACKUP_DB_PASSWORD` + 38 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22300"}, "properties": {"repository": "vinit2776/TWVCRM", "repoUrl": "https://github.com/vinit2776/TWVCRM", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-8777af77f4fd8526", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/health-server.ts:105"}, "properties": {"repobilityId": "7b29e75d6d97bc29", "scanner": "scanner-primary", "fingerprint": "8777af77f4fd8526", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ddb33b937b704119", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/test-credit-note.ts:31"}, "properties": {"repobilityId": "89315e758bd2edb9", "scanner": "scanner-primary", "fingerprint": "ddb33b937b704119", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3f224778a8507d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/test-receipt-voucher.ts:38"}, "properties": {"repobilityId": "cfe92f8ece950862", "scanner": "scanner-primary", "fingerprint": "c3f224778a8507d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ade0accea16189c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/mock-tally-server.ts:32"}, "properties": {"repobilityId": "c7b8b54f2eb3ec84", "scanner": "scanner-primary", "fingerprint": "9ade0accea16189c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5bcf3b90cab40cf6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/uninstall-service.ts:13"}, "properties": {"repobilityId": "31c7a424ad2e3d07", "scanner": "scanner-primary", "fingerprint": "5bcf3b90cab40cf6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30ecff52287489a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/uninstall-tray.ts:18"}, "properties": {"repobilityId": "6a9292e8ddb6cb2d", "scanner": "scanner-primary", "fingerprint": "30ecff52287489a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92b2facbc23641cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/install-tray.ts:44"}, "properties": {"repobilityId": "9180411f3f7c439d", "scanner": "scanner-primary", "fingerprint": "92b2facbc23641cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dda0ef1dfe6be433", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/install-service.ts:29"}, "properties": {"repobilityId": "1c5da5114b52a3cf", "scanner": "scanner-primary", "fingerprint": "dda0ef1dfe6be433", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-952a2730045ae912", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bridge/src/diagnose-tally.ts:53"}, "properties": {"repobilityId": "efc55291d81569b1", "scanner": "scanner-primary", "fingerprint": "952a2730045ae912", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12011f38a9d6dc16", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/procurement-budget-settings.tsx:249"}, "properties": {"repobilityId": "0ed31d0763bc4156", "scanner": "scanner-primary", "fingerprint": "12011f38a9d6dc16", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb2fb61c3c682606", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/case-emails-tab.tsx:63"}, "properties": {"repobilityId": "3031edf01158c224", "scanner": "scanner-primary", "fingerprint": "cb2fb61c3c682606", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1997b6a924d96519", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/case-kanban-board.tsx:101"}, "properties": {"repobilityId": "55b8c1181559ef95", "scanner": "scanner-primary", "fingerprint": "1997b6a924d96519", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ea9e4bcba25a16c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/help/help-sidebar-nav.tsx:31"}, "properties": {"repobilityId": "7c826a5ab53db79b", "scanner": "scanner-primary", "fingerprint": "5ea9e4bcba25a16c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-539d6eb75cd2aabb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/procurement/amc-event-dialog.tsx:222"}, "properties": {"repobilityId": "a6cc99ccec862f4b", "scanner": "scanner-primary", "fingerprint": "539d6eb75cd2aabb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-448a1f083e3ef951", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-occupant-form-dialog.tsx:100"}, "properties": {"repobilityId": "1aafa8117cc741df", "scanner": "scanner-primary", "fingerprint": "448a1f083e3ef951", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-01264daf75c74761", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/space-analytics.tsx:197"}, "properties": {"repobilityId": "7a4a4e4373510e6a", "scanner": "scanner-primary", "fingerprint": "01264daf75c74761", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62546caa024d843f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/floor-canvas.tsx:325"}, "properties": {"repobilityId": "1ce12ef5d8eb7ef2", "scanner": "scanner-primary", "fingerprint": "62546caa024d843f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9b4c25254848386", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-occupants-panel.tsx:166"}, "properties": {"repobilityId": "52bc4b7cf369dd4e", "scanner": "scanner-primary", "fingerprint": "a9b4c25254848386", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dd2c87475e397978", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/space-allocation-selector.tsx:119"}, "properties": {"repobilityId": "9fd7fe0891f5f9a4", "scanner": "scanner-primary", "fingerprint": "dd2c87475e397978", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d453023130529c08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/spaces/seat-transfer-dialog.tsx:112"}, "properties": {"repobilityId": "ea0cc075b49a395e", "scanner": "scanner-primary", "fingerprint": "d453023130529c08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c4e87b0d1673ed5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/collect-payment-dialog.tsx:448"}, "properties": {"repobilityId": "c377a7e770d1e25c", "scanner": "scanner-primary", "fingerprint": "8c4e87b0d1673ed5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c2d89f4888724ec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/calendar-view.tsx:160"}, "properties": {"repobilityId": "38aa6b1257d16cf3", "scanner": "scanner-primary", "fingerprint": "0c2d89f4888724ec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f2193c094106432", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/share-payment-link-dialog.tsx:245"}, "properties": {"repobilityId": "c764bfbe07801f10", "scanner": "scanner-primary", "fingerprint": "6f2193c094106432", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-06fbf3d3daa60636", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/no-show-refund-dialog.tsx:266"}, "properties": {"repobilityId": "be9040f015715f04", "scanner": "scanner-primary", "fingerprint": "06fbf3d3daa60636", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6081626a3d99c82", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/checkout-feedback-dialog.tsx:147"}, "properties": {"repobilityId": "fde166fcf592ecaf", "scanner": "scanner-primary", "fingerprint": "e6081626a3d99c82", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb8df97e91e0736c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/booking-addons-section.tsx:154"}, "properties": {"repobilityId": "0e56454d2c135fd2", "scanner": "scanner-primary", "fingerprint": "cb8df97e91e0736c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-db45bae2a3dcc26d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/new-booking/booking-summary-section.tsx:127"}, "properties": {"repobilityId": "495c4ca7ccb8086f", "scanner": "scanner-primary", "fingerprint": "db45bae2a3dcc26d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d8acfbf55399022d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/bookings/new-booking/customer-details-section.tsx:70"}, "properties": {"repobilityId": "fc2f610fbd8c4cae", "scanner": "scanner-primary", "fingerprint": "d8acfbf55399022d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d78dc6a6872922a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/leads/lead-documents-tab.tsx:187"}, "properties": {"repobilityId": "d00de284227b6142", "scanner": "scanner-primary", "fingerprint": "d78dc6a6872922a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b4ce6b78d90b9ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/leads/import-leads-dialog.tsx:262"}, "properties": {"repobilityId": "e9b5bbb303b941d4", "scanner": "scanner-primary", "fingerprint": "4b4ce6b78d90b9ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad25809b9e33c864", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/flow-guide-hint.tsx:84"}, "properties": {"repobilityId": "22111eca22445bf5", "scanner": "scanner-primary", "fingerprint": "ad25809b9e33c864", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3feebb8d6985b40f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/shared/flow-guide-hint.tsx:47"}, "properties": {"repobilityId": "82642b9f49caf9fb", "scanner": "scanner-primary", "fingerprint": "3feebb8d6985b40f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2389ea066460d994", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/followups-widget.tsx:172"}, "properties": {"repobilityId": "7d851eba2a715c65", "scanner": "scanner-primary", "fingerprint": "2389ea066460d994", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67f02f80c34348ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/enquiry-alert-banner.tsx:47"}, "properties": {"repobilityId": "c2fc8a91bd5c955a", "scanner": "scanner-primary", "fingerprint": "67f02f80c34348ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-959ac853102e017f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/approval-bell.tsx:576"}, "properties": {"repobilityId": "edd838421ccabf92", "scanner": "scanner-primary", "fingerprint": "959ac853102e017f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7b336eb7ca00c34", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/header.tsx:110"}, "properties": {"repobilityId": "de67764d663b6fd5", "scanner": "scanner-primary", "fingerprint": "a7b336eb7ca00c34", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b16bedb1a395253", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/notification-bell.tsx:47"}, "properties": {"repobilityId": "1ed5e2d412f9fe66", "scanner": "scanner-primary", "fingerprint": "7b16bedb1a395253", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ae7314aa68865b60", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/recent-leads-widget.tsx:114"}, "properties": {"repobilityId": "6c533c011beea819", "scanner": "scanner-primary", "fingerprint": "ae7314aa68865b60", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ad932cbf46da8b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/recent-activities-widget.tsx:52"}, "properties": {"repobilityId": "288d6f2311db56d0", "scanner": "scanner-primary", "fingerprint": "5ad932cbf46da8b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-20db0e57786c4253", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/notes-widget.tsx:75"}, "properties": {"repobilityId": "2fb9c8ecf7c1228f", "scanner": "scanner-primary", "fingerprint": "20db0e57786c4253", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c2fd112122800fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/rent-revenue-widget.tsx:64"}, "properties": {"repobilityId": "9752b461d0295112", "scanner": "scanner-primary", "fingerprint": "9c2fd112122800fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2aa6f81ede8a15d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/schedule-widget.tsx:116"}, "properties": {"repobilityId": "42537083202cbb43", "scanner": "scanner-primary", "fingerprint": "2aa6f81ede8a15d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4229846914f30031", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/pending-actions-widget.tsx:109"}, "properties": {"repobilityId": "4b39444742457ebd", "scanner": "scanner-primary", "fingerprint": "4229846914f30031", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c32dbc1303a90d5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/procurement-spend-widget.tsx:105"}, "properties": {"repobilityId": "b55282f915e3accb", "scanner": "scanner-primary", "fingerprint": "c32dbc1303a90d5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-032e3f2165629b4b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/quota-overuse-widget.tsx:83"}, "properties": {"repobilityId": "b35929607322513f", "scanner": "scanner-primary", "fingerprint": "032e3f2165629b4b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df0a07a31ec9e24e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/renewal-pipeline-widget.tsx:152"}, "properties": {"repobilityId": "911f44b1fa87af6f", "scanner": "scanner-primary", "fingerprint": "df0a07a31ec9e24e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fdf6ef9584bfb769", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/occupancy-widget.tsx:108"}, "properties": {"repobilityId": "d88f99b42f76480d", "scanner": "scanner-primary", "fingerprint": "fdf6ef9584bfb769", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd68aa6671f8f3dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/team-performance-widget.tsx:81"}, "properties": {"repobilityId": "440d234afca980b1", "scanner": "scanner-primary", "fingerprint": "bd68aa6671f8f3dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-567514ae690cdbe3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/mtd-bookings-widget.tsx:107"}, "properties": {"repobilityId": "041274318fa445a3", "scanner": "scanner-primary", "fingerprint": "567514ae690cdbe3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5fbb168b6da3b806", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/member-health-widget.tsx:106"}, "properties": {"repobilityId": "2c7a4125b3055f8b", "scanner": "scanner-primary", "fingerprint": "5fbb168b6da3b806", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4082a1a9d359b184", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/aggregator-performance-widget.tsx:86"}, "properties": {"repobilityId": "98433a90d65304e2", "scanner": "scanner-primary", "fingerprint": "4082a1a9d359b184", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-506bed22bfea4d30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/widgets/source-roi-widget.tsx:82"}, "properties": {"repobilityId": "8af4f8db342a036f", "scanner": "scanner-primary", "fingerprint": "506bed22bfea4d30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-54f69529fa0c30a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/proposals/preset-picker.tsx:278"}, "properties": {"repobilityId": "09379e27ba10608b", "scanner": "scanner-primary", "fingerprint": "54f69529fa0c30a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7685c8a85498a331", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/contract-accounting-row.tsx:298"}, "properties": {"repobilityId": "c38cc36c7cd7ec60", "scanner": "scanner-primary", "fingerprint": "7685c8a85498a331", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb370e6985eeb45a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/tally-inbox-client.tsx:452"}, "properties": {"repobilityId": "83738f71fe103249", "scanner": "scanner-primary", "fingerprint": "cb370e6985eeb45a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-216c23b5a79a8333", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/action-required-banner.tsx:195"}, "properties": {"repobilityId": "892426f0cfe538da", "scanner": "scanner-primary", "fingerprint": "216c23b5a79a8333", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-92fb49a299926e84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/proposal-payments-tab.tsx:331"}, "properties": {"repobilityId": "a47985490dbe223f", "scanner": "scanner-primary", "fingerprint": "92fb49a299926e84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f962dcfc07b5d020", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/statement-lifecycle.tsx:284"}, "properties": {"repobilityId": "ac57d34cdf3b4693", "scanner": "scanner-primary", "fingerprint": "f962dcfc07b5d020", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-47f7a5f4f643fc6e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/accounting/print-report-upload-dialog.tsx:134"}, "properties": {"repobilityId": "41b48de4f35cdb0f", "scanner": "scanner-primary", "fingerprint": "47f7a5f4f643fc6e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46648f2b6fc42bff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/team/user-activity-log.tsx:261"}, "properties": {"repobilityId": "636194cad58abd08", "scanner": "scanner-primary", "fingerprint": "46648f2b6fc42bff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a65df7b65405e234", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/locations/location-form-dialog.tsx:342"}, "properties": {"repobilityId": "0169ee702b10cf72", "scanner": "scanner-primary", "fingerprint": "a65df7b65405e234", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1bed882a2bb76db9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/vouchers/voucher-issuance-dialog.tsx:170"}, "properties": {"repobilityId": "ebcb035897119639", "scanner": "scanner-primary", "fingerprint": "1bed882a2bb76db9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-20151854fc327d19", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/vouchers/unifi-panel.tsx:519"}, "properties": {"repobilityId": "634b9e482976cea9", "scanner": "scanner-primary", "fingerprint": "20151854fc327d19", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-becc3a5e09ef546d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/tally-bridge-health-card.tsx:121"}, "properties": {"repobilityId": "77ab38413ed878a5", "scanner": "scanner-primary", "fingerprint": "becc3a5e09ef546d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a60e3b304bf4b87a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/view-statement-dialog.tsx:746"}, "properties": {"repobilityId": "1351c002f91b9192", "scanner": "scanner-primary", "fingerprint": "a60e3b304bf4b87a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-651048c528507540", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/billing/generate-statement-dialog.tsx:447"}, "properties": {"repobilityId": "f3dffe73c9cbce58", "scanner": "scanner-primary", "fingerprint": "651048c528507540", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71b03341b0fc60b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/facility/report-wizard.tsx:213"}, "properties": {"repobilityId": "1d85cb342af33503", "scanner": "scanner-primary", "fingerprint": "71b03341b0fc60b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-471f9694f4e84af6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rent-management/AssetManager.tsx:433"}, "properties": {"repobilityId": "294ef43f698e29f3", "scanner": "scanner-primary", "fingerprint": "471f9694f4e84af6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b3a884a84f34dc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-space-manager.tsx:329"}, "properties": {"repobilityId": "721a5d4d5e306906", "scanner": "scanner-primary", "fingerprint": "7b3a884a84f34dc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-248881e30f316deb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-bookings-section.tsx:227"}, "properties": {"repobilityId": "0382abf400fa9e80", "scanner": "scanner-primary", "fingerprint": "248881e30f316deb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-be0145d01a10da4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-service-usage-section.tsx:245"}, "properties": {"repobilityId": "0f4f66d906e2e0cd", "scanner": "scanner-primary", "fingerprint": "be0145d01a10da4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f5c9ec9d85f4bdd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contracts/contract-addons-section.tsx:169"}, "properties": {"repobilityId": "c1176ad38aedf4d2", "scanner": "scanner-primary", "fingerprint": "4f5c9ec9d85f4bdd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5b11582a0293660", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/my-ticket-detail-dialog.tsx:276"}, "properties": {"repobilityId": "2d52272991e930d8", "scanner": "scanner-primary", "fingerprint": "a5b11582a0293660", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81babd41361e939c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/report-issue-dialog.tsx:274"}, "properties": {"repobilityId": "688d1fe10b3672e3", "scanner": "scanner-primary", "fingerprint": "81babd41361e939c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-891e8f3579cd7ebf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/support/ticket-detail-dialog.tsx:308"}, "properties": {"repobilityId": "8d6c53ad6d28bdd7", "scanner": "scanner-primary", "fingerprint": "891e8f3579cd7ebf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afafd087780c891b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/all-books-tab.tsx:255"}, "properties": {"repobilityId": "5be1ce2a1d15a6ad", "scanner": "scanner-primary", "fingerprint": "afafd087780c891b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a95ae8f429e052b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/requests-tab.tsx:113"}, "properties": {"repobilityId": "898100ead6e4cd55", "scanner": "scanner-primary", "fingerprint": "a95ae8f429e052b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c7a7eabefa260f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/my-book-tab.tsx:67"}, "properties": {"repobilityId": "c5b173ed2c4da59e", "scanner": "scanner-primary", "fingerprint": "0c7a7eabefa260f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d64289180bd7a884", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/petty-cash/entries-tab.tsx:184"}, "properties": {"repobilityId": "5be69f0529f61a54", "scanner": "scanner-primary", "fingerprint": "d64289180bd7a884", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f54816f85b6eb53c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/procurement/orders/[id]/email/route.ts:129"}, "properties": {"repobilityId": "643d99fa6f7319a1", "scanner": "scanner-primary", "fingerprint": "f54816f85b6eb53c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9fc4dcc97bfb7c35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/proposals/[id]/email/route.ts:273"}, "properties": {"repobilityId": "48f71d8b09388400", "scanner": "scanner-primary", "fingerprint": "9fc4dcc97bfb7c35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac1791a8b39b2d45", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/gst-invoices/[id]/email/route.ts:125"}, "properties": {"repobilityId": "5134b92ce27c8a78", "scanner": "scanner-primary", "fingerprint": "ac1791a8b39b2d45", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25ba1e380fb9f837", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/accounting/contract-payments/[id]/remind/route.ts:104"}, "properties": {"repobilityId": "cf5f3acfcbd0e3fa", "scanner": "scanner-primary", "fingerprint": "25ba1e380fb9f837", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74fd866fefe25337", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/otp/route.ts:118"}, "properties": {"repobilityId": "0cbae9f4128e3c35", "scanner": "scanner-primary", "fingerprint": "74fd866fefe25337", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a806011844d6e44", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/contract-expiry/route.ts:133"}, "properties": {"repobilityId": "8849db4c9145a302", "scanner": "scanner-primary", "fingerprint": "9a806011844d6e44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05fd90610a7f1449", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/db-backup/route.ts:96"}, "properties": {"repobilityId": "09bc1d767cda0b58", "scanner": "scanner-primary", "fingerprint": "05fd90610a7f1449", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b446dcf88ee99389", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/headcount-reminder/route.ts:66"}, "properties": {"repobilityId": "af5f6a4590ad3aa5", "scanner": "scanner-primary", "fingerprint": "b446dcf88ee99389", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88dda9d179f97d84", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/storage-backup/route.ts:102"}, "properties": {"repobilityId": "f165a9b185fbc127", "scanner": "scanner-primary", "fingerprint": "88dda9d179f97d84", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b60049ad193b5a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/route.ts:289"}, "properties": {"repobilityId": "be24593407252c82", "scanner": "scanner-primary", "fingerprint": "8b60049ad193b5a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-208554ea4120bcb6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/email/route.ts:120"}, "properties": {"repobilityId": "5911382ec8cfeed6", "scanner": "scanner-primary", "fingerprint": "208554ea4120bcb6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c3496b15852b6bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/contracts/[id]/sign/route.ts:105"}, "properties": {"repobilityId": "24d2560edfd64c5d", "scanner": "scanner-primary", "fingerprint": "3c3496b15852b6bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e22e26c9c7ee07ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/leegality/route.ts:84"}, "properties": {"repobilityId": "e61d1e83ca42339c", "scanner": "scanner-primary", "fingerprint": "e22e26c9c7ee07ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-306f43df65e8a939", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/invoices/[id]/email/route.ts:218"}, "properties": {"repobilityId": "b1714b8da946e757", "scanner": "scanner-primary", "fingerprint": "306f43df65e8a939", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fadbd6c11e6334c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/page.tsx:226"}, "properties": {"repobilityId": "2761a8a36f8a238c", "scanner": "scanner-primary", "fingerprint": "fadbd6c11e6334c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96f28ce99e69e3a6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/electricity/page.tsx:244"}, "properties": {"repobilityId": "40e19d64f1045521", "scanner": "scanner-primary", "fingerprint": "96f28ce99e69e3a6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-47b00f784b83dab7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/payables/page.tsx:422"}, "properties": {"repobilityId": "3e1f6a5c69c4984c", "scanner": "scanner-primary", "fingerprint": "47b00f784b83dab7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-acc30e5d2d9b04a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/orders/[id]/page.tsx:216"}, "properties": {"repobilityId": "68c0a8ac35c0fbb5", "scanner": "scanner-primary", "fingerprint": "acc30e5d2d9b04a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1f69198e81856ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/catalog/[id]/page.tsx:276"}, "properties": {"repobilityId": "334355956ba01e0f", "scanner": "scanner-primary", "fingerprint": "c1f69198e81856ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-43d071cb594582b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/vendors/[id]/page.tsx:905"}, "properties": {"repobilityId": "020b9e9a6006aa0c", "scanner": "scanner-primary", "fingerprint": "43d071cb594582b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2dd029d605336d91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/procurement/bills/new/page.tsx:695"}, "properties": {"repobilityId": "2b8781753850a5cf", "scanner": "scanner-primary", "fingerprint": "2dd029d605336d91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f9d04d34f1afacf1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/spaces/[id]/page.tsx:255"}, "properties": {"repobilityId": "668de7d44a299a44", "scanner": "scanner-primary", "fingerprint": "f9d04d34f1afacf1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bebd2c950d00e376", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/bookings/[id]/page.tsx:2142"}, "properties": {"repobilityId": "ba3f0b95063230eb", "scanner": "scanner-primary", "fingerprint": "bebd2c950d00e376", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b1cbed6ceef2e2dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/leads/page.tsx:171"}, "properties": {"repobilityId": "da08fc5a99493a79", "scanner": "scanner-primary", "fingerprint": "b1cbed6ceef2e2dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b2c431cb46ca9ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/network/page.tsx:1212"}, "properties": {"repobilityId": "e14700d10b7b9250", "scanner": "scanner-primary", "fingerprint": "0b2c431cb46ca9ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f14a42927035dfe4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/dashboard/page.tsx:139"}, "properties": {"repobilityId": "de14d6be6ed6ce3a", "scanner": "scanner-primary", "fingerprint": "f14a42927035dfe4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1d6d1165a4798e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/proposals/[id]/page.tsx:1361"}, "properties": {"repobilityId": "ac6653262ee3cc83", "scanner": "scanner-primary", "fingerprint": "d1d6d1165a4798e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04b45ca393a46dff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/accounting/page.tsx:647"}, "properties": {"repobilityId": "86c092f67c041423", "scanner": "scanner-primary", "fingerprint": "04b45ca393a46dff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-346eee3dd5ede1d1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx:1175"}, "properties": {"repobilityId": "ab46f732a3f59faa", "scanner": "scanner-primary", "fingerprint": "346eee3dd5ede1d1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2739c42012cf2769", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/my-tickets/page.tsx:236"}, "properties": {"repobilityId": "888aa29482c9e2e5", "scanner": "scanner-primary", "fingerprint": "2739c42012cf2769", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c5bac8816dd688b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/finance/gateway-activity/page.tsx:434"}, "properties": {"repobilityId": "4a72e12149a888cf", "scanner": "scanner-primary", "fingerprint": "7c5bac8816dd688b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42695b6aa6fbd449", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/locations/page.tsx:87"}, "properties": {"repobilityId": "2523625a61c659e5", "scanner": "scanner-primary", "fingerprint": "42695b6aa6fbd449", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-72baf9728dded616", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/payroll/leaves/page.tsx:207"}, "properties": {"repobilityId": "8c08d3e6774addc2", "scanner": "scanner-primary", "fingerprint": "72baf9728dded616", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4208028e86331cfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/billing/page.tsx:1185"}, "properties": {"repobilityId": "f8b913e6205baba3", "scanner": "scanner-primary", "fingerprint": "4208028e86331cfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edde51e19f106170", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/live-headcount/page.tsx:270"}, "properties": {"repobilityId": "24a419d4dcd6e468", "scanner": "scanner-primary", "fingerprint": "edde51e19f106170", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf576727dcc0c396", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/push/page.tsx:241"}, "properties": {"repobilityId": "52935a0c6c895fb0", "scanner": "scanner-primary", "fingerprint": "bf576727dcc0c396", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-12079a4f0d4c64b5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx:1236"}, "properties": {"repobilityId": "aa45c7410ad721ea", "scanner": "scanner-primary", "fingerprint": "12079a4f0d4c64b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8302aad61cde59da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/access-analytics/page.tsx:310"}, "properties": {"repobilityId": "ea989187b95d35fd", "scanner": "scanner-primary", "fingerprint": "8302aad61cde59da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d301cc9d400a5dfd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/page.tsx:152"}, "properties": {"repobilityId": "422e220a74a90f72", "scanner": "scanner-primary", "fingerprint": "d301cc9d400a5dfd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46766c15cbea4f82", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/issues/page.tsx:278"}, "properties": {"repobilityId": "5cb05b747f12bf7c", "scanner": "scanner-primary", "fingerprint": "46766c15cbea4f82", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6af8679f5ce1961c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/issues/[id]/page.tsx:547"}, "properties": {"repobilityId": "168efb2ba576a23c", "scanner": "scanner-primary", "fingerprint": "6af8679f5ce1961c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35fad4bdcb6967cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/assets/[id]/page.tsx:108"}, "properties": {"repobilityId": "9af1755a88dfec53", "scanner": "scanner-primary", "fingerprint": "35fad4bdcb6967cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f9ae8916acab1c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/facility/my-issues/page.tsx:170"}, "properties": {"repobilityId": "e4273c8c63868c79", "scanner": "scanner-primary", "fingerprint": "6f9ae8916acab1c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f683f725dd59596", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/rent-management/leases/[id]/page.tsx:738"}, "properties": {"repobilityId": "5fe9edaf8bda46ca", "scanner": "scanner-primary", "fingerprint": "0f683f725dd59596", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-91e904c0a30311e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/rent-management/landlords/[id]/page.tsx:353"}, "properties": {"repobilityId": "07c2eefa025b5772", "scanner": "scanner-primary", "fingerprint": "91e904c0a30311e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f991d718ecf4c13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/pipeline/page.tsx:69"}, "properties": {"repobilityId": "3cc8a4571ff36d61", "scanner": "scanner-primary", "fingerprint": "7f991d718ecf4c13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f3f22bdf10eb1f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/infrastructure/page.tsx:434"}, "properties": {"repobilityId": "e0b5142dda2f8c7e", "scanner": "scanner-primary", "fingerprint": "7f3f22bdf10eb1f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a41f475df0b7146", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/contracts/[id]/page.tsx:1224"}, "properties": {"repobilityId": "fcbc7346de7f87f1", "scanner": "scanner-primary", "fingerprint": "4a41f475df0b7146", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd30c651a022e5d5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/contracts/kyc-pending/page.tsx:258"}, "properties": {"repobilityId": "91026c92cf4d508f", "scanner": "scanner-primary", "fingerprint": "cd30c651a022e5d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-284d907b36a4c056", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/support/page.tsx:262"}, "properties": {"repobilityId": "a0098a761eb74330", "scanner": "scanner-primary", "fingerprint": "284d907b36a4c056", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e4489b399b17ec4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/documents/page.tsx:150"}, "properties": {"repobilityId": "a960ea1a3087bf7b", "scanner": "scanner-primary", "fingerprint": "9e4489b399b17ec4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea039a7e30cd9f85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/leegality.ts:198"}, "properties": {"repobilityId": "f9b1625b1fb00337", "scanner": "scanner-primary", "fingerprint": "ea039a7e30cd9f85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ae4ac5c7de64e41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/push.ts:25"}, "properties": {"repobilityId": "19b6e12b6bf7139c", "scanner": "scanner-primary", "fingerprint": "9ae4ac5c7de64e41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fb7c27ff61e1b0e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/mailer.ts:107"}, "properties": {"repobilityId": "a99aa9f315b43ff9", "scanner": "scanner-primary", "fingerprint": "1fb7c27ff61e1b0e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e0bcbfdc6e456dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp.ts:554"}, "properties": {"repobilityId": "92e19187122ff692", "scanner": "scanner-primary", "fingerprint": "3e0bcbfdc6e456dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7aaa79cef67514d4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/digio.ts:75"}, "properties": {"repobilityId": "01546d01835dc44d", "scanner": "scanner-primary", "fingerprint": "7aaa79cef67514d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-90b221580dc72df9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/facility-notifications.ts:186"}, "properties": {"repobilityId": "6c22857068685869", "scanner": "scanner-primary", "fingerprint": "90b221580dc72df9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83784070ac69d3e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/procurement/approval-code.ts:26"}, "properties": {"repobilityId": "28a00c5e13e24a34", "scanner": "scanner-primary", "fingerprint": "83784070ac69d3e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-080aba282cf92a0c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/e-invoice/public-keys.ts:35"}, "properties": {"repobilityId": "9b671d924bf162f3", "scanner": "scanner-primary", "fingerprint": "080aba282cf92a0c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2cd554a61f788935", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in next.config.ts:3"}, "properties": {"repobilityId": "a3a25c0d08e89bbc", "scanner": "scanner-primary", "fingerprint": "2cd554a61f788935", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "next.config.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-61aadf2342298f70", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in bridge/src/health-server.ts:96"}, "properties": {"repobilityId": "befcd9255f2a4b5d", "scanner": "scanner-primary", "fingerprint": "61aadf2342298f70", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bridge/src/health-server.ts"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-ec28176122fadad2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in bridge/src/tray.ts:23"}, "properties": {"repobilityId": "94e992a34be507f2", "scanner": "scanner-primary", "fingerprint": "ec28176122fadad2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bridge/src/tray.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-9c1d21d6945cf45a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/shared/flow-guide-hint.tsx:47"}, "properties": {"repobilityId": "4dfbcf22cb4b1276", "scanner": "scanner-primary", "fingerprint": "9c1d21d6945cf45a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/shared/flow-guide-hint.tsx"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-a66aab3958cb1a6f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/occupancy/route.ts:85"}, "properties": {"repobilityId": "bf335dd504441e79", "scanner": "scanner-primary", "fingerprint": "a66aab3958cb1a6f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/occupancy/route.ts"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-9e7e59a45b561656", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/app/(dashboard)/bookings/[id]/page.tsx:612"}, "properties": {"repobilityId": "75ce9284df75ecb9", "scanner": "scanner-primary", "fingerprint": "9e7e59a45b561656", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(dashboard)/bookings/[id]/page.tsx"}, "region": {"startLine": 612}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-8608776f7276c247", "level": "note", "message": {"text": "Very large file: bridge/src/tally-client.ts (1172 lines)"}, "properties": {"repobilityId": "1db424d11f060994", "scanner": "scanner-primary", "fingerprint": "8608776f7276c247", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-987c11e8f1787942", "level": "note", "message": {"text": "Very large file: src/types/index.ts (3448 lines)"}, "properties": {"repobilityId": "6bc7d72791bfb09e", "scanner": "scanner-primary", "fingerprint": "987c11e8f1787942", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0116bfc85a6afd6e", "level": "note", "message": {"text": "Very large file: src/components/billing/view-statement-dialog.tsx (1457 lines)"}, "properties": {"repobilityId": "27db929f4ed0766c", "scanner": "scanner-primary", "fingerprint": "0116bfc85a6afd6e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4edb0dc16499e252", "level": "note", "message": {"text": "Very large file: src/app/api/digest/route.ts (1222 lines)"}, "properties": {"repobilityId": "e785c6cc018b153d", "scanner": "scanner-primary", "fingerprint": "4edb0dc16499e252", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-abb6f33505e1b051", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/procurement/page.tsx (1075 lines)"}, "properties": {"repobilityId": "5330bbead01bbde4", "scanner": "scanner-primary", "fingerprint": "abb6f33505e1b051", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d920d75fc58c148e", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/procurement/orders/[id]/page.tsx (2436 lines)"}, "properties": {"repobilityId": "2744fb27110e6410", "scanner": "scanner-primary", "fingerprint": "d920d75fc58c148e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-04b2b5e4dea6d3cc", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/procurement/requests/[id]/page.tsx (1308 lines)"}, "properties": {"repobilityId": "1d814059712b3229", "scanner": "scanner-primary", "fingerprint": "04b2b5e4dea6d3cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b14b2d972eb5cba9", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/procurement/vendors/[id]/page.tsx (1415 lines)"}, "properties": {"repobilityId": "098455fa96f3f2d3", "scanner": "scanner-primary", "fingerprint": "b14b2d972eb5cba9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aed317fa5e54fe13", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/procurement/bills/[id]/page.tsx (1803 lines)"}, "properties": {"repobilityId": "6cfb11be28478f70", "scanner": "scanner-primary", "fingerprint": "aed317fa5e54fe13", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-50de78d07278531b", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/bookings/[id]/page.tsx (2649 lines)"}, "properties": {"repobilityId": "a675430502fe3c61", "scanner": "scanner-primary", "fingerprint": "50de78d07278531b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-623ccefc091359eb", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/network/page.tsx (1573 lines)"}, "properties": {"repobilityId": "9edb348fbd98174d", "scanner": "scanner-primary", "fingerprint": "623ccefc091359eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-329b3ee5a48c076f", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/proposals/[id]/page.tsx (1576 lines)"}, "properties": {"repobilityId": "93492733ecccf6f2", "scanner": "scanner-primary", "fingerprint": "329b3ee5a48c076f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5691a965ee31fd88", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/accounting/page.tsx (1757 lines)"}, "properties": {"repobilityId": "5ebcc851128b3eb0", "scanner": "scanner-primary", "fingerprint": "5691a965ee31fd88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d99261f6047ddcb", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx (2245 lines)"}, "properties": {"repobilityId": "8d303cc895590984", "scanner": "scanner-primary", "fingerprint": "5d99261f6047ddcb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e4ad186a871f63c2", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/accounting/tds/page.tsx (1152 lines)"}, "properties": {"repobilityId": "9b3ca58a15666786", "scanner": "scanner-primary", "fingerprint": "e4ad186a871f63c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a0e26d9663714f8b", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/billing/page.tsx (1483 lines)"}, "properties": {"repobilityId": "285bca5b1668a399", "scanner": "scanner-primary", "fingerprint": "a0e26d9663714f8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c964a0b5a2db684", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx (1374 lines)"}, "properties": {"repobilityId": "70e2e098a6d67cf2", "scanner": "scanner-primary", "fingerprint": "5c964a0b5a2db684", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-24f7cbfc18b2fe71", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/contracts/[id]/page.tsx (1733 lines)"}, "properties": {"repobilityId": "61432e911dc55379", "scanner": "scanner-primary", "fingerprint": "24f7cbfc18b2fe71", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4b465df79327a426", "level": "note", "message": {"text": "Very large file: src/lib/help-content.ts (1577 lines)"}, "properties": {"repobilityId": "1149f8c67140573c", "scanner": "scanner-primary", "fingerprint": "4b465df79327a426", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-49c690998081b7e1", "level": "note", "message": {"text": "Very large file: src/lib/pdf-generator.ts (1639 lines)"}, "properties": {"repobilityId": "6035e4cedc1c8318", "scanner": "scanner-primary", "fingerprint": "49c690998081b7e1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4336e002d10316c2", "level": "note", "message": {"text": "Very large file: src/lib/billing.ts (1388 lines)"}, "properties": {"repobilityId": "cf18a937935287d9", "scanner": "scanner-primary", "fingerprint": "4336e002d10316c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3e1d5eb4694b475c", "level": "note", "message": {"text": "Very large file: src/lib/constants.ts (2088 lines)"}, "properties": {"repobilityId": "ea5b869d02439c33", "scanner": "scanner-primary", "fingerprint": "3e1d5eb4694b475c", "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": "ccc4e56b0f73e5e0", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-89ff96c5ca9612b8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: bridge/package.json"}, "properties": {"repobilityId": "712ef64fe3986279", "scanner": "scanner-primary", "fingerprint": "89ff96c5ca9612b8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bridge/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "29b97b672bc94a8c", "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": "f2a546c128f7aff7", "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": "f7b59d941fc433c8", "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": "ac84332d2b8c0c4d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "544f616be0b90fa1", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5d95c1bfe39037bb", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "bcb2e61868922317", "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": "74d984718bb59733", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-b1389db4765b83af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/restore/storage-restore.mjs:103"}, "properties": {"repobilityId": "c83bd68ee298167f", "scanner": "scanner-primary", "fingerprint": "b1389db4765b83af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6121b92d7ef2c67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:58"}, "properties": {"repobilityId": "4191968d99c7165e", "scanner": "scanner-primary", "fingerprint": "c6121b92d7ef2c67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4cae8ae69d3c8635", "level": "none", "message": {"text": "Commented-code block (5 lines) in bridge/src/poller.ts:222"}, "properties": {"repobilityId": "6c2a901a6e3dce9e", "scanner": "scanner-primary", "fingerprint": "4cae8ae69d3c8635", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10dc952d3f0b1e7b", "level": "none", "message": {"text": "Commented-code block (5 lines) in bridge/src/tally-client.ts:460"}, "properties": {"repobilityId": "2dfaa159e220f1f0", "scanner": "scanner-primary", "fingerprint": "10dc952d3f0b1e7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de9172e4a63c62f7", "level": "note", "message": {"text": "Legacy-named symbol `handoff_v2` in bridge/src/crm-client.ts:144"}, "properties": {"repobilityId": "f456769bf2be98b0", "scanner": "scanner-primary", "fingerprint": "de9172e4a63c62f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a201ba3e151e72f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/gst-invoice-mode-settings.tsx:91"}, "properties": {"repobilityId": "cf55b686247fd34b", "scanner": "scanner-primary", "fingerprint": "a201ba3e151e72f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ec516ae9d22e561", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/procurement-budget-settings.tsx:318"}, "properties": {"repobilityId": "029235b81541aba1", "scanner": "scanner-primary", "fingerprint": "7ec516ae9d22e561", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-068a21ff307027de", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/payment-gateway-settings.tsx:126"}, "properties": {"repobilityId": "fee871b5d71fdf6b", "scanner": "scanner-primary", "fingerprint": "068a21ff307027de", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-11fd05855a3bcf06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/settings/services-settings.tsx:28"}, "properties": {"repobilityId": "9433fd53592fb765", "scanner": "scanner-primary", "fingerprint": "11fd05855a3bcf06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e1011b631c92999c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-leave-agreement-tab.tsx:194"}, "properties": {"repobilityId": "a93b53f149b4e17c", "scanner": "scanner-primary", "fingerprint": "e1011b631c92999c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-374d4b0baa6a3ce2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-agreement-tab.tsx:172"}, "properties": {"repobilityId": "a1c3568c4ae8808d", "scanner": "scanner-primary", "fingerprint": "374d4b0baa6a3ce2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15c2510a14ed8af2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/cases/case-documents-tab.tsx:74"}, "properties": {"repobilityId": "e928d27ad58dc7b6", "scanner": "scanner-primary", "fingerprint": "15c2510a14ed8af2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a3066aa9129add4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/procurement/amc-event-dialog.tsx:88"}, "properties": {"repobilityId": "996d238e5d2c8725", "scanner": "scanner-primary", "fingerprint": "9a3066aa9129add4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e3cd9a03ed8d78e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/procurement/consumption-correction-dialog.tsx:112"}, "properties": {"repobilityId": "b55e4b866292d783", "scanner": "scanner-primary", "fingerprint": "e3cd9a03ed8d78e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15612105f04a0f9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/seat-occupant-form-dialog.tsx:149"}, "properties": {"repobilityId": "ba4fa22736337224", "scanner": "scanner-primary", "fingerprint": "15612105f04a0f9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c4214bf72e1438f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-form-dialog.tsx:76"}, "properties": {"repobilityId": "aff9c2094ea6404f", "scanner": "scanner-primary", "fingerprint": "4c4214bf72e1438f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1cc8e1d3a9ca27ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/seat-occupants-panel.tsx:44"}, "properties": {"repobilityId": "e89affe4d0ebbb31", "scanner": "scanner-primary", "fingerprint": "1cc8e1d3a9ca27ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e6be5290389262be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-allocation-selector.tsx:40"}, "properties": {"repobilityId": "9f6b582876b1dfa6", "scanner": "scanner-primary", "fingerprint": "e6be5290389262be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bbc9752d838e00fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/floor-form-dialog.tsx:71"}, "properties": {"repobilityId": "10d5ef3acc37156b", "scanner": "scanner-primary", "fingerprint": "bbc9752d838e00fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-acc4693de8ee78f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/spaces/space-charges-tab.tsx:79"}, "properties": {"repobilityId": "87b6e68104eb6f72", "scanner": "scanner-primary", "fingerprint": "acc4693de8ee78f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3ef1a83ed87cb1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/bookings/next-action-banner.tsx:200"}, "properties": {"repobilityId": "b887ab73d3c7ab6a", "scanner": "scanner-primary", "fingerprint": "d3ef1a83ed87cb1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-031526ac07c98170", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/bookings/collect-payment-dialog.tsx:147"}, "properties": {"repobilityId": "7be37c938765ff02", "scanner": "scanner-primary", "fingerprint": "031526ac07c98170", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e49d9a5f7385365c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/collect-payment-dialog.tsx:162"}, "properties": {"repobilityId": "be81aea4c752fd52", "scanner": "scanner-primary", "fingerprint": "e49d9a5f7385365c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f9cec5aeb70580f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/bookings/booking-payment-summary.tsx:64"}, "properties": {"repobilityId": "c2a0725b13933407", "scanner": "scanner-primary", "fingerprint": "6f9cec5aeb70580f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9204b41a26a48e92", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/no-show-refund-dialog.tsx:127"}, "properties": {"repobilityId": "86b5e2c3e396bca7", "scanner": "scanner-primary", "fingerprint": "9204b41a26a48e92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-810973b4c3668643", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/bookings/booking-lifecycle-timeline.tsx:251"}, "properties": {"repobilityId": "1a5b7a9a41eef294", "scanner": "scanner-primary", "fingerprint": "810973b4c3668643", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c7bb90fa6e2ecd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/bookings/booking-addons-section.tsx:200"}, "properties": {"repobilityId": "80f5ce2637ba9402", "scanner": "scanner-primary", "fingerprint": "5c7bb90fa6e2ecd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bc248c8ef80d751", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/booking-addons-section.tsx:78"}, "properties": {"repobilityId": "187e92500e0a286c", "scanner": "scanner-primary", "fingerprint": "8bc248c8ef80d751", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-621b9733bb90f411", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/bookings/cancel-booking-dialog.tsx:165"}, "properties": {"repobilityId": "7940f7c7c3f6ef41", "scanner": "scanner-primary", "fingerprint": "621b9733bb90f411", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a6fc0a216e42164c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-documents-tab.tsx:47"}, "properties": {"repobilityId": "31f31f20958d059a", "scanner": "scanner-primary", "fingerprint": "a6fc0a216e42164c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8e9a4f7e4e305d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-feedbacks-tab.tsx:56"}, "properties": {"repobilityId": "22cf0962bc6140b8", "scanner": "scanner-primary", "fingerprint": "d8e9a4f7e4e305d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-923a76d375e2ca0d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-contacts-panel.tsx:158"}, "properties": {"repobilityId": "69f6c9e6ee71bddd", "scanner": "scanner-primary", "fingerprint": "923a76d375e2ca0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83edf337e7a090c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-contracts-tab.tsx:60"}, "properties": {"repobilityId": "6212de66bb8aab9d", "scanner": "scanner-primary", "fingerprint": "83edf337e7a090c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1334f54a6550c639", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-tasks-tab.tsx:32"}, "properties": {"repobilityId": "72c6a6f7815b7e63", "scanner": "scanner-primary", "fingerprint": "1334f54a6550c639", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-111c666022abc3a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/leads/lead-proposals-tab.tsx:68"}, "properties": {"repobilityId": "54cf420ade493796", "scanner": "scanner-primary", "fingerprint": "111c666022abc3a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-303f2753edea5fd0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/network/network-widget.tsx:32"}, "properties": {"repobilityId": "976014f94e337341", "scanner": "scanner-primary", "fingerprint": "303f2753edea5fd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f3ac9a207bfc4ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/shared/email-document-dialog.tsx:123"}, "properties": {"repobilityId": "07ee6c90889a7606", "scanner": "scanner-primary", "fingerprint": "0f3ac9a207bfc4ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1022fcb6999384f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/approval-bell.tsx:152"}, "properties": {"repobilityId": "ede2b8596779f0f2", "scanner": "scanner-primary", "fingerprint": "1022fcb6999384f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a4f46a1c80bb12f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard/in-app-notification-bell.tsx:162"}, "properties": {"repobilityId": "cc0e2ec271075878", "scanner": "scanner-primary", "fingerprint": "7a4f46a1c80bb12f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff89f9ac567dbdb8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/proposals/proposal-form.tsx:67"}, "properties": {"repobilityId": "7c3ad0d9efcb0f01", "scanner": "scanner-primary", "fingerprint": "ff89f9ac567dbdb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c2cbde92eec7976", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/proposals/booking-confirmation-dialog.tsx:67"}, "properties": {"repobilityId": "953a7a744ce3285c", "scanner": "scanner-primary", "fingerprint": "3c2cbde92eec7976", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-137417616fe67eea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/manual-print-entry-dialog.tsx:134"}, "properties": {"repobilityId": "3343e045449b9f6c", "scanner": "scanner-primary", "fingerprint": "137417616fe67eea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-016de0d88ca0ab4a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/statement-lifecycle.tsx:47"}, "properties": {"repobilityId": "898056fe93c43c27", "scanner": "scanner-primary", "fingerprint": "016de0d88ca0ab4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1ef48786449065b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/petty-cash-issuance.tsx:37"}, "properties": {"repobilityId": "daeba8a2f10c9084", "scanner": "scanner-primary", "fingerprint": "f1ef48786449065b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-048515552eecb16b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/facility-usage-form.tsx:78"}, "properties": {"repobilityId": "2c7b4f80000e1cb5", "scanner": "scanner-primary", "fingerprint": "048515552eecb16b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc4e12987207e0a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/print-report-upload-dialog.tsx:248"}, "properties": {"repobilityId": "5a68ea801af99c6b", "scanner": "scanner-primary", "fingerprint": "cc4e12987207e0a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de0a7dd2175eed67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/gst-invoice-entry.tsx:54"}, "properties": {"repobilityId": "0e161d0f9d4603f4", "scanner": "scanner-primary", "fingerprint": "de0a7dd2175eed67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d81c9e4d82604419", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/accounting/add-contract-payment-dialog.tsx:92"}, "properties": {"repobilityId": "ba2945e41b64f51b", "scanner": "scanner-primary", "fingerprint": "d81c9e4d82604419", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1db2d6d421fe993d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/team/user-activity-log.tsx:123"}, "properties": {"repobilityId": "c96f46a8f1e35d6b", "scanner": "scanner-primary", "fingerprint": "1db2d6d421fe993d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8ee786cbc1d5b69b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/locations/electricity-config-tab.tsx:59"}, "properties": {"repobilityId": "7953287f6f747ad4", "scanner": "scanner-primary", "fingerprint": "8ee786cbc1d5b69b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54488804a6ca2783", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/locations/location-form-dialog.tsx:198"}, "properties": {"repobilityId": "05b9d1be4886a733", "scanner": "scanner-primary", "fingerprint": "54488804a6ca2783", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3d3ca42e42f465e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/vouchers/upload-vouchers-dialog.tsx:107"}, "properties": {"repobilityId": "3378bf4a45950ef5", "scanner": "scanner-primary", "fingerprint": "a3d3ca42e42f465e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8da4f9f3af691623", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/vouchers/unifi-panel.tsx:156"}, "properties": {"repobilityId": "5e8ffbd441e373da", "scanner": "scanner-primary", "fingerprint": "8da4f9f3af691623", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5091d6cc135ad110", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tasks/create-task-dialog.tsx:77"}, "properties": {"repobilityId": "2ac1e7df4c64d96f", "scanner": "scanner-primary", "fingerprint": "5091d6cc135ad110", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a4591aa0d2b445c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/electricity-bills-tab.tsx:257"}, "properties": {"repobilityId": "4f03ae571fc44353", "scanner": "scanner-primary", "fingerprint": "7a4591aa0d2b445c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d8e4f48a1f01e62", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/refunds-tab.tsx:65"}, "properties": {"repobilityId": "181299b26241d898", "scanner": "scanner-primary", "fingerprint": "9d8e4f48a1f01e62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8fa22b10e329474", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/billing/add-usage-charge-dialog.tsx:308"}, "properties": {"repobilityId": "8fdb2818ad62f35d", "scanner": "scanner-primary", "fingerprint": "f8fa22b10e329474", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61c411f442ca154e", "level": "note", "message": {"text": "Legacy-named symbol `tally_handoff_v2` in src/components/billing/view-statement-dialog.tsx:590"}, "properties": {"repobilityId": "81cf434a8418f77c", "scanner": "scanner-primary", "fingerprint": "61c411f442ca154e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0704f6a981eca282", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/view-statement-dialog.tsx:329"}, "properties": {"repobilityId": "9064b9cd4e011421", "scanner": "scanner-primary", "fingerprint": "0704f6a981eca282", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9715696f352c2121", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/electricity-bill-review-dialog.tsx:91"}, "properties": {"repobilityId": "8bfd28964f522c2d", "scanner": "scanner-primary", "fingerprint": "9715696f352c2121", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95bdab42adfad4ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/generate-statement-dialog.tsx:188"}, "properties": {"repobilityId": "476aa5b49a7cc26d", "scanner": "scanner-primary", "fingerprint": "95bdab42adfad4ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-10d3b5e7673a875b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/usage-review-dialog.tsx:200"}, "properties": {"repobilityId": "f697a2c141f6ee3e", "scanner": "scanner-primary", "fingerprint": "10d3b5e7673a875b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-844f1ba8af5d1939", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/billing/monthly-billing-tabs.tsx:129"}, "properties": {"repobilityId": "519b3279041e8c72", "scanner": "scanner-primary", "fingerprint": "844f1ba8af5d1939", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9f9f46677df87dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/publish-bridge-card.tsx:38"}, "properties": {"repobilityId": "41e18816df0a24ee", "scanner": "scanner-primary", "fingerprint": "f9f9f46677df87dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f22be0a8298d7051", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/packages/sell-package-dialog.tsx:158"}, "properties": {"repobilityId": "d01cd8dd2370201d", "scanner": "scanner-primary", "fingerprint": "f22be0a8298d7051", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01032143e56b645d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/facility/report-wizard.tsx:108"}, "properties": {"repobilityId": "02feaffa334b797e", "scanner": "scanner-primary", "fingerprint": "01032143e56b645d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e20212d18a8f266", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/facility/asset-form-dialog.tsx:50"}, "properties": {"repobilityId": "0703af493160c7c0", "scanner": "scanner-primary", "fingerprint": "5e20212d18a8f266", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6798dd32d14ed2f1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/activities/lead-timeline.tsx:440"}, "properties": {"repobilityId": "9f57680a3fde26a4", "scanner": "scanner-primary", "fingerprint": "6798dd32d14ed2f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54fd809636e49821", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/activities/activity-form.tsx:101"}, "properties": {"repobilityId": "c7cb5bf0fd7870b9", "scanner": "scanner-primary", "fingerprint": "54fd809636e49821", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f73f3998b0ece37c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/rent-management/AssetManager.tsx:196"}, "properties": {"repobilityId": "20d761594b63ac8d", "scanner": "scanner-primary", "fingerprint": "f73f3998b0ece37c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-296d0532d7dd9bbc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-facilities-section.tsx:71"}, "properties": {"repobilityId": "d27e1fa7c53fa8d0", "scanner": "scanner-primary", "fingerprint": "296d0532d7dd9bbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d22b024e91f1f50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/create-contract-dialog.tsx:105"}, "properties": {"repobilityId": "b7e13a3bf56113b2", "scanner": "scanner-primary", "fingerprint": "2d22b024e91f1f50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9526c7b3a14fb80e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/cosec-access-wizard.tsx:562"}, "properties": {"repobilityId": "a0fa0966e6e92857", "scanner": "scanner-primary", "fingerprint": "9526c7b3a14fb80e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e23d1f526f133b95", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-vouchers-section.tsx:119"}, "properties": {"repobilityId": "154bfc7fc0d71ee4", "scanner": "scanner-primary", "fingerprint": "e23d1f526f133b95", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8b48b5eb4a9bc25", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-contacts-panel.tsx:136"}, "properties": {"repobilityId": "e43e26ee2fc0f675", "scanner": "scanner-primary", "fingerprint": "b8b48b5eb4a9bc25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2525e08011c70fcd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-members-access-section.tsx:548"}, "properties": {"repobilityId": "cb6c41f3e5475630", "scanner": "scanner-primary", "fingerprint": "2525e08011c70fcd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f3378fda748b08e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-electricity-tab.tsx:74"}, "properties": {"repobilityId": "62aacf87ae6224ca", "scanner": "scanner-primary", "fingerprint": "2f3378fda748b08e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-698fa347aa5e91c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-addons-section.tsx:45"}, "properties": {"repobilityId": "a861dfbd409e6367", "scanner": "scanner-primary", "fingerprint": "698fa347aa5e91c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-46af9eb4de1a6591", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-quotas-section.tsx:60"}, "properties": {"repobilityId": "3adf7f3a3fa9b1a3", "scanner": "scanner-primary", "fingerprint": "46af9eb4de1a6591", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-364de0f45f8ed98b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/contracts/contract-documents-tab.tsx:107"}, "properties": {"repobilityId": "674308abb7a46662", "scanner": "scanner-primary", "fingerprint": "364de0f45f8ed98b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a414c799f21fb436", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/my-ticket-detail-dialog.tsx:189"}, "properties": {"repobilityId": "8e47cdc64792de1c", "scanner": "scanner-primary", "fingerprint": "a414c799f21fb436", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c36727a3a3dcf38", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/support/report-issue-dialog.tsx:142"}, "properties": {"repobilityId": "aa3b5bb2bf9d7806", "scanner": "scanner-primary", "fingerprint": "4c36727a3a3dcf38", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e1943187a54ce92", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/petty-cash/approvals-tab.tsx:65"}, "properties": {"repobilityId": "3d53c6fff93643b3", "scanner": "scanner-primary", "fingerprint": "3e1943187a54ce92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-466ab395b293e6c4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/petty-cash/entries-tab.tsx:59"}, "properties": {"repobilityId": "d09bf82b67a5eecb", "scanner": "scanner-primary", "fingerprint": "466ab395b293e6c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be644b2864403da2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/providers/current-user-provider.tsx:8"}, "properties": {"repobilityId": "7ac6c31e46375964", "scanner": "scanner-primary", "fingerprint": "be644b2864403da2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a76b579958ce138", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/tally/pending/route.ts:265"}, "properties": {"repobilityId": "95b55b88cecfc606", "scanner": "scanner-primary", "fingerprint": "3a76b579958ce138", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edac4479a16c8ab3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/tally/jobs/route.ts:93"}, "properties": {"repobilityId": "262aa696f3957af7", "scanner": "scanner-primary", "fingerprint": "edac4479a16c8ab3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f14a77cc3f966a32", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/procurement/bills/[id]/route.ts:171"}, "properties": {"repobilityId": "a00fa3b38ff597a8", "scanner": "scanner-primary", "fingerprint": "f14a77cc3f966a32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-247829bd78b44dcf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/procurement/vendor-prices/route.ts:61"}, "properties": {"repobilityId": "77fe0cc4f3397278", "scanner": "scanner-primary", "fingerprint": "247829bd78b44dcf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-655faef6cba818f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/bookings/route.ts:118"}, "properties": {"repobilityId": "2bf1ba7e765108ad", "scanner": "scanner-primary", "fingerprint": "655faef6cba818f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cd3b18014a349ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/bookings/[id]/route.ts:450"}, "properties": {"repobilityId": "a9104b59c75ba08d", "scanner": "scanner-primary", "fingerprint": "2cd3b18014a349ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b43335980e40ada", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/bookings/[id]/email/route.ts:277"}, "properties": {"repobilityId": "6fbe342fd9e0d7db", "scanner": "scanner-primary", "fingerprint": "5b43335980e40ada", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-443fd406cbd2927f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/bookings/[id]/comp-request/route.ts:305"}, "properties": {"repobilityId": "a563fad43e4ea53c", "scanner": "scanner-primary", "fingerprint": "443fd406cbd2927f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50294dba3dbf0983", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/bookings/[id]/defer/route.ts:182"}, "properties": {"repobilityId": "83ce5481dbae1b5c", "scanner": "scanner-primary", "fingerprint": "50294dba3dbf0983", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f0c7495ed3c3ecc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/dashboard/route.ts:28"}, "properties": {"repobilityId": "3540f61163ac7738", "scanner": "scanner-primary", "fingerprint": "6f0c7495ed3c3ecc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7adea43ce56dc90", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/route.ts:118"}, "properties": {"repobilityId": "7e94b79117c1cb48", "scanner": "scanner-primary", "fingerprint": "b7adea43ce56dc90", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f230a93a768dbd35", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/proposals/[id]/accept/route.ts:144"}, "properties": {"repobilityId": "c0f418915f183f3d", "scanner": "scanner-primary", "fingerprint": "f230a93a768dbd35", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b114dc59e0b2b6bd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/proposals/[id]/send-invoice/route.ts:95"}, "properties": {"repobilityId": "81dcce71fa669b36", "scanner": "scanner-primary", "fingerprint": "b114dc59e0b2b6bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20370501eb57c7fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/proposals/[id]/send-invoice/route.ts:137"}, "properties": {"repobilityId": "44d97295fd0de6a7", "scanner": "scanner-primary", "fingerprint": "20370501eb57c7fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-23bb7afd700d6ac0", "level": "note", "message": {"text": "Legacy-named symbol `bulk_copy` in src/app/api/accounting/contract-facilities/copy/route.ts:77"}, "properties": {"repobilityId": "723c1d65d585c49f", "scanner": "scanner-primary", "fingerprint": "23bb7afd700d6ac0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fd51ae3189c002ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/accounting/monthly-summary/route.ts:60"}, "properties": {"repobilityId": "87f30b405362b51f", "scanner": "scanner-primary", "fingerprint": "fd51ae3189c002ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb8d556abf8973a8", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/accounting/inbox/route.ts:53"}, "properties": {"repobilityId": "4a68768d722f0741", "scanner": "scanner-primary", "fingerprint": "eb8d556abf8973a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ff69592b0f17d30", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/addon-catalog/route.ts:36"}, "properties": {"repobilityId": "fdcd90a591f7e320", "scanner": "scanner-primary", "fingerprint": "5ff69592b0f17d30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4af00185c785ae9d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/digest/route.ts:455"}, "properties": {"repobilityId": "2560ba0b60bf2c63", "scanner": "scanner-primary", "fingerprint": "4af00185c785ae9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bdd4f955c99425a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/facility/dashboard/route.ts:113"}, "properties": {"repobilityId": "c88873cb335ddbcf", "scanner": "scanner-primary", "fingerprint": "2bdd4f955c99425a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04af9c71db663dc0", "level": "note", "message": {"text": "Legacy-named symbol `is_legacy` in src/app/api/cosec/enrollments/route.ts:9"}, "properties": {"repobilityId": "6425bd868af92c7b", "scanner": "scanner-primary", "fingerprint": "04af9c71db663dc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-068451cb6739c266", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/payments/create-payment-link/route.ts:80"}, "properties": {"repobilityId": "559ee287c707ecff", "scanner": "scanner-primary", "fingerprint": "068451cb6739c266", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f67ecfa49637b370", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/billing-reminder/route.ts:37"}, "properties": {"repobilityId": "afaad057611e1aa0", "scanner": "scanner-primary", "fingerprint": "f67ecfa49637b370", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c15d633fe37e27a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/payment-reminder/route.ts:92"}, "properties": {"repobilityId": "9c3b4abfa5f92509", "scanner": "scanner-primary", "fingerprint": "9c15d633fe37e27a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9dac5dd39ff16dc5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/storage-backup/route.ts:32"}, "properties": {"repobilityId": "fbb69956f72783a0", "scanner": "scanner-primary", "fingerprint": "9dac5dd39ff16dc5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a040ddeca3b1b47", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/route.ts:35"}, "properties": {"repobilityId": "a45355b0a4979844", "scanner": "scanner-primary", "fingerprint": "6a040ddeca3b1b47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61b1a7b6b4d577c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/generate-gst-invoice/route.ts:95"}, "properties": {"repobilityId": "b08f474d3b6c9366", "scanner": "scanner-primary", "fingerprint": "61b1a7b6b4d577c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5eeedc038524167a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing-statements/[id]/confirm/route.ts:150"}, "properties": {"repobilityId": "f41c4b456ba67a39", "scanner": "scanner-primary", "fingerprint": "5eeedc038524167a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-950f96ead6ad1a6c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/billing-statements/[id]/convert-to-gst-early/route.ts:140"}, "properties": {"repobilityId": "f24bb84d956d4bfb", "scanner": "scanner-primary", "fingerprint": "950f96ead6ad1a6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34fef45d37c16613", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing-statements/[id]/convert-to-gst-early/route.ts:301"}, "properties": {"repobilityId": "0508651f2400a848", "scanner": "scanner-primary", "fingerprint": "34fef45d37c16613", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-818ca2e4e6d0c78b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/void/route.ts:64"}, "properties": {"repobilityId": "d6d3661e2d82ae74", "scanner": "scanner-primary", "fingerprint": "818ca2e4e6d0c78b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd00736fee08bfba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/billing-statements/[id]/payment/route.ts:93"}, "properties": {"repobilityId": "31de5fd12a2f48b1", "scanner": "scanner-primary", "fingerprint": "cd00736fee08bfba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21f696427a0775a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/booking-credits/route.ts:54"}, "properties": {"repobilityId": "e81b6fbd6d0463bd", "scanner": "scanner-primary", "fingerprint": "21f696427a0775a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef957fe4fdfc44e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/contracts/route.ts:25"}, "properties": {"repobilityId": "147d16d02e3e2963", "scanner": "scanner-primary", "fingerprint": "ef957fe4fdfc44e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7dda974a6ef5c0b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/contracts/[id]/route.ts:85"}, "properties": {"repobilityId": "08426a0574170f20", "scanner": "scanner-primary", "fingerprint": "e7dda974a6ef5c0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e49aac8076b0df31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/contracts/[id]/route.ts:406"}, "properties": {"repobilityId": "491c2b59540196ec", "scanner": "scanner-primary", "fingerprint": "e49aac8076b0df31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ec852f4fbacd7f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/contracts/[id]/facilities/route.ts:276"}, "properties": {"repobilityId": "cb19e81739df2732", "scanner": "scanner-primary", "fingerprint": "7ec852f4fbacd7f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e085ab37c7e1c5f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/contracts/[id]/renew/route.ts:198"}, "properties": {"repobilityId": "d1401ad8bd88ca14", "scanner": "scanner-primary", "fingerprint": "e085ab37c7e1c5f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4bfd4fc8f8b0bc3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/contracts/[id]/vouchers/[issuanceId]/replace/route.ts:35"}, "properties": {"repobilityId": "b5c2247a8c855072", "scanner": "scanner-primary", "fingerprint": "d4bfd4fc8f8b0bc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9b905646f4a019a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/public/pay/route.ts:60"}, "properties": {"repobilityId": "387229bcab00fac2", "scanner": "scanner-primary", "fingerprint": "c9b905646f4a019a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fd824b41999d7bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/prepaid-purchases/route.ts:179"}, "properties": {"repobilityId": "941f891b1a10320c", "scanner": "scanner-primary", "fingerprint": "1fd824b41999d7bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4315a16c40d81b67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/prepaid-purchases/[id]/payment-link/route.ts:76"}, "properties": {"repobilityId": "04b50532600e12d3", "scanner": "scanner-primary", "fingerprint": "4315a16c40d81b67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e079f8e135715c97", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/usage-charges/route.ts:153"}, "properties": {"repobilityId": "7fb44c1e840deb90", "scanner": "scanner-primary", "fingerprint": "e079f8e135715c97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dc336209cdc9c94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/invoices/route.ts:156"}, "properties": {"repobilityId": "4dd9de0fd4b08fcb", "scanner": "scanner-primary", "fingerprint": "7dc336209cdc9c94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-741b5fe39742f545", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/invoices/[id]/email/route.ts:103"}, "properties": {"repobilityId": "c2c23251decbec01", "scanner": "scanner-primary", "fingerprint": "741b5fe39742f545", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d3ac8083183264c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/new/page.tsx:34"}, "properties": {"repobilityId": "cb0cb3f900008c4b", "scanner": "scanner-primary", "fingerprint": "7d3ac8083183264c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-764f16398f786d91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/[id]/page.tsx:63"}, "properties": {"repobilityId": "f39b68b49919620b", "scanner": "scanner-primary", "fingerprint": "764f16398f786d91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a75573a87c40350", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/page.tsx:319"}, "properties": {"repobilityId": "4a18ea14924da220", "scanner": "scanner-primary", "fingerprint": "1a75573a87c40350", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92dbdc922a215de6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/electricity/page.tsx:99"}, "properties": {"repobilityId": "c67ad25f435588f0", "scanner": "scanner-primary", "fingerprint": "92dbdc922a215de6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f45f06a23d9e5a6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/inventory/page.tsx:32"}, "properties": {"repobilityId": "3f462c622617e42b", "scanner": "scanner-primary", "fingerprint": "3f45f06a23d9e5a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78d8b95bdd77e726", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/payables/page.tsx:103"}, "properties": {"repobilityId": "16c38973e388e88f", "scanner": "scanner-primary", "fingerprint": "78d8b95bdd77e726", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ed28451b502da22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/page.tsx:81"}, "properties": {"repobilityId": "772be9e090d8a19c", "scanner": "scanner-primary", "fingerprint": "0ed28451b502da22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68c59dfecb40f844", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/new-service/page.tsx:79"}, "properties": {"repobilityId": "445aa73331c1d80d", "scanner": "scanner-primary", "fingerprint": "68c59dfecb40f844", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6bc5cc65cb87930", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/new/page.tsx:144"}, "properties": {"repobilityId": "6b059bcc91f079f8", "scanner": "scanner-primary", "fingerprint": "d6bc5cc65cb87930", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d5d26145606a3849", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/orders/[id]/page.tsx:353"}, "properties": {"repobilityId": "8d27912b08fa6e37", "scanner": "scanner-primary", "fingerprint": "d5d26145606a3849", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a7394bf107d44c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/page.tsx:66"}, "properties": {"repobilityId": "c4696f134b3c6e3e", "scanner": "scanner-primary", "fingerprint": "3a7394bf107d44c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-16b6c1071ff99f4d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/new/page.tsx:112"}, "properties": {"repobilityId": "4dd08647e5a1365d", "scanner": "scanner-primary", "fingerprint": "16b6c1071ff99f4d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d63d058e8466347", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/requests/[id]/page.tsx:225"}, "properties": {"repobilityId": "ac3c9aa26ee11926", "scanner": "scanner-primary", "fingerprint": "9d63d058e8466347", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f15e60affdd8665", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/catalog/page.tsx:112"}, "properties": {"repobilityId": "05d73bf440db6630", "scanner": "scanner-primary", "fingerprint": "0f15e60affdd8665", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a6c681b0454b970f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/catalog/[id]/page.tsx:97"}, "properties": {"repobilityId": "a7755446c4a2fb4a", "scanner": "scanner-primary", "fingerprint": "a6c681b0454b970f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a231021d81755832", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/vendors/page.tsx:97"}, "properties": {"repobilityId": "2d9bee442a16de3a", "scanner": "scanner-primary", "fingerprint": "a231021d81755832", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69acaac1afe73c94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/vendors/[id]/page.tsx:77"}, "properties": {"repobilityId": "baadd29775931413", "scanner": "scanner-primary", "fingerprint": "69acaac1afe73c94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2ba6cad35460ec3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/page.tsx:60"}, "properties": {"repobilityId": "095171705a5a66a2", "scanner": "scanner-primary", "fingerprint": "d2ba6cad35460ec3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b595ba795e0164a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/new/page.tsx:98"}, "properties": {"repobilityId": "b525dc7089efbef9", "scanner": "scanner-primary", "fingerprint": "b595ba795e0164a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b91ee34dfb468795", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/bills/[id]/page.tsx:242"}, "properties": {"repobilityId": "9ea35b3b22a6f791", "scanner": "scanner-primary", "fingerprint": "b91ee34dfb468795", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d59a3ddb790dd01d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/consumption/history/page.tsx:67"}, "properties": {"repobilityId": "ceeeccc6b2794163", "scanner": "scanner-primary", "fingerprint": "d59a3ddb790dd01d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f5937304ceace91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/page.tsx:38"}, "properties": {"repobilityId": "dcc30cb0f1888f04", "scanner": "scanner-primary", "fingerprint": "7f5937304ceace91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-051fd9384ff821f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/new/page.tsx:80"}, "properties": {"repobilityId": "57c72aff910dc0dd", "scanner": "scanner-primary", "fingerprint": "051fd9384ff821f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f39af820274cecf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/procurement/transfers/[id]/page.tsx:77"}, "properties": {"repobilityId": "8bd5bef96688354e", "scanner": "scanner-primary", "fingerprint": "8f39af820274cecf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5cb09b7c7ceb1003", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/page.tsx:452"}, "properties": {"repobilityId": "5bde248d2cfcefa3", "scanner": "scanner-primary", "fingerprint": "5cb09b7c7ceb1003", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9bb47fc0874de44d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/new/page.tsx:540"}, "properties": {"repobilityId": "2039250b03b987dc", "scanner": "scanner-primary", "fingerprint": "9bb47fc0874de44d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-faa30c78bbaa26dd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/(dashboard)/bookings/[id]/page.tsx:515"}, "properties": {"repobilityId": "0b2f5aaab92bfb7f", "scanner": "scanner-primary", "fingerprint": "faa30c78bbaa26dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f3c5a4280f3496f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/bookings/[id]/page.tsx:251"}, "properties": {"repobilityId": "52ef634df9f5aafb", "scanner": "scanner-primary", "fingerprint": "0f3c5a4280f3496f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c48efa0ac5a5667", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/new/page.tsx:12"}, "properties": {"repobilityId": "a05aed47172c62e6", "scanner": "scanner-primary", "fingerprint": "1c48efa0ac5a5667", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b4f73ded87a28b90", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/[id]/page.tsx:95"}, "properties": {"repobilityId": "e61a7fad89e3b7b9", "scanner": "scanner-primary", "fingerprint": "b4f73ded87a28b90", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-813b0ac56edfd82f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/leads/[id]/edit/page.tsx:21"}, "properties": {"repobilityId": "787d4c27ca8a62b4", "scanner": "scanner-primary", "fingerprint": "813b0ac56edfd82f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa4b7c843a4e9db9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/dashboard/page.tsx:219"}, "properties": {"repobilityId": "0eab90db61139da6", "scanner": "scanner-primary", "fingerprint": "aa4b7c843a4e9db9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85e076d5faac87a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/proposals/page.tsx:30"}, "properties": {"repobilityId": "729513acf92c627a", "scanner": "scanner-primary", "fingerprint": "85e076d5faac87a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58b91b43603a5e2e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/proposals/[id]/page.tsx:127"}, "properties": {"repobilityId": "c753d58085e245da", "scanner": "scanner-primary", "fingerprint": "58b91b43603a5e2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5aba519fe12db491", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/page.tsx:187"}, "properties": {"repobilityId": "fc9e052584a7522e", "scanner": "scanner-primary", "fingerprint": "5aba519fe12db491", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f87d427b1808f2ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/vendor-payments/[id]/page.tsx:310"}, "properties": {"repobilityId": "58724d5262c915ed", "scanner": "scanner-primary", "fingerprint": "f87d427b1808f2ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a98f0685a272dad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/accounting/tds/page.tsx:59"}, "properties": {"repobilityId": "38057dcfdc4beca1", "scanner": "scanner-primary", "fingerprint": "1a98f0685a272dad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68cae00fc20f8758", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/my-tickets/page.tsx:77"}, "properties": {"repobilityId": "de70e1c6d87f090a", "scanner": "scanner-primary", "fingerprint": "68cae00fc20f8758", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af49fa3f672ba4da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/team/page.tsx:317"}, "properties": {"repobilityId": "33dd6df8b4a3e8c6", "scanner": "scanner-primary", "fingerprint": "af49fa3f672ba4da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7565640a4c06b596", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/locations/[id]/page.tsx:68"}, "properties": {"repobilityId": "8e866c07add6bd67", "scanner": "scanner-primary", "fingerprint": "7565640a4c06b596", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-010730bc6e589a94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/vouchers/page.tsx:103"}, "properties": {"repobilityId": "fdfd18929123d7fc", "scanner": "scanner-primary", "fingerprint": "010730bc6e589a94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e43da6eec6e15e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/tasks/page.tsx:58"}, "properties": {"repobilityId": "c726eb0abecf814e", "scanner": "scanner-primary", "fingerprint": "4e43da6eec6e15e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2461bd1b80f2bb3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/billing/page.tsx:405"}, "properties": {"repobilityId": "8212a95058bbb8d5", "scanner": "scanner-primary", "fingerprint": "2461bd1b80f2bb3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-550ca6f6fc0a02d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/billing/page.tsx:481"}, "properties": {"repobilityId": "59829a43f8ff0bac", "scanner": "scanner-primary", "fingerprint": "550ca6f6fc0a02d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41a9425c26c591bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/admin/employees/page.tsx:100"}, "properties": {"repobilityId": "02110a2dbde60662", "scanner": "scanner-primary", "fingerprint": "41a9425c26c591bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-098a9d9d920bc5bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/employees/page.tsx:264"}, "properties": {"repobilityId": "4aaca35a68621d4c", "scanner": "scanner-primary", "fingerprint": "098a9d9d920bc5bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed05837f2925ceff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/employees/[id]/page.tsx:204"}, "properties": {"repobilityId": "a3acf0f5fe885b68", "scanner": "scanner-primary", "fingerprint": "ed05837f2925ceff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f0bbdecfe3c465d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/push/page.tsx:50"}, "properties": {"repobilityId": "0e1909ddf24adf27", "scanner": "scanner-primary", "fingerprint": "5f0bbdecfe3c465d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6eb5619c8c8e7844", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/tally-sync/page.tsx:151"}, "properties": {"repobilityId": "2aed64b4fe581821", "scanner": "scanner-primary", "fingerprint": "6eb5619c8c8e7844", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2387a56949e9bae9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/cosec-devices/[id]/page.tsx:316"}, "properties": {"repobilityId": "cfd1c975fe9f7473", "scanner": "scanner-primary", "fingerprint": "2387a56949e9bae9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7bdd89d487e8b9d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/dept-ids/page.tsx:56"}, "properties": {"repobilityId": "7ca6460ca86480f8", "scanner": "scanner-primary", "fingerprint": "7bdd89d487e8b9d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbb07bbe2ff4fedd", "level": "note", "message": {"text": "Legacy-named symbol `is_legacy` in src/app/(dashboard)/admin/cosec-access/page.tsx:42"}, "properties": {"repobilityId": "e624ad0db3fd8697", "scanner": "scanner-primary", "fingerprint": "cbb07bbe2ff4fedd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e9cec11fe3bf873e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/access-profiles/page.tsx:81"}, "properties": {"repobilityId": "7f1575c92547005b", "scanner": "scanner-primary", "fingerprint": "e9cec11fe3bf873e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f608488aacf1ca81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/access-analytics/page.tsx:149"}, "properties": {"repobilityId": "4bdcdda01acac1d6", "scanner": "scanner-primary", "fingerprint": "f608488aacf1ca81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4137b28631426da9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/packages/page.tsx:140"}, "properties": {"repobilityId": "cdd83ec84746dbb8", "scanner": "scanner-primary", "fingerprint": "4137b28631426da9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa018edc7e4ab4f1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/page.tsx:46"}, "properties": {"repobilityId": "52137e1aa31ed634", "scanner": "scanner-primary", "fingerprint": "aa018edc7e4ab4f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ba7798a989deeef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/team-kpi/page.tsx:35"}, "properties": {"repobilityId": "2740c1fca7f1f06d", "scanner": "scanner-primary", "fingerprint": "5ba7798a989deeef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b33202273f65611e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/issues/page.tsx:73"}, "properties": {"repobilityId": "ccddb8257c0797e9", "scanner": "scanner-primary", "fingerprint": "b33202273f65611e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fa4eb2f5f92698b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/issues/[id]/page.tsx:56"}, "properties": {"repobilityId": "75f32bc6ef2775bd", "scanner": "scanner-primary", "fingerprint": "fa4eb2f5f92698b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-52836691db119ed7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/assets/page.tsx:28"}, "properties": {"repobilityId": "c2f34cedf5bf73df", "scanner": "scanner-primary", "fingerprint": "52836691db119ed7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc105348ac2f941a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/assets/[id]/page.tsx:22"}, "properties": {"repobilityId": "7df6782abd828187", "scanner": "scanner-primary", "fingerprint": "dc105348ac2f941a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eacfc9a502c2c424", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/facility/my-issues/page.tsx:70"}, "properties": {"repobilityId": "068b920e8d11c803", "scanner": "scanner-primary", "fingerprint": "eacfc9a502c2c424", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8666ade1ced9e238", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/approvals/page.tsx:272"}, "properties": {"repobilityId": "ce618539c050e706", "scanner": "scanner-primary", "fingerprint": "8666ade1ced9e238", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e9d4cf3080b2e42", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/activities/page.tsx:104"}, "properties": {"repobilityId": "193d08a32d9e3f15", "scanner": "scanner-primary", "fingerprint": "7e9d4cf3080b2e42", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c74fe856908eddfc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/page.tsx:54"}, "properties": {"repobilityId": "b0f68722566c2593", "scanner": "scanner-primary", "fingerprint": "c74fe856908eddfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ad51b7667924f07", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/page.tsx:41"}, "properties": {"repobilityId": "c2195c9a0d4dca17", "scanner": "scanner-primary", "fingerprint": "0ad51b7667924f07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55385288b7db46b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/new/page.tsx:48"}, "properties": {"repobilityId": "b13ad3754afe784b", "scanner": "scanner-primary", "fingerprint": "55385288b7db46b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5892651970a8fb56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/[id]/page.tsx:83"}, "properties": {"repobilityId": "a37956039453e4e3", "scanner": "scanner-primary", "fingerprint": "5892651970a8fb56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c122542f8922d43", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/leases/[id]/edit/page.tsx:43"}, "properties": {"repobilityId": "914279d63678fb9d", "scanner": "scanner-primary", "fingerprint": "3c122542f8922d43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8652f5195d101ce8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/page.tsx:41"}, "properties": {"repobilityId": "b0badbb12b97f43f", "scanner": "scanner-primary", "fingerprint": "8652f5195d101ce8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-31f5f597a3cff23b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/new/page.tsx:41"}, "properties": {"repobilityId": "aac8765897d9fcb6", "scanner": "scanner-primary", "fingerprint": "31f5f597a3cff23b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe34bb39bc44b3ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/rent-management/landlords/[id]/page.tsx:80"}, "properties": {"repobilityId": "71c7c71b64b7c0ef", "scanner": "scanner-primary", "fingerprint": "fe34bb39bc44b3ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c360762ad3dd17a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/audit-logs/page.tsx:123"}, "properties": {"repobilityId": "7d5a4b9efd6e3199", "scanner": "scanner-primary", "fingerprint": "1c360762ad3dd17a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3043fe1a0ad54ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/pipeline/page.tsx:180"}, "properties": {"repobilityId": "8ec4c6416af0baea", "scanner": "scanner-primary", "fingerprint": "f3043fe1a0ad54ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42c6eace070c899d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/page.tsx:65"}, "properties": {"repobilityId": "264d95afcb5c8a45", "scanner": "scanner-primary", "fingerprint": "42c6eace070c899d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7342d445a81b4425", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/[id]/page.tsx:136"}, "properties": {"repobilityId": "6095cdb7be21a58e", "scanner": "scanner-primary", "fingerprint": "7342d445a81b4425", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-baa92ee001b97531", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/contracts/kyc-pending/page.tsx:85"}, "properties": {"repobilityId": "efad0148f3ca95cf", "scanner": "scanner-primary", "fingerprint": "baa92ee001b97531", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05a4c50e256672d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/support/page.tsx:94"}, "properties": {"repobilityId": "f03a079e8df72fc2", "scanner": "scanner-primary", "fingerprint": "05a4c50e256672d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67306682aec6cf56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/documents/page.tsx:47"}, "properties": {"repobilityId": "7a62d6ff1181cc74", "scanner": "scanner-primary", "fingerprint": "67306682aec6cf56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1be3327660ffea1d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/aggregators/new/page.tsx:12"}, "properties": {"repobilityId": "2717a45ee8998d6e", "scanner": "scanner-primary", "fingerprint": "1be3327660ffea1d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09b29fe166e0d2ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/aggregators/[id]/page.tsx:47"}, "properties": {"repobilityId": "14c8c05bf5faf958", "scanner": "scanner-primary", "fingerprint": "09b29fe166e0d2ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef0d02aa6f53ee30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/headcount/page.tsx:233"}, "properties": {"repobilityId": "b590ea7e49018a4e", "scanner": "scanner-primary", "fingerprint": "ef0d02aa6f53ee30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-693fe71f98e87463", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/page.tsx:35"}, "properties": {"repobilityId": "fc602ba6687c405b", "scanner": "scanner-primary", "fingerprint": "693fe71f98e87463", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5f1d9dbe475eece", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/leegality.ts:184"}, "properties": {"repobilityId": "3d03fbf16cf9b1a7", "scanner": "scanner-primary", "fingerprint": "a5f1d9dbe475eece", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78c9435543c05814", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/pdf-generator.ts:72"}, "properties": {"repobilityId": "90e341f6d03c5a32", "scanner": "scanner-primary", "fingerprint": "78c9435543c05814", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f51e52ea8e8999d3", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/billing.ts:661"}, "properties": {"repobilityId": "7c19b3548f5ce3d8", "scanner": "scanner-primary", "fingerprint": "f51e52ea8e8999d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9f7e444cf7b0e53", "level": "note", "message": {"text": "Legacy-named symbol `gmail_v1` in src/lib/gmail.ts:1"}, "properties": {"repobilityId": "d3dadf48d891c1e7", "scanner": "scanner-primary", "fingerprint": "a9f7e444cf7b0e53", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-70fdf1ae70c8c2d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/payment-reminder.ts:305"}, "properties": {"repobilityId": "055e796b05a7d615", "scanner": "scanner-primary", "fingerprint": "70fdf1ae70c8c2d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cc44f37fce74734", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/constants.ts:337"}, "properties": {"repobilityId": "bd23ba56233dcda6", "scanner": "scanner-primary", "fingerprint": "9cc44f37fce74734", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1640d5c4980e73ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/send-proforma.ts:249"}, "properties": {"repobilityId": "8f317291c8a542a2", "scanner": "scanner-primary", "fingerprint": "1640d5c4980e73ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5afabce581edd3dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/send-proforma.ts:167"}, "properties": {"repobilityId": "0df3764c83923167", "scanner": "scanner-primary", "fingerprint": "5afabce581edd3dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5fdc151965751ec", "level": "none", "message": {"text": "Commented-code block (18 lines) in src/lib/digio.ts:79"}, "properties": {"repobilityId": "e56a8297a1992ef5", "scanner": "scanner-primary", "fingerprint": "a5fdc151965751ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c96973204ebbf113", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/digio.ts:79"}, "properties": {"repobilityId": "123c37a9dde36af2", "scanner": "scanner-primary", "fingerprint": "c96973204ebbf113", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-57a5850daf230e45", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/unifi.ts:69"}, "properties": {"repobilityId": "27174dfbc09bfc24", "scanner": "scanner-primary", "fingerprint": "57a5850daf230e45", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-27add23b1f51b8f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tally/dispatch-tally-invoice.ts:285"}, "properties": {"repobilityId": "2306ee94282fddbf", "scanner": "scanner-primary", "fingerprint": "27add23b1f51b8f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d96219d25688b46", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/electricity.test.ts:16"}, "properties": {"repobilityId": "80c8bf8cd99c2c9e", "scanner": "scanner-primary", "fingerprint": "9d96219d25688b46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b98e5b0752d00ac0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/e-invoice/adapters/nic-protocol.ts:147"}, "properties": {"repobilityId": "ab454a268362311c", "scanner": "scanner-primary", "fingerprint": "b98e5b0752d00ac0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-12c1e5e936e89068", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/uploads/upload-gate.ts:1"}, "properties": {"repobilityId": "bf68e976dd38127b", "scanner": "scanner-primary", "fingerprint": "12c1e5e936e89068", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b87d95923053f4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/uploads/normalize-pdf-client.ts:1"}, "properties": {"repobilityId": "ea12f41174b6a571", "scanner": "scanner-primary", "fingerprint": "2b87d95923053f4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15c3a1c18e8e9ea8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/uploads/normalize-upload-server.ts:1"}, "properties": {"repobilityId": "21591c6177a84088", "scanner": "scanner-primary", "fingerprint": "15c3a1c18e8e9ea8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5c37dcffdfafd81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-fetch.ts:12"}, "properties": {"repobilityId": "5d2f22872c883ba7", "scanner": "scanner-primary", "fingerprint": "c5c37dcffdfafd81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2e1db64de01ac2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-push-notifications.ts:84"}, "properties": {"repobilityId": "f68785151949960a", "scanner": "scanner-primary", "fingerprint": "b2e1db64de01ac2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5fc6d90eb91d4154", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-debounced.ts:10"}, "properties": {"repobilityId": "157fa3612a5edecc", "scanner": "scanner-primary", "fingerprint": "5fc6d90eb91d4154", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f697022b8ecb2933", "level": "note", "message": {"text": "46 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "ced2925b2cb9d989", "scanner": "scanner-primary", "fingerprint": "f697022b8ecb2933", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}