{"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-f2357babbd8cb266", "name": "`truncate` class without `title=` for hover reveal \u2014 components/radar/ReportSources.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/ReportSources.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44d501f6b7eaf13a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/radar/RadarInboxView.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/RadarInboxView.tsx:332"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3257521c668a062b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/radar/RadarCard.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/RadarCard.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-c1c7ea557073d13c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/radar/EntityPicker.tsx:197", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/EntityPicker.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-1325f0b2595d7a08", "name": "`truncate` class without `title=` for hover reveal \u2014 components/layout/nav-conversations.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/nav-conversations.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e11bc017e2dad22a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/layout/nav-user.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/nav-user.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e29dbd7a390cd77b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Sidebar/SidebarUser.tsx:49", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Sidebar/SidebarUser.tsx:49"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73b80f8d5fe49f54", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseBlogView.tsx:321", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseBlogView.tsx:321"}, "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-605ae0ac11a20ceb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseDocumentView.tsx:204", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseDocumentView.tsx:204"}, "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-0883ad8672ff1d2d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/FullReportDocumentView.tsx:147", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/FullReportDocumentView.tsx:147"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39eec147290ff142", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseBodyCard.tsx:41", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseBodyCard.tsx:41"}, "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-29e9f9bdc43ac20a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/cases/CaseCard.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/cases/CaseCard.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c16168d004f185f6", "name": "Stray `console.log` in TS/JS \u2014 components/auth/OnboardingGuard.tsx:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/auth/OnboardingGuard.tsx:23"}, "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-6e5f8f7710f64e76", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/statutes-v2/AknElementRenderer.tsx:155", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/statutes-v2/AknElementRenderer.tsx:155"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1c14235e9d1aebf", "name": "`truncate` class without `title=` for hover reveal \u2014 components/ui/animated-tabs.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ui/animated-tabs.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-95ae0c8512e95479", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/ui/chart.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/ui/chart.tsx:83"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dfbfcac8d55e44f7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/ui/floating-prompt-input.tsx:537", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ui/floating-prompt-input.tsx:537"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52dc080e6ebb250b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/ConversationCard.tsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/ConversationCard.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-a1fa6c6620f60f96", "name": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/TrendingConversationCard.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/TrendingConversationCard.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-7462d319523be38a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/MyConversationCard.tsx:49", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/MyConversationCard.tsx:49"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0ea74bca94329e1", "name": "`truncate` class without `title=` for hover reveal \u2014 components/trending/TrendingCaseCard.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/trending/TrendingCaseCard.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc329c4a8c241014", "name": "`truncate` class without `title=` for hover reveal \u2014 components/trending/TrendingNoteCard.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/trending/TrendingNoteCard.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-2e834799628b940a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/statutes/StatuteCard.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/statutes/StatuteCard.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-65567b0d323a5a0c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/chat/search-results-cards.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/search-results-cards.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10280ab3c3a46783", "name": "`truncate` class without `title=` for hover reveal \u2014 components/chat/jurisdiction-picker.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/jurisdiction-picker.tsx:88"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed1893f21ab07cbb", "name": "`truncate` class without `title=` for hover reveal \u2014 components/chat/statute-results-display.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/statute-results-display.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-a472f57206db1b0d", "name": "`truncate` class without `title=` for hover reveal \u2014 components/chat/lawyer-card.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/lawyer-card.tsx:71"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1683a269df6df1a4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/chat/floating-conversation-list.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/floating-conversation-list.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1639d646d787e6dc", "name": "`truncate` class without `title=` for hover reveal \u2014 components/files/FileUploadDialog.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/files/FileUploadDialog.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f454e1ea49ed124a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserFilters.tsx:276", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserFilters.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-28b99f5e713d2672", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUsersTable.tsx:195", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUsersTable.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-3a94749555709d22", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/UserIdentityCard.tsx:188", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/UserIdentityCard.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c928e884e6ab02a6", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/UserAttributionCard.tsx:135", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/UserAttributionCard.tsx:135"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0e6506a8e11e2b7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserSinglePicker.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserSinglePicker.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c49f8caf2624acf6", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminConversationsTable.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminConversationsTable.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-f832cc73f3fa0693", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserTokenUsage.tsx:133", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserTokenUsage.tsx:133"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-405009e3995ec976", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/cases/CasesTable.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/cases/CasesTable.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-cf840fbee0a81383", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/cases/CaseFormFiles.tsx:252", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/cases/CaseFormFiles.tsx:252"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-964ec09bf0294aa7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/content-requests/ContentRequestsTable.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/content-requests/ContentRequestsTable.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-fe4f8a5b3f569496", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/notifications/BroadcastsTable.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/notifications/BroadcastsTable.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-842464feffacbbb8", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/notifications/analytics/NotificationAnalyticsTable", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/notifications/analytics/NotificationAnalyticsTables.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7f52f6a531110d3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/ProviderRoutingSection.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/ProviderRoutingSection.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-54b20490786d672e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiAgentsTable.tsx:144", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiAgentsTable.tsx:144"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d32c5fd66bf8f0d", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiProvidersTable.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiProvidersTable.tsx:164"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcca26496994d27b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiWorkflowsTable.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiWorkflowsTable.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-278f1cd412dce3dc", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiModelsTable.tsx:156", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiModelsTable.tsx:156"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3cc26d734118cf84", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiToolsTable.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiToolsTable.tsx:168"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba87faa68b3c2468", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/AnalyticsTopUsers.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/AnalyticsTopUsers.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb6085a04d5f19b3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/AnalyticsRecentConversations.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/AnalyticsRecentConversations.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-da419dfc21d2ac5e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopViewedContentTable.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopViewedContentTable.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f63ab891e868b595", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopUniversitiesViewTable.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopUniversitiesViewTable.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b24413851bbc07c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopViewersTable.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopViewersTable.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-cfb8f117141e7b91", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopCrawledContentTable.tsx:7", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopCrawledContentTable.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82393c30748adf82", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/BotActivityTable.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/BotActivityTable.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-cc11ed5d677fb838", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/RecentViewsTable.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/RecentViewsTable.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce000dc9fc0d8c1e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/subscription/tables/TopRevenueUsersTable", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/subscription/tables/TopRevenueUsersTable.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e6bbaa89ee757fa", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/subscription/tables/RecentSubscriptionsT", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/subscription/tables/RecentSubscriptionsTable.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-8e96c9066f8522a6", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/BotViewsByCountryChart.tsx:6", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/BotViewsByCountryChart.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8766d891cf844fe5", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ProfileVsIpCountryChart.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ProfileVsIpCountryChart.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-bdc1a42e1da21199", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByCountryChart.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByCountryChart.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a597ec24056bb9eb", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByUniversityChart.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByUniversityChart.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-ec60f29b6ab0fd52", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByContinentChart.tsx:49", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByContinentChart.tsx:49"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-852493df8ff623a9", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-tables/UniversitiesTable.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-tables/UniversitiesTable.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-de3a04cb359c9151", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/message-pack/tables/TopBuyersTable.tsx:8", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/message-pack/tables/TopBuyersTable.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc97c943aca98ea2", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/message-pack/tables/RecentPurchasesTable", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/message-pack/tables/RecentPurchasesTable.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-637032ad5b052e25", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/CountryDistributionChart.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/CountryDistributionChart.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-d36e5468c6c9da31", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/LawSchoolDistributionChart.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/LawSchoolDistributionChart.tsx:173"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aad1c007751cd238", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/AreaOfStudyDistributionChart", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/AreaOfStudyDistributionChart.tsx:176"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0fb473a0b49911e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/activity/ActivityFeedRow.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/activity/ActivityFeedRow.tsx:128"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-601a3f72854c6aeb", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/activity/FacetSelect.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/activity/FacetSelect.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d64464e757ae3dc", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-verifications/LawyerVerificationsTable.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-verifications/LawyerVerificationsTable.tsx:196"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-309d78d90994e245", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-verifications/LawyerVerificationInfoCard.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-verifications/LawyerVerificationInfoCard.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-820e39cdd9259cc0", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportUpload.tsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportUpload.tsx:122"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5edf4b9c612d0ba4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatutesTable.tsx:190", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatutesTable.tsx:190"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee543c661d4d2f7c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportProgress.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportProgress.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34173103af26cae6", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportHistoryTable.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportHistoryTable.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-ef1b8a11d4eb93d8", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminBulkGrantResult.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminBulkGrantResult.tsx:257"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6c39fe579eabe96", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminSponsorsTable.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminSponsorsTable.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d55167e2badbe493", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminUserSearchPicker.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminUserSearchPicker.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-696114f20857e4f3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminCampaignsTable.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminCampaignsTable.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-68894cd6b0f3d3c2", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminGrantsTable.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminGrantsTable.tsx:91"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d901fca7fd0ddd8", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/FileDetailSheet.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/FileDetailSheet.tsx:41"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a67762c4a569a132", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/AdminFilesTable.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/AdminFilesTable.tsx:174"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42d27dda4006463b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/tables/TopUploadersTable.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/tables/TopUploadersTable.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02351dd0265a5c65", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/message-packs/AdminMessagePackDetail.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/message-packs/AdminMessagePackDetail.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-82487578fd6405f4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/message-packs/AdminMessagePacksTable.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/message-packs/AdminMessagePacksTable.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-95bf6888b5b85cd0", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/paystack-webhooks/PaystackWebhooksTable.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/paystack-webhooks/PaystackWebhooksTable.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b42841d602bc4d4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/paystack-webhooks/PaystackWebhookDetailSheet.tsx:6", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/paystack-webhooks/PaystackWebhookDetailSheet.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-fd234c058d354bad", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/messages/MessageFeedTable.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/messages/MessageFeedTable.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-7e7a20db6ce4666f", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/messages/MessageDetailSheet.tsx:201", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/messages/MessageDetailSheet.tsx:201"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6853735f25b5454", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/subscriptions/AdminSubscriptionDetail.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/subscriptions/AdminSubscriptionDetail.tsx:178"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c88f8e14442c1bdb", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/subscriptions/AdminSubscriptionsTable.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/subscriptions/AdminSubscriptionsTable.tsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7433dbdbc230beff", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/plans/AdminPlansTable.tsx:123", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/plans/AdminPlansTable.tsx:123"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aaf9d4b1917a5be2", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/plans/AdminPlanSubscriptionsTable.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/plans/AdminPlanSubscriptionsTable.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4af2446d9a8a13f", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectTopLawyersTable.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectTopLawyersTable.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-4bdccd4f4dcbe7f3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectTable.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectTable.tsx:168"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-871a65183b6a00fb", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectDetailCard.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectDetailCard.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e02af3135abcba53", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/IpClustersTable.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/IpClustersTable.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc0f1c57133ed652", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/UserDeviceHistorySheet.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/UserDeviceHistorySheet.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d952707135fdc91", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/SharedDevicesTable.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/SharedDevicesTable.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-f12848e42b4b7675", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/DevicesTable.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/DevicesTable.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-870b8e35a12d74b4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/AbuseLogsTable.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/AbuseLogsTable.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95181588e0a21578", "name": "`truncate` class without `title=` for hover reveal \u2014 components/notes/NoteAuthorCard.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/notes/NoteAuthorCard.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba8cba733f467c8c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/notes/NoteCard.tsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/notes/NoteCard.tsx:104"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72da22314e225b1d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/notes/NoteContent.tsx:67", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/notes/NoteContent.tsx:67"}, "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-ed73e9c0e93d0a8b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/notes/mention/CaseSuggestionList.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/notes/mention/CaseSuggestionList.tsx:140"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11b5645065291209", "name": "`truncate` class without `title=` for hover reveal \u2014 components/folders/AddToFolderDialog.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/AddToFolderDialog.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-910883851d4325f4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/folders/FolderItemCard.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/FolderItemCard.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-95402ccc0299e8dc", "name": "`truncate` class without `title=` for hover reveal \u2014 components/folders/AddItemToFolderDialog.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/AddItemToFolderDialog.tsx:231"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c5d7bc412462e03", "name": "`truncate` class without `title=` for hover reveal \u2014 components/folders/FolderCard.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/FolderCard.tsx:78"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88a2e87ca0135389", "name": "`truncate` class without `title=` for hover reveal \u2014 components/feedback/FeedbackDialog.tsx:410", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/feedback/FeedbackDialog.tsx:410"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e7226728f1c641a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-7/page.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-7/page.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf9a1275f25e627c", "name": "Stray `console.log` in TS/JS \u2014 app/(onboarding)/onboarding/step-7/page.tsx:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/(onboarding)/onboarding/step-7/page.tsx:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f212f88ece569f3f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-6b/page.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-6b/page.tsx:233"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30051c279a6d6aa7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-8/page.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-8/page.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-88fc95529ad58aa7", "name": "Stray `console.log` in TS/JS \u2014 app/(onboarding)/onboarding/step-8/page.tsx:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/(onboarding)/onboarding/step-8/page.tsx:180"}, "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-9903ad0f05a97418", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/models/[id]/page.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/models/[id]/page.tsx:129"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7455df33cf03dcb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/providers/[id]/page.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/providers/[id]/page.tsx:148"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f80fad9df0050d6a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/agents/[id]/page.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/agents/[id]/page.tsx:129"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a2d9aff93106e1e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/workflows/[id]/page.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/workflows/[id]/page.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-949df5c72a382241", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/tools/[id]/page.tsx:133", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/tools/[id]/page.tsx:133"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82b62207711ba9f3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/conversations/[id]/page.tsx:444", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/conversations/[id]/page.tsx:444"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2162b44558f91c15", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/campaigns/[id]/usage/page.tsx:215", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/campaigns/[id]/usage/page.tsx:215"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d1df307ec8bc676", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/page.tsx:752", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/page.tsx:752"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a8d8dfa0ead151d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/c/[conversationId]/conversation-client.tsx:430", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/c/[conversationId]/conversation-client.tsx:430"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e174f9cda622c90d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/radars/[radarUuid]/scan-log/page.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/radars/[radarUuid]/scan-log/page.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5ff4ed00207e6d7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/bookmarks/page.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/bookmarks/page.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86b96479560a0789", "name": "TODO/FIXME marker in shipping code \u2014 app/(main)/notes/[slug]/page.tsx:150", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/(main)/notes/[slug]/page.tsx:150"}, "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-be0cacd594330da9", "name": "Stray `console.log` in TS/JS \u2014 app/(main)/notes/[slug]/page.tsx:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/(main)/notes/[slug]/page.tsx:151"}, "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-4d94fc04b9d43a02", "name": "Stray `console.log` in TS/JS \u2014 lib/stores/authStore.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/stores/authStore.ts:30"}, "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-851951f6fe5fb1c2", "name": "Stray `console.log` in TS/JS \u2014 lib/hooks/useOnboarding.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/hooks/useOnboarding.ts:78"}, "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-2ac99f3544e4b7d3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/hooks/useCaseMentionTooltips.ts:193", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/hooks/useCaseMentionTooltips.ts:193"}, "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-5c913ca64ae252ad", "name": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseBlogView.tsx:321", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseBlogView.tsx:321"}, "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-f307facc420fa1bf", "name": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseDocumentView.tsx:204", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseDocumentView.tsx:204"}, "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-83e55b708aeb93d8", "name": "Insecure pattern 'dangerous_innerhtml' in components/cases/FullReportDocumentView.tsx:147", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/FullReportDocumentView.tsx:147"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8f291e6a6e75342", "name": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseBodyCard.tsx:41", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseBodyCard.tsx:41"}, "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-83d80c935b015c7a", "name": "Insecure pattern 'dangerous_innerhtml' in components/statutes-v2/AknElementRenderer.tsx:155", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/statutes-v2/AknElementRenderer.tsx:155"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-038f95f510f35674", "name": "Insecure pattern 'dangerous_innerhtml' in components/ui/chart.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/ui/chart.tsx:83"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2780c54c5dc5e4d", "name": "Insecure pattern 'dangerous_innerhtml' in components/notes/NoteContent.tsx:67", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/notes/NoteContent.tsx:67"}, "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-e22865556b634c31", "name": "Insecure pattern 'direct_innerhtml_assignment' in lib/hooks/useCaseMentionTooltips.ts:78", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in lib/hooks/useCaseMentionTooltips.ts:78"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28646af5e1b586b5", "name": "Very large file: app/(main)/c/[conversationId]/conversation-client.tsx (1399 lines)", "shortDescription": {"text": "Very large file: app/(main)/c/[conversationId]/conversation-client.tsx (1399 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-7bc2f2ffe77faa06", "name": "Very large file: lib/hooks/useChatStream.ts (1725 lines)", "shortDescription": {"text": "Very large file: lib/hooks/useChatStream.ts (1725 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": "2 test file(s) for 852 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 14 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 342 placeholder/mock markers across 118 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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, ci, tests. 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-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.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-dfc304a81d53dd00", "name": "Commented-code block (5 lines) in types/chat.ts:456", "shortDescription": {"text": "Commented-code block (5 lines) in types/chat.ts:456"}, "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-270cd63dbeebd76a", "name": "Commented-code block (5 lines) in types/admin-sponsors.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in types/admin-sponsors.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-4f21adbcb9d3886b", "name": "Commented-code block (5 lines) in components/radar/RadarInboxView.tsx:105", "shortDescription": {"text": "Commented-code block (5 lines) in components/radar/RadarInboxView.tsx:105"}, "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-c94c3e59f491ca7d", "name": "Commented-code block (5 lines) in components/radar/RadarForm.tsx:143", "shortDescription": {"text": "Commented-code block (5 lines) in components/radar/RadarForm.tsx:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed07d1eee43c2226", "name": "Commented-code block (5 lines) in components/chat/jurisdiction-flag.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in components/chat/jurisdiction-flag.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fff53fad63daad6", "name": "Commented-code block (6 lines) in lib/utils/transform-api-messages.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in lib/utils/transform-api-messages.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3634845bb8918f9d", "name": "Commented-code block (5 lines) in lib/hooks/useChatStream.ts:773", "shortDescription": {"text": "Commented-code block (5 lines) in lib/hooks/useChatStream.ts:773"}, "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-baf806d26653bfb8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/hooks/useCountries.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/hooks/useCountries.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-003a8b005c19bfda", "name": "Unused endpoint: POST /auth/guest", "shortDescription": {"text": "Unused endpoint: POST /auth/guest"}, "fullDescription": {"text": "`lib/api/client.ts` declares `POST /auth/guest` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20265"}, "properties": {"repository": "Stay03/lawexa-app-v2", "repoUrl": "https://github.com/Stay03/lawexa-app-v2", "branch": "main"}, "results": [{"ruleId": "scanner-f2357babbd8cb266", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/ReportSources.tsx:62"}, "properties": {"repobilityId": "b2ff6107acf11878", "scanner": "scanner-primary", "fingerprint": "f2357babbd8cb266", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44d501f6b7eaf13a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/RadarInboxView.tsx:332"}, "properties": {"repobilityId": "5c5603c8c228964c", "scanner": "scanner-primary", "fingerprint": "44d501f6b7eaf13a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3257521c668a062b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/RadarCard.tsx:101"}, "properties": {"repobilityId": "2f56ce9341dc84c7", "scanner": "scanner-primary", "fingerprint": "3257521c668a062b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1c7ea557073d13c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/radar/EntityPicker.tsx:197"}, "properties": {"repobilityId": "f56e18ca738bdf2f", "scanner": "scanner-primary", "fingerprint": "c1c7ea557073d13c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1325f0b2595d7a08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/nav-conversations.tsx:97"}, "properties": {"repobilityId": "552372e4758cec5d", "scanner": "scanner-primary", "fingerprint": "1325f0b2595d7a08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e11bc017e2dad22a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/nav-user.tsx:99"}, "properties": {"repobilityId": "40330b700a5ecdf6", "scanner": "scanner-primary", "fingerprint": "e11bc017e2dad22a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e29dbd7a390cd77b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Sidebar/SidebarUser.tsx:49"}, "properties": {"repobilityId": "d44e735f0786b0bb", "scanner": "scanner-primary", "fingerprint": "e29dbd7a390cd77b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73b80f8d5fe49f54", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseBlogView.tsx:321"}, "properties": {"repobilityId": "a6b0296f1fa728db", "scanner": "scanner-primary", "fingerprint": "73b80f8d5fe49f54", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-605ae0ac11a20ceb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseDocumentView.tsx:204"}, "properties": {"repobilityId": "005406131a80b24b", "scanner": "scanner-primary", "fingerprint": "605ae0ac11a20ceb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0883ad8672ff1d2d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/FullReportDocumentView.tsx:147"}, "properties": {"repobilityId": "aba6e62bf0f2273e", "scanner": "scanner-primary", "fingerprint": "0883ad8672ff1d2d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-39eec147290ff142", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/cases/CaseBodyCard.tsx:41"}, "properties": {"repobilityId": "92fe69c3eb55afd0", "scanner": "scanner-primary", "fingerprint": "39eec147290ff142", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-29e9f9bdc43ac20a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/cases/CaseCard.tsx:59"}, "properties": {"repobilityId": "3d2adc71ebc85841", "scanner": "scanner-primary", "fingerprint": "29e9f9bdc43ac20a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c16168d004f185f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/auth/OnboardingGuard.tsx:23"}, "properties": {"repobilityId": "682e95f2607795d8", "scanner": "scanner-primary", "fingerprint": "c16168d004f185f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e5f8f7710f64e76", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/statutes-v2/AknElementRenderer.tsx:155"}, "properties": {"repobilityId": "6fbc74dd4d8e44c8", "scanner": "scanner-primary", "fingerprint": "6e5f8f7710f64e76", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c1c14235e9d1aebf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ui/animated-tabs.tsx:86"}, "properties": {"repobilityId": "6e2ac5c990087789", "scanner": "scanner-primary", "fingerprint": "c1c14235e9d1aebf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95ae0c8512e95479", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/ui/chart.tsx:83"}, "properties": {"repobilityId": "dd1e3f2d87b6f488", "scanner": "scanner-primary", "fingerprint": "95ae0c8512e95479", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-dfbfcac8d55e44f7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ui/floating-prompt-input.tsx:537"}, "properties": {"repobilityId": "12172ec3efba4704", "scanner": "scanner-primary", "fingerprint": "dfbfcac8d55e44f7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-52dc080e6ebb250b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/ConversationCard.tsx:52"}, "properties": {"repobilityId": "44449d4687bcc330", "scanner": "scanner-primary", "fingerprint": "52dc080e6ebb250b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1fa6c6620f60f96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/TrendingConversationCard.tsx:63"}, "properties": {"repobilityId": "13e3d0316964a4f4", "scanner": "scanner-primary", "fingerprint": "a1fa6c6620f60f96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7462d319523be38a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/conversations/MyConversationCard.tsx:49"}, "properties": {"repobilityId": "c0cd5ee809649fd8", "scanner": "scanner-primary", "fingerprint": "7462d319523be38a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c0ea74bca94329e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/trending/TrendingCaseCard.tsx:54"}, "properties": {"repobilityId": "047144490aca470d", "scanner": "scanner-primary", "fingerprint": "c0ea74bca94329e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc329c4a8c241014", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/trending/TrendingNoteCard.tsx:82"}, "properties": {"repobilityId": "c239342827c89a3a", "scanner": "scanner-primary", "fingerprint": "bc329c4a8c241014", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2e834799628b940a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/statutes/StatuteCard.tsx:64"}, "properties": {"repobilityId": "9e9e6e00d91fe766", "scanner": "scanner-primary", "fingerprint": "2e834799628b940a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65567b0d323a5a0c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/search-results-cards.tsx:89"}, "properties": {"repobilityId": "f745d5af2f0c6824", "scanner": "scanner-primary", "fingerprint": "65567b0d323a5a0c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-10280ab3c3a46783", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/jurisdiction-picker.tsx:88"}, "properties": {"repobilityId": "8b11dec963da79ce", "scanner": "scanner-primary", "fingerprint": "10280ab3c3a46783", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed1893f21ab07cbb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/statute-results-display.tsx:222"}, "properties": {"repobilityId": "b87ccd0389e3834b", "scanner": "scanner-primary", "fingerprint": "ed1893f21ab07cbb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a472f57206db1b0d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/lawyer-card.tsx:71"}, "properties": {"repobilityId": "0fd8441763f7cebd", "scanner": "scanner-primary", "fingerprint": "a472f57206db1b0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1683a269df6df1a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/chat/floating-conversation-list.tsx:66"}, "properties": {"repobilityId": "564602ad3c22079f", "scanner": "scanner-primary", "fingerprint": "1683a269df6df1a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1639d646d787e6dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/files/FileUploadDialog.tsx:151"}, "properties": {"repobilityId": "ee5fc3183f563b48", "scanner": "scanner-primary", "fingerprint": "1639d646d787e6dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f454e1ea49ed124a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserFilters.tsx:276"}, "properties": {"repobilityId": "8b1346d5117c52ff", "scanner": "scanner-primary", "fingerprint": "f454e1ea49ed124a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28b99f5e713d2672", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUsersTable.tsx:195"}, "properties": {"repobilityId": "456e6827555f4e54", "scanner": "scanner-primary", "fingerprint": "28b99f5e713d2672", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a94749555709d22", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/UserIdentityCard.tsx:188"}, "properties": {"repobilityId": "1d0797bb9420b52d", "scanner": "scanner-primary", "fingerprint": "3a94749555709d22", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c928e884e6ab02a6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/UserAttributionCard.tsx:135"}, "properties": {"repobilityId": "30c908caa1a8a5df", "scanner": "scanner-primary", "fingerprint": "c928e884e6ab02a6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d0e6506a8e11e2b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserSinglePicker.tsx:80"}, "properties": {"repobilityId": "46013741baedcbfd", "scanner": "scanner-primary", "fingerprint": "d0e6506a8e11e2b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c49f8caf2624acf6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminConversationsTable.tsx:152"}, "properties": {"repobilityId": "62f56b3e33d518dd", "scanner": "scanner-primary", "fingerprint": "c49f8caf2624acf6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f832cc73f3fa0693", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminUserTokenUsage.tsx:133"}, "properties": {"repobilityId": "aade50808c203e4a", "scanner": "scanner-primary", "fingerprint": "f832cc73f3fa0693", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-405009e3995ec976", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/cases/CasesTable.tsx:213"}, "properties": {"repobilityId": "cf9a93c51f8e19f2", "scanner": "scanner-primary", "fingerprint": "405009e3995ec976", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cf840fbee0a81383", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/cases/CaseFormFiles.tsx:252"}, "properties": {"repobilityId": "46e471cc4160a603", "scanner": "scanner-primary", "fingerprint": "cf840fbee0a81383", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-964ec09bf0294aa7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/content-requests/ContentRequestsTable.tsx:236"}, "properties": {"repobilityId": "6d5db25c617404ab", "scanner": "scanner-primary", "fingerprint": "964ec09bf0294aa7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe4f8a5b3f569496", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/notifications/BroadcastsTable.tsx:150"}, "properties": {"repobilityId": "48d614b0ce045b3d", "scanner": "scanner-primary", "fingerprint": "fe4f8a5b3f569496", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-842464feffacbbb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/notifications/analytics/NotificationAnalyticsTables.tsx:98"}, "properties": {"repobilityId": "3a0720b024edeac2", "scanner": "scanner-primary", "fingerprint": "842464feffacbbb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d7f52f6a531110d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/ProviderRoutingSection.tsx:119"}, "properties": {"repobilityId": "52f63755ccb341ac", "scanner": "scanner-primary", "fingerprint": "d7f52f6a531110d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-54b20490786d672e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiAgentsTable.tsx:144"}, "properties": {"repobilityId": "e8453c40105bb582", "scanner": "scanner-primary", "fingerprint": "54b20490786d672e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d32c5fd66bf8f0d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiProvidersTable.tsx:164"}, "properties": {"repobilityId": "e94a35e1736cd85b", "scanner": "scanner-primary", "fingerprint": "3d32c5fd66bf8f0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dcca26496994d27b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiWorkflowsTable.tsx:150"}, "properties": {"repobilityId": "369e84025a118449", "scanner": "scanner-primary", "fingerprint": "dcca26496994d27b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-278f1cd412dce3dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiModelsTable.tsx:156"}, "properties": {"repobilityId": "a4105d29b2636ae6", "scanner": "scanner-primary", "fingerprint": "278f1cd412dce3dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3cc26d734118cf84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/ai/AiToolsTable.tsx:168"}, "properties": {"repobilityId": "f7874b71f11da73b", "scanner": "scanner-primary", "fingerprint": "3cc26d734118cf84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba87faa68b3c2468", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/AnalyticsTopUsers.tsx:80"}, "properties": {"repobilityId": "24276680c3f7d664", "scanner": "scanner-primary", "fingerprint": "ba87faa68b3c2468", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb6085a04d5f19b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/AnalyticsRecentConversations.tsx:81"}, "properties": {"repobilityId": "4505aec419d5c96e", "scanner": "scanner-primary", "fingerprint": "fb6085a04d5f19b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da419dfc21d2ac5e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopViewedContentTable.tsx:72"}, "properties": {"repobilityId": "2f714df6352ea2e9", "scanner": "scanner-primary", "fingerprint": "da419dfc21d2ac5e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f63ab891e868b595", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopUniversitiesViewTable.tsx:57"}, "properties": {"repobilityId": "bdeee0096a6074eb", "scanner": "scanner-primary", "fingerprint": "f63ab891e868b595", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b24413851bbc07c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopViewersTable.tsx:63"}, "properties": {"repobilityId": "ee729a8fd1c2395b", "scanner": "scanner-primary", "fingerprint": "7b24413851bbc07c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cfb8f117141e7b91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/TopCrawledContentTable.tsx:72"}, "properties": {"repobilityId": "a76c378d19bd70c6", "scanner": "scanner-primary", "fingerprint": "cfb8f117141e7b91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82393c30748adf82", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/BotActivityTable.tsx:86"}, "properties": {"repobilityId": "5c4f367794667642", "scanner": "scanner-primary", "fingerprint": "82393c30748adf82", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc11ed5d677fb838", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-tables/RecentViewsTable.tsx:72"}, "properties": {"repobilityId": "da7f8c4e9ab7a26e", "scanner": "scanner-primary", "fingerprint": "cc11ed5d677fb838", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce000dc9fc0d8c1e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/subscription/tables/TopRevenueUsersTable.tsx:79"}, "properties": {"repobilityId": "6d3d1e808ad2dfd1", "scanner": "scanner-primary", "fingerprint": "ce000dc9fc0d8c1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e6bbaa89ee757fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/subscription/tables/RecentSubscriptionsTable.tsx:100"}, "properties": {"repobilityId": "81a5067549352699", "scanner": "scanner-primary", "fingerprint": "4e6bbaa89ee757fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e96c9066f8522a6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/BotViewsByCountryChart.tsx:65"}, "properties": {"repobilityId": "d437cff894dc7301", "scanner": "scanner-primary", "fingerprint": "8e96c9066f8522a6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8766d891cf844fe5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ProfileVsIpCountryChart.tsx:63"}, "properties": {"repobilityId": "5e6c39f9a7b4f163", "scanner": "scanner-primary", "fingerprint": "8766d891cf844fe5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bdc1a42e1da21199", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByCountryChart.tsx:65"}, "properties": {"repobilityId": "4a41465c25111fc6", "scanner": "scanner-primary", "fingerprint": "bdc1a42e1da21199", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a597ec24056bb9eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByUniversityChart.tsx:106"}, "properties": {"repobilityId": "d3f7497f2140b2ab", "scanner": "scanner-primary", "fingerprint": "a597ec24056bb9eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec60f29b6ab0fd52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/view-charts/ViewsByContinentChart.tsx:49"}, "properties": {"repobilityId": "1d9b66ce39c265ec", "scanner": "scanner-primary", "fingerprint": "ec60f29b6ab0fd52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-852493df8ff623a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-tables/UniversitiesTable.tsx:64"}, "properties": {"repobilityId": "23a92cc6ec8b5e87", "scanner": "scanner-primary", "fingerprint": "852493df8ff623a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de3a04cb359c9151", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/message-pack/tables/TopBuyersTable.tsx:80"}, "properties": {"repobilityId": "ae862052b1221912", "scanner": "scanner-primary", "fingerprint": "de3a04cb359c9151", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc97c943aca98ea2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/message-pack/tables/RecentPurchasesTable.tsx:86"}, "properties": {"repobilityId": "78f5773f168eb239", "scanner": "scanner-primary", "fingerprint": "cc97c943aca98ea2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-637032ad5b052e25", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/CountryDistributionChart.tsx:83"}, "properties": {"repobilityId": "348a5bbd3463654b", "scanner": "scanner-primary", "fingerprint": "637032ad5b052e25", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d36e5468c6c9da31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/LawSchoolDistributionChart.tsx:173"}, "properties": {"repobilityId": "081a664bbbfcb7e4", "scanner": "scanner-primary", "fingerprint": "d36e5468c6c9da31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aad1c007751cd238", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/analytics/user-charts/AreaOfStudyDistributionChart.tsx:176"}, "properties": {"repobilityId": "cda3a2f11dede3d2", "scanner": "scanner-primary", "fingerprint": "aad1c007751cd238", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0fb473a0b49911e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/activity/ActivityFeedRow.tsx:128"}, "properties": {"repobilityId": "d1f4b2ac02456567", "scanner": "scanner-primary", "fingerprint": "e0fb473a0b49911e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-601a3f72854c6aeb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/activity/FacetSelect.tsx:66"}, "properties": {"repobilityId": "40aac1d01a2d45f7", "scanner": "scanner-primary", "fingerprint": "601a3f72854c6aeb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8d64464e757ae3dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-verifications/LawyerVerificationsTable.tsx:196"}, "properties": {"repobilityId": "6a23474a8618ea97", "scanner": "scanner-primary", "fingerprint": "8d64464e757ae3dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-309d78d90994e245", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-verifications/LawyerVerificationInfoCard.tsx:116"}, "properties": {"repobilityId": "05be8e975c54d2af", "scanner": "scanner-primary", "fingerprint": "309d78d90994e245", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-820e39cdd9259cc0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportUpload.tsx:122"}, "properties": {"repobilityId": "e1e48dd8a785a2e6", "scanner": "scanner-primary", "fingerprint": "820e39cdd9259cc0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5edf4b9c612d0ba4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatutesTable.tsx:190"}, "properties": {"repobilityId": "ca7f8c41ac196455", "scanner": "scanner-primary", "fingerprint": "5edf4b9c612d0ba4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee543c661d4d2f7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportProgress.tsx:98"}, "properties": {"repobilityId": "41fb3ddd0da7b84a", "scanner": "scanner-primary", "fingerprint": "ee543c661d4d2f7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-34173103af26cae6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/statutes/StatuteImportHistoryTable.tsx:106"}, "properties": {"repobilityId": "a8455382a5565dde", "scanner": "scanner-primary", "fingerprint": "34173103af26cae6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef1b8a11d4eb93d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminBulkGrantResult.tsx:257"}, "properties": {"repobilityId": "76b9d6e7dada4022", "scanner": "scanner-primary", "fingerprint": "ef1b8a11d4eb93d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6c39fe579eabe96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminSponsorsTable.tsx:79"}, "properties": {"repobilityId": "3edc16bfce647d91", "scanner": "scanner-primary", "fingerprint": "d6c39fe579eabe96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d55167e2badbe493", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminUserSearchPicker.tsx:114"}, "properties": {"repobilityId": "958dd67f84ee861a", "scanner": "scanner-primary", "fingerprint": "d55167e2badbe493", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-696114f20857e4f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminCampaignsTable.tsx:83"}, "properties": {"repobilityId": "1550666c0215a59b", "scanner": "scanner-primary", "fingerprint": "696114f20857e4f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68894cd6b0f3d3c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/sponsors/AdminGrantsTable.tsx:91"}, "properties": {"repobilityId": "3f430eb96d292008", "scanner": "scanner-primary", "fingerprint": "68894cd6b0f3d3c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d901fca7fd0ddd8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/FileDetailSheet.tsx:41"}, "properties": {"repobilityId": "0716b0b753a1d3f2", "scanner": "scanner-primary", "fingerprint": "6d901fca7fd0ddd8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a67762c4a569a132", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/AdminFilesTable.tsx:174"}, "properties": {"repobilityId": "4927f05887fc2063", "scanner": "scanner-primary", "fingerprint": "a67762c4a569a132", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42d27dda4006463b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/files/tables/TopUploadersTable.tsx:60"}, "properties": {"repobilityId": "432f4aa4da165623", "scanner": "scanner-primary", "fingerprint": "42d27dda4006463b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02351dd0265a5c65", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/message-packs/AdminMessagePackDetail.tsx:108"}, "properties": {"repobilityId": "466433ed40097863", "scanner": "scanner-primary", "fingerprint": "02351dd0265a5c65", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82487578fd6405f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/message-packs/AdminMessagePacksTable.tsx:150"}, "properties": {"repobilityId": "39cf8c0dc5dd105e", "scanner": "scanner-primary", "fingerprint": "82487578fd6405f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95bf6888b5b85cd0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/paystack-webhooks/PaystackWebhooksTable.tsx:151"}, "properties": {"repobilityId": "9720fd3f8e3634d1", "scanner": "scanner-primary", "fingerprint": "95bf6888b5b85cd0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b42841d602bc4d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/paystack-webhooks/PaystackWebhookDetailSheet.tsx:67"}, "properties": {"repobilityId": "798f5a0877dff09d", "scanner": "scanner-primary", "fingerprint": "7b42841d602bc4d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd234c058d354bad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/messages/MessageFeedTable.tsx:139"}, "properties": {"repobilityId": "115663f71a25907e", "scanner": "scanner-primary", "fingerprint": "fd234c058d354bad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e7a20db6ce4666f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/messages/MessageDetailSheet.tsx:201"}, "properties": {"repobilityId": "6726cbcdb403e1b5", "scanner": "scanner-primary", "fingerprint": "7e7a20db6ce4666f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c6853735f25b5454", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/subscriptions/AdminSubscriptionDetail.tsx:178"}, "properties": {"repobilityId": "eb094c1d9707430b", "scanner": "scanner-primary", "fingerprint": "c6853735f25b5454", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c88f8e14442c1bdb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/subscriptions/AdminSubscriptionsTable.tsx:153"}, "properties": {"repobilityId": "04e94856be436770", "scanner": "scanner-primary", "fingerprint": "c88f8e14442c1bdb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7433dbdbc230beff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/plans/AdminPlansTable.tsx:123"}, "properties": {"repobilityId": "6fceb7d006b0dd6b", "scanner": "scanner-primary", "fingerprint": "7433dbdbc230beff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aaf9d4b1917a5be2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/plans/AdminPlanSubscriptionsTable.tsx:96"}, "properties": {"repobilityId": "42148089c3ea28aa", "scanner": "scanner-primary", "fingerprint": "aaf9d4b1917a5be2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e4af2446d9a8a13f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectTopLawyersTable.tsx:75"}, "properties": {"repobilityId": "c4e9103990547f45", "scanner": "scanner-primary", "fingerprint": "e4af2446d9a8a13f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4bdccd4f4dcbe7f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectTable.tsx:168"}, "properties": {"repobilityId": "8396a10095d3507e", "scanner": "scanner-primary", "fingerprint": "4bdccd4f4dcbe7f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-871a65183b6a00fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/lawyer-connect/LawyerConnectDetailCard.tsx:96"}, "properties": {"repobilityId": "fa76eb1f9a5a2d74", "scanner": "scanner-primary", "fingerprint": "871a65183b6a00fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e02af3135abcba53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/IpClustersTable.tsx:54"}, "properties": {"repobilityId": "7e204b85aa3ff201", "scanner": "scanner-primary", "fingerprint": "e02af3135abcba53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc0f1c57133ed652", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/UserDeviceHistorySheet.tsx:62"}, "properties": {"repobilityId": "8be12b094447238e", "scanner": "scanner-primary", "fingerprint": "fc0f1c57133ed652", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1d952707135fdc91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/SharedDevicesTable.tsx:67"}, "properties": {"repobilityId": "2794adefd35ed9c7", "scanner": "scanner-primary", "fingerprint": "1d952707135fdc91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f12848e42b4b7675", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/DevicesTable.tsx:167"}, "properties": {"repobilityId": "b5aedf5325399205", "scanner": "scanner-primary", "fingerprint": "f12848e42b4b7675", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-870b8e35a12d74b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/devices/AbuseLogsTable.tsx:53"}, "properties": {"repobilityId": "4b6abd29f6bc42e5", "scanner": "scanner-primary", "fingerprint": "870b8e35a12d74b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95181588e0a21578", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/notes/NoteAuthorCard.tsx:59"}, "properties": {"repobilityId": "587e7c47cdcedd81", "scanner": "scanner-primary", "fingerprint": "95181588e0a21578", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba8cba733f467c8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/notes/NoteCard.tsx:104"}, "properties": {"repobilityId": "314a3c6831d2c8d4", "scanner": "scanner-primary", "fingerprint": "ba8cba733f467c8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-72da22314e225b1d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/notes/NoteContent.tsx:67"}, "properties": {"repobilityId": "adab119d40ca7197", "scanner": "scanner-primary", "fingerprint": "72da22314e225b1d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ed73e9c0e93d0a8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/notes/mention/CaseSuggestionList.tsx:140"}, "properties": {"repobilityId": "93c1219a7f4eb116", "scanner": "scanner-primary", "fingerprint": "ed73e9c0e93d0a8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11b5645065291209", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/AddToFolderDialog.tsx:169"}, "properties": {"repobilityId": "72fcda5e7b8db905", "scanner": "scanner-primary", "fingerprint": "11b5645065291209", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-910883851d4325f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/FolderItemCard.tsx:134"}, "properties": {"repobilityId": "b9f70aa2ab149a92", "scanner": "scanner-primary", "fingerprint": "910883851d4325f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95402ccc0299e8dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/AddItemToFolderDialog.tsx:231"}, "properties": {"repobilityId": "83e8328d50bed543", "scanner": "scanner-primary", "fingerprint": "95402ccc0299e8dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c5d7bc412462e03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/folders/FolderCard.tsx:78"}, "properties": {"repobilityId": "faca72a8bd62cbe5", "scanner": "scanner-primary", "fingerprint": "9c5d7bc412462e03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88a2e87ca0135389", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/feedback/FeedbackDialog.tsx:410"}, "properties": {"repobilityId": "4885ba4ec9e3f0c2", "scanner": "scanner-primary", "fingerprint": "88a2e87ca0135389", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e7226728f1c641a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-7/page.tsx:200"}, "properties": {"repobilityId": "3d09760c0fb68c36", "scanner": "scanner-primary", "fingerprint": "8e7226728f1c641a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf9a1275f25e627c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/(onboarding)/onboarding/step-7/page.tsx:49"}, "properties": {"repobilityId": "4f27c50fb3475c16", "scanner": "scanner-primary", "fingerprint": "bf9a1275f25e627c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f212f88ece569f3f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-6b/page.tsx:233"}, "properties": {"repobilityId": "b91db43290803bf3", "scanner": "scanner-primary", "fingerprint": "f212f88ece569f3f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30051c279a6d6aa7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(onboarding)/onboarding/step-8/page.tsx:109"}, "properties": {"repobilityId": "fb2eed9cd6169f16", "scanner": "scanner-primary", "fingerprint": "30051c279a6d6aa7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88fc95529ad58aa7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/(onboarding)/onboarding/step-8/page.tsx:180"}, "properties": {"repobilityId": "3d6ae5298965d8c1", "scanner": "scanner-primary", "fingerprint": "88fc95529ad58aa7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9903ad0f05a97418", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/models/[id]/page.tsx:129"}, "properties": {"repobilityId": "149fea4ffea42e3a", "scanner": "scanner-primary", "fingerprint": "9903ad0f05a97418", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d7455df33cf03dcb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/providers/[id]/page.tsx:148"}, "properties": {"repobilityId": "f2d75794ab2739d3", "scanner": "scanner-primary", "fingerprint": "d7455df33cf03dcb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f80fad9df0050d6a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/agents/[id]/page.tsx:129"}, "properties": {"repobilityId": "6d967c3c24304b8f", "scanner": "scanner-primary", "fingerprint": "f80fad9df0050d6a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a2d9aff93106e1e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/workflows/[id]/page.tsx:134"}, "properties": {"repobilityId": "75c2e351ed988afc", "scanner": "scanner-primary", "fingerprint": "7a2d9aff93106e1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-949df5c72a382241", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/ai/tools/[id]/page.tsx:133"}, "properties": {"repobilityId": "71ebc0f36a9003ee", "scanner": "scanner-primary", "fingerprint": "949df5c72a382241", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82b62207711ba9f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/conversations/[id]/page.tsx:444"}, "properties": {"repobilityId": "119eaa8894f81fef", "scanner": "scanner-primary", "fingerprint": "82b62207711ba9f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2162b44558f91c15", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(admin)/admin/campaigns/[id]/usage/page.tsx:215"}, "properties": {"repobilityId": "e9c8d8ebba58e9d0", "scanner": "scanner-primary", "fingerprint": "2162b44558f91c15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8d1df307ec8bc676", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/page.tsx:752"}, "properties": {"repobilityId": "8fc63a08b3115e7c", "scanner": "scanner-primary", "fingerprint": "8d1df307ec8bc676", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a8d8dfa0ead151d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/c/[conversationId]/conversation-client.tsx:430"}, "properties": {"repobilityId": "e978f09573eae25d", "scanner": "scanner-primary", "fingerprint": "1a8d8dfa0ead151d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e174f9cda622c90d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/radars/[radarUuid]/scan-log/page.tsx:59"}, "properties": {"repobilityId": "9102e11c5143a41a", "scanner": "scanner-primary", "fingerprint": "e174f9cda622c90d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d5ff4ed00207e6d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(main)/bookmarks/page.tsx:96"}, "properties": {"repobilityId": "43dc9b6f3f6de128", "scanner": "scanner-primary", "fingerprint": "d5ff4ed00207e6d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86b96479560a0789", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/(main)/notes/[slug]/page.tsx:150"}, "properties": {"repobilityId": "10a9bed49948c4e2", "scanner": "scanner-primary", "fingerprint": "86b96479560a0789", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-be0cacd594330da9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/(main)/notes/[slug]/page.tsx:151"}, "properties": {"repobilityId": "9e179f735fc584d0", "scanner": "scanner-primary", "fingerprint": "be0cacd594330da9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d94fc04b9d43a02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/stores/authStore.ts:30"}, "properties": {"repobilityId": "6160b82fcc9a1261", "scanner": "scanner-primary", "fingerprint": "4d94fc04b9d43a02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-851951f6fe5fb1c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/hooks/useOnboarding.ts:78"}, "properties": {"repobilityId": "813dc1205c2a2cb8", "scanner": "scanner-primary", "fingerprint": "851951f6fe5fb1c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ac99f3544e4b7d3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/hooks/useCaseMentionTooltips.ts:193"}, "properties": {"repobilityId": "4fce9501050168f0", "scanner": "scanner-primary", "fingerprint": "2ac99f3544e4b7d3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5c913ca64ae252ad", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseBlogView.tsx:321"}, "properties": {"repobilityId": "521944ffee6a0073", "scanner": "scanner-primary", "fingerprint": "5c913ca64ae252ad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/cases/CaseBlogView.tsx"}, "region": {"startLine": 321}}}]}, {"ruleId": "scanner-f307facc420fa1bf", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseDocumentView.tsx:204"}, "properties": {"repobilityId": "e25c057638bd236f", "scanner": "scanner-primary", "fingerprint": "f307facc420fa1bf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/cases/CaseDocumentView.tsx"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-83e55b708aeb93d8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/FullReportDocumentView.tsx:147"}, "properties": {"repobilityId": "1fe035c67cb34554", "scanner": "scanner-primary", "fingerprint": "83e55b708aeb93d8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/cases/FullReportDocumentView.tsx"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-c8f291e6a6e75342", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/cases/CaseBodyCard.tsx:41"}, "properties": {"repobilityId": "d51196ee3897ecd4", "scanner": "scanner-primary", "fingerprint": "c8f291e6a6e75342", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/cases/CaseBodyCard.tsx"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-83d80c935b015c7a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/statutes-v2/AknElementRenderer.tsx:155"}, "properties": {"repobilityId": "9c6cb5ac55d8956a", "scanner": "scanner-primary", "fingerprint": "83d80c935b015c7a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/statutes-v2/AknElementRenderer.tsx"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-038f95f510f35674", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/ui/chart.tsx:83"}, "properties": {"repobilityId": "c41c7626c87bbabe", "scanner": "scanner-primary", "fingerprint": "038f95f510f35674", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ui/chart.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-a2780c54c5dc5e4d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/notes/NoteContent.tsx:67"}, "properties": {"repobilityId": "3219540759a78a86", "scanner": "scanner-primary", "fingerprint": "a2780c54c5dc5e4d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/notes/NoteContent.tsx"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-e22865556b634c31", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in lib/hooks/useCaseMentionTooltips.ts:78"}, "properties": {"repobilityId": "79553af11ff6a0c9", "scanner": "scanner-primary", "fingerprint": "e22865556b634c31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/hooks/useCaseMentionTooltips.ts"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-28646af5e1b586b5", "level": "note", "message": {"text": "Very large file: app/(main)/c/[conversationId]/conversation-client.tsx (1399 lines)"}, "properties": {"repobilityId": "86a718c63d350739", "scanner": "scanner-primary", "fingerprint": "28646af5e1b586b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7bc2f2ffe77faa06", "level": "note", "message": {"text": "Very large file: lib/hooks/useChatStream.ts (1725 lines)"}, "properties": {"repobilityId": "1f4cd4f412634afa", "scanner": "scanner-primary", "fingerprint": "7bc2f2ffe77faa06", "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": "11d1c7d53815bf89", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "436060efcabfc10e", "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": "118d0136014e1adf", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "19e3bfb84772600a", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "bbc2c2960f92f1e4", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "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": "fc2ec4ca546c4194", "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": "69d08e8320edcb12", "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": "952b8673878cc634", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dfc304a81d53dd00", "level": "none", "message": {"text": "Commented-code block (5 lines) in types/chat.ts:456"}, "properties": {"repobilityId": "206063654aae2448", "scanner": "scanner-primary", "fingerprint": "dfc304a81d53dd00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-270cd63dbeebd76a", "level": "none", "message": {"text": "Commented-code block (5 lines) in types/admin-sponsors.ts:1"}, "properties": {"repobilityId": "f0aa1f587c55267a", "scanner": "scanner-primary", "fingerprint": "270cd63dbeebd76a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f21adbcb9d3886b", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/radar/RadarInboxView.tsx:105"}, "properties": {"repobilityId": "897bc464fd675197", "scanner": "scanner-primary", "fingerprint": "4f21adbcb9d3886b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c94c3e59f491ca7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/radar/RadarForm.tsx:143"}, "properties": {"repobilityId": "97cb9e9dd1611522", "scanner": "scanner-primary", "fingerprint": "c94c3e59f491ca7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed07d1eee43c2226", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/chat/jurisdiction-flag.tsx:8"}, "properties": {"repobilityId": "07d5c17fb4ae94ce", "scanner": "scanner-primary", "fingerprint": "ed07d1eee43c2226", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fff53fad63daad6", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/utils/transform-api-messages.ts:23"}, "properties": {"repobilityId": "eff476def3beb151", "scanner": "scanner-primary", "fingerprint": "0fff53fad63daad6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3634845bb8918f9d", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/hooks/useChatStream.ts:773"}, "properties": {"repobilityId": "e0c456374c796a13", "scanner": "scanner-primary", "fingerprint": "3634845bb8918f9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-baf806d26653bfb8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/hooks/useCountries.ts:20"}, "properties": {"repobilityId": "561c098671147bc6", "scanner": "scanner-primary", "fingerprint": "baf806d26653bfb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-003a8b005c19bfda", "level": "note", "message": {"text": "Unused endpoint: POST /auth/guest"}, "properties": {"repobilityId": "d21358ec116d643e", "scanner": "scanner-primary", "fingerprint": "003a8b005c19bfda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}