{"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-479d4a12d15c54ef", "name": "Stray `console.log` in TS/JS \u2014 client/utils/navigationHelpers.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/utils/navigationHelpers.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-769d9abdab54f0c4", "name": "Stray `console.log` in TS/JS \u2014 client/utils/compressPdf.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/utils/compressPdf.ts:20"}, "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-13b55ea9aa645004", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/SearchableDropdown.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/SearchableDropdown.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f435c8de83195f28", "name": "Stray `console.log` in TS/JS \u2014 client/components/SaveForLater.tsx:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/SaveForLater.tsx:10"}, "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-a81ce8d606427e19", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/FileUpload.tsx:390", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/FileUpload.tsx:390"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2f00c3100bbbf00", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/DocumentPricingCard.tsx:26", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/DocumentPricingCard.tsx:26"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c53e0650226cfe5e", "name": "Icon-only button without accessible name \u2014 client/components/CorrectionReasonModal.tsx:117", "shortDescription": {"text": "Icon-only button without accessible name \u2014 client/components/CorrectionReasonModal.tsx:117"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-725cf862b293b109", "name": "Stray `console.log` in TS/JS \u2014 client/components/upload/UploadStep1.tsx:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/upload/UploadStep1.tsx: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-c913adc58317a7fd", "name": "Stray `console.log` in TS/JS \u2014 client/components/quote/Step3Contact.tsx:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/quote/Step3Contact.tsx:145"}, "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-3d5ede5f7f5b448e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/quote/Step1Upload.tsx:758", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/quote/Step1Upload.tsx:758"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48e972217deabe10", "name": "Stray `console.log` in TS/JS \u2014 client/components/quote/Step4ReviewCheckout.tsx:419", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/quote/Step4ReviewCheckout.tsx:419"}, "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-172e8beb4f5557aa", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/SearchableSelect.tsx:346", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/SearchableSelect.tsx:346"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e4a616531efc91e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/AnalyzeDocumentModal.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/AnalyzeDocumentModal.tsx:194"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f99f7a90e9cd894f", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/EditableDocumentAnalysisPanel.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/EditableDocumentAnalysisPanel.tsx:445"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2fdbf709935c0cf7", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/OcrResultsModal.tsx:3474", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/OcrResultsModal.tsx:3474"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd355f03dacd3c81", "name": "Stray `console.log` in TS/JS \u2014 client/components/shared/analysis/OcrResultsModal.tsx:903", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/analysis/OcrResultsModal.tsx:903"}, "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-2071a565d7940315", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/DocumentAnalysisPanel.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/DocumentAnalysisPanel.tsx:124"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-614538c51d6f8cfa", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/ManualEntryModal.tsx:532", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/ManualEntryModal.tsx:532"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-352410c78404b504", "name": "Stray `console.log` in TS/JS \u2014 client/components/shared/analysis/ManualEntryModal.tsx:332", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/analysis/ManualEntryModal.tsx:332"}, "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-a1a6bc296e7c97a1", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-flow/components/UploadZone.tsx:14", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-flow/components/UploadZone.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-61ed18443b7d8dd3", "name": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-flow/hooks/useDocumentFlow.ts:197", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-flow/hooks/useDocumentFlow.ts:197"}, "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-a59a9f61b5680dab", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-groups/DocumentGroupEditor.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-groups/DocumentGroupEditor.tsx:411"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8301daa7bfea4dbb", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-groups/UnassignedItemsPool.tsx:10", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-groups/UnassignedItemsPool.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-bfb13d0f48d517b9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/FileCard.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/FileCard.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-637f8991d1881807", "name": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/FileCard.tsx:373", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/FileCard.tsx:373"}, "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-a3d860b85ae97663", "name": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/FileCard.tsx:374", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/FileCard.tsx:374"}, "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-78573b0016404078", "name": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/FileListWithGroups.tsx:103", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/FileListWithGroups.tsx:103"}, "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-3a02ccd63d7ab586", "name": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/FileListWithGroups.tsx:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/FileListWithGroups.tsx:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-024b05ab654b3be8", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:954"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c8d0a0c35968a2ed", "name": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:738", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:738"}, "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-1562eec97847b2a3", "name": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:739", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:739"}, "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-ace1dd432635de37", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/DocumentGroupsSummary.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/DocumentGroupsSummary.tsx:149"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13f4afbe2a23abcb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/components/ui/chart.tsx:79", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/components/ui/chart.tsx:79"}, "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-8b0c64c1097c43a2", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/customer/ImpersonationBanner.tsx:28", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/customer/ImpersonationBanner.tsx:28"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed98c45e725fe94e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/customer/CustomerUploadWidget.tsx:364", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/customer/CustomerUploadWidget.tsx:364"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd0c514df8c0e324", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/FileListPanel.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/FileListPanel.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-d14ec7fbbcbf8848", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/InsertPagesDialog.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/InsertPagesDialog.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a8d7139dc30d58a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/AnnotationSidebar.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/AnnotationSidebar.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-33daddad93485f49", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/FolderTree.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/FolderTree.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-ab3a64ad62b29148", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderUploadModal.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderUploadModal.tsx:185"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcfbadaaa510a1be", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderFinanceSection.tsx:593", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderFinanceSection.tsx:593"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfcd904b68d38686", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/EditOrderModal.tsx:598", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/EditOrderModal.tsx:598"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-239124bc917efe8b", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OcrAnalysisModal.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OcrAnalysisModal.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79b3a0a40810c047", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/QuoteActivityFeed.tsx:392", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/QuoteActivityFeed.tsx:392"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9eeca9dd31434438", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/WorkflowPipeline.tsx:2754", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/WorkflowPipeline.tsx:2754"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ce6c19bdcf1d215", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/CustomerFilesTab.tsx:390", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/CustomerFilesTab.tsx:390"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a912b27489ec3b21", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/components/admin/VendorActivationEmailModal.tsx:321", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/components/admin/VendorActivationEmailModal.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-069ad69eb231d887", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/SplitStepModal.tsx:353", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/SplitStepModal.tsx:353"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bec9e8a16014efba", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OriginalsModal.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OriginalsModal.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-4f017fd4370493d2", "name": "Icon-only button without accessible name \u2014 client/components/admin/UnassignVendorModal.tsx:100", "shortDescription": {"text": "Icon-only button without accessible name \u2014 client/components/admin/UnassignVendorModal.tsx:100"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5db03f2975ca6f07", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderCommunicationsTab.tsx:585", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderCommunicationsTab.tsx:585"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68f6e66eb0cfb668", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderFinanceTab.tsx:677", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderFinanceTab.tsx:677"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d167b83a14cf1cee", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/VendorActivationDripProgress.tsx:272", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/VendorActivationDripProgress.tsx:272"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2972325a52ed3039", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/NotificationProvider.tsx:339", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/NotificationProvider.tsx:339"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c663b67bc0081456", "name": "Stray `console.log` in TS/JS \u2014 client/components/admin/NotificationProvider.tsx:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/admin/NotificationProvider.tsx:45"}, "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-8d2ec8f921000f78", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/CustomerRatesTab.tsx:625", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/CustomerRatesTab.tsx:625"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9410b603c5ae9f3f", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderInvoiceCard.tsx:800", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderInvoiceCard.tsx:800"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e93a8bd0fef8955f", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/EditDocumentModal.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/EditDocumentModal.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6fab27449382304e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/DocumentPreviewModal.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/DocumentPreviewModal.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-0632d9d223b76b7e", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/MessageCustomerModal.tsx:381", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/MessageCustomerModal.tsx:381"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce235f0916653d3a", "name": "Stray `console.log` in TS/JS \u2014 client/components/admin/MessageCustomerModal.tsx:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/admin/MessageCustomerModal.tsx:152"}, "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-f721e52a3927faa2", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/AdminLayout.tsx:633", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/AdminLayout.tsx:633"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c9ad39f3f9e4609", "name": "Stray `console.log` in TS/JS \u2014 client/components/steps/Step1Upload.tsx:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/steps/Step1Upload.tsx: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-b1d7ab50d37c21a4", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/messaging/MessageComposer.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/messaging/MessageComposer.tsx:204"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-975d7f07a5d61f1c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/messaging/MessagePanel.tsx:293", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/messaging/MessagePanel.tsx:293"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1045072f15b7382b", "name": "Stray `console.log` in TS/JS \u2014 client/components/messaging/MessagePanel.tsx:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/components/messaging/MessagePanel.tsx:40"}, "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-198d585764551d5d", "name": "`truncate` class without `title=` for hover reveal \u2014 client/components/layouts/CustomerLayout.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/layouts/CustomerLayout.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-2665f4201eb51efb", "name": "Stray `console.log` in TS/JS \u2014 client/lib/supabase.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/lib/supabase.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d782e7af09d1849", "name": "Stray `console.log` in TS/JS \u2014 client/pages/quote/QuoteContinuePage.tsx:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/quote/QuoteContinuePage.tsx:123"}, "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-c91af6a7d857b447", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/quote/QuoteRevisionPage.tsx:324", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/quote/QuoteRevisionPage.tsx:324"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb1de2bf57a94d7f", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerUpload.tsx:406", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerUpload.tsx:406"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1da42bd537ec6dd3", "name": "Stray `console.log` in TS/JS \u2014 client/pages/customer/CustomerMessages.tsx:201", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/customer/CustomerMessages.tsx:201"}, "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-04247293ea54123b", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerDashboard.tsx:193", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerDashboard.tsx:193"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2b43cd1a8449783", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerDocuments.tsx:336", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerDocuments.tsx:336"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cc120809253b855", "name": "\"active\" state uses light bg in a dark theme \u2014 client/pages/admin/AdminIsoQuizzes.tsx:309", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 client/pages/admin/AdminIsoQuizzes.tsx:309"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a6ad15b2aa469b3", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/PublicSubmissionsPage.tsx:726", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/PublicSubmissionsPage.tsx:726"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f099620af6e7b5d9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminCreateOrder.tsx:2187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminCreateOrder.tsx:2187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53b64c871c6ee566", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminDashboard.tsx:492", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminDashboard.tsx:492"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c0ea981bbde2582", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/FastQuoteCreate.tsx:1725", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/FastQuoteCreate.tsx:1725"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-144436e7f044bf23", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminInvoiceDetail.tsx:859", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminInvoiceDetail.tsx:859"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6bcb928e5add8a4", "name": "Stray `console.log` in TS/JS \u2014 client/pages/admin/Login.tsx:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/Login.tsx:58"}, "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-cff59103436c9405", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminProjectDetail.tsx:619", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminProjectDetail.tsx:619"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ccebfa5d543cbb9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminOrderDetail.tsx:2922", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminOrderDetail.tsx:2922"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb47862798bddd6c", "name": "Stray `console.log` in TS/JS \u2014 client/pages/admin/AdminOrderDetail.tsx:936", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/AdminOrderDetail.tsx:936"}, "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-9687a88d7b806ba6", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminQuoteDetail.tsx:3954", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminQuoteDetail.tsx:3954"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c045dc69c1d58e30", "name": "Stray `console.log` in TS/JS \u2014 client/pages/admin/AdminQuoteDetail.tsx:1193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/AdminQuoteDetail.tsx:1193"}, "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-249beb358e793881", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/PdfToWordPage.tsx:731", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/PdfToWordPage.tsx:731"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d2abff546471424", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminMessages.tsx:653", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminMessages.tsx:653"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-795f7610f022f92c", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminSmsInbox.tsx:175", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminSmsInbox.tsx:175"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1def64bd4ebcad67", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminOrdersList.tsx:1431", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminOrdersList.tsx:1431"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7242ee22cb9e8ea3", "name": "TODO/FIXME marker in shipping code \u2014 client/pages/admin/AdminOrdersList.tsx:1007", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 client/pages/admin/AdminOrdersList.tsx:1007"}, "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-b3a8c31c61188721", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/RecruitmentDetail.tsx:1634", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/RecruitmentDetail.tsx:1634"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-930bc41cbec37f3d", "name": "Stray `console.log` in TS/JS \u2014 client/pages/admin/ResetPassword.tsx:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/ResetPassword.tsx:45"}, "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-0ac350e1072fff06", "name": "Icon-only button without accessible name \u2014 client/pages/admin/settings/AIPromptsSettings.tsx:247", "shortDescription": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/settings/AIPromptsSettings.tsx:247"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b5757fce6e3d9b9", "name": "Stray `console.log` in TS/JS \u2014 client/pages/admin/settings/LanguageTiersSettings.tsx:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/settings/LanguageTiersSettings.tsx:69"}, "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-8271ee25c98662f4", "name": "Icon-only button without accessible name \u2014 client/pages/admin/settings/HolidaysSettings.tsx:474", "shortDescription": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/settings/HolidaysSettings.tsx:474"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a5d8d51d4dc244e", "name": "Icon-only button without accessible name \u2014 client/pages/admin/settings/TaxRatesSettings.tsx:498", "shortDescription": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/settings/TaxRatesSettings.tsx:498"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7809e9e2e54f614", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/settings/FileCategoriesSettings.tsx:350", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/settings/FileCategoriesSettings.tsx:350"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1c41af4b960af57", "name": "Icon-only button without accessible name \u2014 client/pages/admin/transcription/TranscriptionJobDetail.tsx:1118", "shortDescription": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/transcription/TranscriptionJobDetail.tsx:1118"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c72dbdb4293fa2a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionJobDetail.tsx:782", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionJobDetail.tsx:782"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-974bea0f96490c31", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionDashboard.tsx:618", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionDashboard.tsx:618"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41e84acff4714b39", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionVendors.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionVendors.tsx:265"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-300adf990bba8d93", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/trainings/TrainingAssign.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/trainings/TrainingAssign.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-b80cbed9a2fe1936", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 client/pages/admin/vendor-detail/VendorNdaTab.tsx:485", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/pages/admin/vendor-detail/VendorNdaTab.tsx:485"}, "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-22c32be677c61bc9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/IsoAssessmentSection.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/IsoAssessmentSection.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-3ead3700567e668f", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/VendorDocumentsTab.tsx:315", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/VendorDocumentsTab.tsx:315"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d21b007831e9e33a", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/VendorReferencesSection.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/VendorReferencesSection.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52f744c24fcec6aa", "name": "Icon-only button without accessible name \u2014 client/pages/admin/vendor-detail/VendorQmsTab.tsx:309", "shortDescription": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/vendor-detail/VendorQmsTab.tsx:309"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12a6e41ac725f164", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/invoices/CreateInvoice.tsx:482", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/invoices/CreateInvoice.tsx:482"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71ddb7c05d1fcbf9", "name": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/invoices/components/InvoiceDateFilter.tsx:260", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/invoices/components/InvoiceDateFilter.tsx:260"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6747e96191a8fe87", "name": "Stray `console.log` in TS/JS \u2014 client/hooks/useAdminAuth.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useAdminAuth.ts:79"}, "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-db62b2a865ecd248", "name": "Stray `console.log` in TS/JS \u2014 client/hooks/useDocumentProcessing.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useDocumentProcessing.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f981b0d7b547c1db", "name": "Stray `console.log` in TS/JS \u2014 client/hooks/useQuotePricing.ts:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useQuotePricing.ts: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-5ee240a5c643b379", "name": "TODO/FIXME marker in shipping code \u2014 client/hooks/useSupabase.ts:169", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 client/hooks/useSupabase.ts:169"}, "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-6941e05f630dc4ab", "name": "Stray `console.log` in TS/JS \u2014 client/hooks/useSupabase.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useSupabase.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3726c8993d11a35d", "name": "Stray `console.log` in TS/JS \u2014 client/context/StaffAuthContext.tsx:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/context/StaffAuthContext.tsx:56"}, "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-bda0e47ac3a0828a", "name": "Stray `console.log` in TS/JS \u2014 client/context/UploadContext.tsx:219", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/context/UploadContext.tsx:219"}, "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-2da170e88ceefb51", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/staff-deliver-step/index.ts:140", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/staff-deliver-step/index.ts:140"}, "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-6f6634240909a9e4", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-customer-quote-detail/index.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-customer-quote-detail/index.ts:61"}, "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-c776be0718706002", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-process-mistral/index.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-process-mistral/index.ts:76"}, "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-c1b30a0f50da67c5", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/rc-make-call/index.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/rc-make-call/index.ts:85"}, "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-0545865a8f157694", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-set-password/index.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-set-password/index.ts:37"}, "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-465bb730c8a9bdac", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-vendor-detail/index.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-vendor-detail/index.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-291816c087d1a5ca", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/manage-vendor-payables/index.ts:268", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/manage-vendor-payables/index.ts:268"}, "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-f6ebe15c70cb0282", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-staff-quote-file/index.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-staff-quote-file/index.ts:51"}, "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-012b4c43d1433067", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-batch-results/index.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-batch-results/index.ts:84"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-808eb2bfd5a3c24f", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/admin-impersonate-vendor/index.ts:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/admin-impersonate-vendor/index.ts:129"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e7fc91b3bde17a99", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/admin-impersonate-customer/index.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/admin-impersonate-customer/index.ts:108"}, "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-187bb2f5fec6e620", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-customer-message/index.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-customer-message/index.ts:75"}, "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-11654d1e272f954b", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/assign-order-workflow/index.ts:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/assign-order-workflow/index.ts:146"}, "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-dafe830bfbc73208", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/secure-upload-otp-send/index.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/secure-upload-otp-send/index.ts:162"}, "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-20f8e6e9aa2d2930", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyse-ocr-next/index.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyse-ocr-next/index.ts:111"}, "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-0186ae710e635b21", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-acceptance-reminders/index.ts:242", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-acceptance-reminders/index.ts:242"}, "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-337321944c6ea346", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-signed-urls/index.ts:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-signed-urls/index.ts:86"}, "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-3edc21eda5c760be", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-invoice-email/index.ts:347", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-invoice-email/index.ts:347"}, "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-7c4b205f7d62381d", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-email/index.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-email/index.ts:62"}, "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-9ba8f23b13640161", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/pdf-to-word-mistral/index.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/pdf-to-word-mistral/index.ts:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-734df6c897efc200", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/provision-tm-job/index.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/provision-tm-job/index.ts:154"}, "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-62d055f90cd17f97", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyse-ocr-batch/index.ts:175", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyse-ocr-batch/index.ts:175"}, "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-6a77e2c9a713ab85", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:128"}, "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-a57cb57be0e823c4", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/scan-public-submission/index.ts:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/scan-public-submission/index.ts:166"}, "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-def0ec07c725438d", "name": "TODO/FIXME marker in shipping code \u2014 supabase/functions/process-quote-documents/index.ts:384", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 supabase/functions/process-quote-documents/index.ts:384"}, "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-f29247a11b922140", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-quote-documents/index.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-quote-documents/index.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d30a0f14ba73bb1", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-auth-otp-send/index.ts:236", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-auth-otp-send/index.ts:236"}, "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-cf321ccddaa7b5b1", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-vendor/index.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-vendor/index.ts:58"}, "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-1f5fb64a7429c83d", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/review-draft-file/index.ts:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/review-draft-file/index.ts:146"}, "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-f5548079f211c267", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-batch-create/index.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-batch-create/index.ts:106"}, "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-bb11baa241352e9c", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-customer-order-detail/index.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-customer-order-detail/index.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-974c297b66dce939", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-complete/index.ts:232", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-complete/index.ts:232"}, "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-7cc281e4be9634c0", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-invitation-reminder/index.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-invitation-reminder/index.ts:60"}, "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-4b28eb0d207398ee", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/transcription-process/index.ts:271", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/transcription-process/index.ts:271"}, "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-01f3c51a12ac7423", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-vendor-payment-info/index.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-vendor-payment-info/index.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7cf6e034cd3e93f", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/pdf-to-word-convert/index.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/pdf-to-word-convert/index.ts:70"}, "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-dac9b22189fd8336", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-vendor-rates/index.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-vendor-rates/index.ts:37"}, "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-a8ca7a45ea72b42d", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/handle-stripe-invoice-payment/index.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/handle-stripe-invoice-payment/index.ts:126"}, "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-e73f415a40045258", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-invoice-pdf/index.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-invoice-pdf/index.ts:85"}, "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-a3c2e1adaa6a7526", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/verify-customer-login-otp/index.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/verify-customer-login-otp/index.ts:56"}, "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-c5a79167c5d8ff02", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-deposit-reminder/index.ts:251", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-deposit-reminder/index.ts:251"}, "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-f21a86b2467853b1", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-start/index.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-start/index.ts:92"}, "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-d68bc5aa49f507fd", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-customer-login-otp/index.ts:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-customer-login-otp/index.ts:127"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09357462a300e711", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-staff-message/index.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-staff-message/index.ts:65"}, "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-29d26ec97eb42350", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-process-next/index.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-process-next/index.ts:59"}, "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-4e55d1410ada2013", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/rc-webhook/index.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/rc-webhook/index.ts:47"}, "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-1c91189267029010", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-payment-link/index.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-payment-link/index.ts:45"}, "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-1a3eff9fceb6800f", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/secure-upload-otp-verify/index.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/secure-upload-otp-verify/index.ts:125"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e9b5c2440fe4666", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-deposit-payment-link/index.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-deposit-payment-link/index.ts:64"}, "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-5a163d66cccc0c95", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-inbound-email/index.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-inbound-email/index.ts:67"}, "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-9e8aa65ec8ced667", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/notify-staff-assignment.ts:203", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/notify-staff-assignment.ts:203"}, "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-2080ce54836af3f1", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/notify-vendor-assignment.ts:371", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/notify-vendor-assignment.ts:371"}, "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-602b47f6540b3f30", "name": "Stray `console.log` in TS/JS \u2014 server/node-build.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/node-build.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fae7e97edd31907a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/lint-migrations-rls.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/lint-migrations-rls.ts:90"}, "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-61957c7d69b4aa2a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/rls-audit.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/rls-audit.ts:42"}, "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-3c5171fef4d80aa4", "name": "Stray `console.log` in TS/JS \u2014 services/audio-extractor/index.js:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/audio-extractor/index.js:91"}, "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-1b4dea0e71777804", "name": "Dockerfile runs as root: services/audio-extractor/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/audio-extractor/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77f0ce0edab6e384", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac136b8bb4e115af", "name": "Insecure pattern 'dangerous_innerhtml' in client/components/ui/chart.tsx:79", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/components/ui/chart.tsx:79"}, "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-7621cbc4ac9fb26e", "name": "Insecure pattern 'dangerous_innerhtml' in client/components/admin/VendorActivationEmailModal.tsx:321", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/components/admin/VendorActivationEmailModal.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-eaa3c130b0fd1673", "name": "Insecure pattern 'local_storage_auth_token' in client/pages/admin/Login.tsx:211", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in client/pages/admin/Login.tsx:211"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b40f9d52238e74a", "name": "Insecure pattern 'insert_adjacent_html' in client/pages/admin/trainings/TrainingLesson.tsx:163", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in client/pages/admin/trainings/TrainingLesson.tsx:163"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6df18b65795ab91", "name": "Insecure pattern 'dangerous_innerhtml' in client/pages/admin/vendor-detail/VendorNdaTab.tsx:485", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in client/pages/admin/vendor-detail/VendorNdaTab.tsx:485"}, "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-212bb63141bde21f", "name": "Insecure pattern 'local_storage_auth_token' in client/hooks/useAdminAuth.ts:131", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in client/hooks/useAdminAuth.ts:131"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89533d9da3489f6a", "name": "Insecure pattern 'local_storage_auth_token' in client/context/StaffAuthContext.tsx:178", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in client/context/StaffAuthContext.tsx:178"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7cb7b949cecb9bb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/staff-deliver-step/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/staff-deliver-step/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3dbf03bdec19944c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-step-draft-to-customer/index.ts:38", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-step-draft-to-customer/index.ts:38"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4229ef559c7a8449", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-final-deliverable/index.ts:39", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-final-deliverable/index.ts:39"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-34fec16333d73264", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-exchange-rates/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-exchange-rates/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9153115e23dc948", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-quote-detail/index.ts:28", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-quote-detail/index.ts:28"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b9de6135a6d69d3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-payment-email/index.ts:43", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-payment-email/index.ts:43"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a9d3801935621d58", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/cancel-order/index.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/cancel-order/index.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-556086a50de9de4e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-process-mistral/index.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-process-mistral/index.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15a3ea5f0525a2ea", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/update-workflow-step/index.ts:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-workflow-step/index.ts:34"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fbaa678b485f4baf", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/customer-resolve-impersonation/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/customer-resolve-impersonation/index.ts:19"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9b1c7bd64b0b034b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-set-password/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-set-password/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b2be51a982a6d6fe", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-vendor-detail/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-vendor-detail/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6de462028c512c48", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-oauth/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-oauth/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-051f938bd726a37d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-record-qualification/index.ts:21", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-record-qualification/index.ts:21"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c3192e8ef29be0c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-orders/index.ts:38", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-orders/index.ts:38"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a34e364b2132d8dd", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-negotiate-counter/index.ts:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-negotiate-counter/index.ts:26"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-893ca596f0b0b344", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-vendor-payables/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-vendor-payables/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6782f0630192f43c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-staff-quote-file/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-staff-quote-file/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-59c62efeefb3c869", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-activation-email-cron/index.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-activation-email-cron/index.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7ef63721941af71", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-vendor-payments/index.ts:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-vendor-payments/index.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-78c520264f1c2572", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-files/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-files/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f87c059a0aeecac", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-batch-results/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-batch-results/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc85fdcd664cd204", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/cal-integrations/index.ts:52", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/cal-integrations/index.ts:52"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7440b2133120c861", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-customer-order-confirmed/index.ts:54", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-customer-order-confirmed/index.ts:54"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d918c7f36de9a4f3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/update-quote-from-analysis/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-quote-from-analysis/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac716d676904b427", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-vendor-instructions-changed/index.ts:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-vendor-instructions-changed/index.ts:15"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d16d5c5ecc7538e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/recalculate-quote-pricing/index.ts:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/recalculate-quote-pricing/index.ts:26"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c83835a797fa569c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-impersonate-vendor/index.ts:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-impersonate-vendor/index.ts:23"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01d11ae54b3119e9", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-impersonate-customer/index.ts:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-impersonate-customer/index.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d25fdfc4e2e347a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-send-activation-emails/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-send-activation-emails/index.ts:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-accd53da85811789", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-customer-message/index.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-customer-message/index.ts:31"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a7b0cbc6fcb166a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-staff-tasks/index.ts:21", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-staff-tasks/index.ts:21"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cfe79375fbde8204", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-order-workflow/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-order-workflow/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b12ece248c92c78e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-staff-quote-file/index.ts:32", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-staff-quote-file/index.ts:32"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4270d469bf5678e1", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-quote-pdf/index.ts:83", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-quote-pdf/index.ts:83"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9e13089f37d64ed", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/assign-order-workflow/index.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/assign-order-workflow/index.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07039f6fd02771fa", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-ar-aging/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-ar-aging/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5c43c110387e067", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-partner-code/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-partner-code/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-abd26e92ba661884", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/secure-upload-otp-send/index.ts:41", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/secure-upload-otp-send/index.ts:41"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ba38cc5cff17434", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/process-invoice-queue/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-invoice-queue/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d66877680202fc3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/void-vendor-payable/index.ts:24", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/void-vendor-payable/index.ts:24"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3718fb30ab4d308d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/apply-affidavit-and-finalize/index.ts:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/apply-affidavit-and-finalize/index.ts:34"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ab070bcf8a582e4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/analyse-ocr-next/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analyse-ocr-next/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7fc327c6e8998b7e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-acceptance-reminders/index.ts:51", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-acceptance-reminders/index.ts:51"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7b24cffbf2b11a17", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-doc-request-status-sweep/index.ts:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-doc-request-status-sweep/index.ts:26"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02ac53dbbe92f54b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-quotes/index.ts:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-quotes/index.ts:34"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-328e03040cc97a29", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-signed-urls/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-signed-urls/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b25486890ee7bca6", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-invoice-email/index.ts:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-invoice-email/index.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ca0f1ce9777b580", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-email/index.ts:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-email/index.ts:10"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d454b831261f88bd", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/cvp-suggest-vendor-rate/index.ts:41", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/cvp-suggest-vendor-rate/index.ts:41"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f833aa381acfa25", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/pdf-to-word-mistral/index.ts:45", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/pdf-to-word-mistral/index.ts:45"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e881e2ec75a9487", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-doc-request-reminder/index.ts:50", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-doc-request-reminder/index.ts:50"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9b84edadf98464f1", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/provision-tm-job/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/provision-tm-job/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-78cbe418ac52dadd", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/analyse-ocr-batch/index.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analyse-ocr-batch/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-22140e3e5139f4c4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-webhook/index.ts:41", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-webhook/index.ts:41"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e9915219bc22bd33", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/scan-public-submission/index.ts:27", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/scan-public-submission/index.ts:27"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac755e862e80ba34", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/process-quote-documents/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-quote-documents/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15bd1b8be5bfc3a7", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/crm-create-order/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/crm-create-order/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c5b21da147c48fa", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/apostille-consult-sms-reminders/index.ts:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/apostille-consult-sms-reminders/index.ts:34"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc858b5699346455", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-auth-otp-send/index.ts:39", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-auth-otp-send/index.ts:39"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f41bd8c421d6c55a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-brevo-email-events/index.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-brevo-email-events/index.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2820b950fd89c69", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/qms-auto-qualify/index.ts:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/qms-auto-qualify/index.ts:36"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4adade5042af2536", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/create-vendor/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-vendor/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46f3d151a6024625", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/review-draft-file/index.ts:61", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/review-draft-file/index.ts:61"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-db472ed30beed424", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-batch-create/index.ts:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-batch-create/index.ts:23"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58394115ed727b8b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-create-order/index.ts:17", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-create-order/index.ts:17"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19806828909126c7", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/check-open-issues/index.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/check-open-issues/index.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-24d1d34198b55218", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-order-detail/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-order-detail/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c76b1e21336f7fb2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/find-matching-vendors/index.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/find-matching-vendors/index.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b626bf4d21276c9f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-step-draft-pdf/index.ts:21", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-step-draft-pdf/index.ts:21"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a322552d11a4eb4d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-complete/index.ts:53", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-complete/index.ts:53"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44a3de3409a3ae40", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/recover-quote-by-token/index.ts:37", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/recover-quote-by-token/index.ts:37"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9264324093bf05a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-invitation-reminder/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-invitation-reminder/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c77e4ad9e4c88523", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-update-profile/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-update-profile/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1bf563540be94eea", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-customer-payments/index.ts:24", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-customer-payments/index.ts:24"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d06cb828f238a5f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-receivables/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-receivables/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b64faeaa80ab2647", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-dashboard/index.ts:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-dashboard/index.ts:26"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e81e053b72b40557", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/update-vendor-payment-info/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-vendor-payment-info/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-99fba04c42ebcb42", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-customer-quote-ack/index.ts:45", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-customer-quote-ack/index.ts:45"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a01f93831bb07974", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/pdf-to-word-convert/index.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/pdf-to-word-convert/index.ts:22"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbb6efb302a85015", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-deadline-reminders/index.ts:47", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-deadline-reminders/index.ts:47"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-97076ce6f96ebe74", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/update-vendor-rates/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-vendor-rates/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00aea7ec0f0e0655", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/handle-stripe-invoice-payment/index.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/handle-stripe-invoice-payment/index.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb6738057a40cf11", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-invoice-pdf/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-invoice-pdf/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-728ca01926ab9a7e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/verify-customer-login-otp/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/verify-customer-login-otp/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a406811579093092", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-send-cv-nda-reminder/index.ts:38", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-send-cv-nda-reminder/index.ts:38"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dbfce9d9ea9daaeb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-tax-report/index.ts:33", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-tax-report/index.ts:33"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-37dc9a60ab393084", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-deposit-reminder/index.ts:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-deposit-reminder/index.ts:36"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4778695cdfd9dd0c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/list-vendor-qms/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-vendor-qms/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-146163ebd5aafd64", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-manage-customer/index.ts:35", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-manage-customer/index.ts:35"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c965ad3660365cbb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-order-instructions/index.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-order-instructions/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-76fd28cd0db677b2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/void-customer-invoice/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/void-customer-invoice/index.ts:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3402c3e0e8cfa1c3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/staff-submit-bug-report/index.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/staff-submit-bug-report/index.ts:22"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d23bf43f8bbfdb2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-sops/index.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-sops/index.ts:22"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ed3cad60b3887be", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/qms-request-documents-bulk/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/qms-request-documents-bulk/index.ts:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-96ef2089e2feeb6d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/negotiation-hitl-reminder/index.ts:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/negotiation-hitl-reminder/index.ts:36"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-052f6f9dab4ce598", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-staff-new-lead/index.ts:54", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-staff-new-lead/index.ts:54"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-923a089863abc1f5", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-start/index.ts:40", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-start/index.ts:40"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16fbf16646ff0ab9", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-customer-login-otp/index.ts:37", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-customer-login-otp/index.ts:37"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a92ca4a4d0b974f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-quote-link-email/index.ts:44", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-quote-link-email/index.ts:44"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f024e408f4c8fc5", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/create-checkout-session/index.ts:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-checkout-session/index.ts:23"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9da690b8c7fc73c9", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/customer-approve-quote-ar/index.ts:27", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/customer-approve-quote-ar/index.ts:27"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0e0ff038ee237819", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-files/index.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-files/index.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e10c47898bae49eb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-sync/index.ts:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-sync/index.ts:23"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1c91b7d1fb320fdd", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/promote-step-delivery-to-draft/index.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/promote-step-delivery-to-draft/index.ts:31"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a053c7ac7617f29", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-staff-competence/index.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-staff-competence/index.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-771942e550b31030", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-quote-token/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-quote-token/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a227497aaeaf12e0", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-staff-message/index.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-staff-message/index.ts:31"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1253133411fa29af", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/create-fast-quote/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-fast-quote/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-208b6fc55b80095a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-staff-notes/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-staff-notes/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1c10e789f64e940d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/split-step/index.ts:44", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/split-step/index.ts:44"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17095fca6d3047d9", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/convert-submission-to-quote/index.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/convert-submission-to-quote/index.ts:22"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec17a727a5edfbcf", "name": "Insecure pattern 'private_key_in_repo' in supabase/functions/ocr-process-next/index.ts:428", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in supabase/functions/ocr-process-next/index.ts:428"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7fa89f3720f90002", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-process-next/index.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-process-next/index.ts:31"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09431456d21a259e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/expire-stale-offers/index.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/expire-stale-offers/index.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32ace336385c576f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-cat-analysis/index.ts:43", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-cat-analysis/index.ts:43"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d74e43f1f9caddb2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-request-documents/index.ts:50", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-request-documents/index.ts:50"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1d6fdad8be5cc80", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-order-workflow-steps/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-order-workflow-steps/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce86fb0c50ba047f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/create-payment-link/index.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-payment-link/index.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-66c8afd1f75d1dad", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/secure-upload-otp-verify/index.ts:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/secure-upload-otp-verify/index.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75ba459fb45a141b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ai-paystub-allocate/index.ts:17", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ai-paystub-allocate/index.ts:17"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-43db2bc777b7c3a3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-respond-counter-offer/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-respond-counter-offer/index.ts:19"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba36b1d085e1690c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/create-deposit-payment-link/index.ts:39", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-deposit-payment-link/index.ts:39"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72c581a7d867afa8", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ai-allocate-payment/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ai-allocate-payment/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a0d45101485914c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-iso17100-assess/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-iso17100-assess/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15cc81fc38d824aa", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/process-inbound-email/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-inbound-email/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-795226a5e71ca1ec", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/kiosk-auth.ts:17", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/kiosk-auth.ts:17"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd317c5a882a5285", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/ringcentral.ts:212", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/ringcentral.ts:212"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1733875ad8a50974", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/tr.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/tr.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-505cae5876f86c3f", "name": "Insecure pattern 'private_key_in_repo' in supabase/functions/_shared/google-auth.ts:46", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in supabase/functions/_shared/google-auth.ts:46"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5df9856e209c5d08", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/transcription.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/transcription.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e5b069acaaddf9d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/customer-quote.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/customer-quote.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-740d0cf616186c22", "name": "Insecure pattern 'private_key_in_repo' in supabase/functions/_shared/google-storage.ts:155", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in supabase/functions/_shared/google-storage.ts:155"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5cfb7d5ace8785f3", "name": "Insecure pattern 'cors_wildcard' in server/index.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/index.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8dc8a25f3687d814", "name": "Very large file: client/components/quote/Step4ReviewCheckout.tsx (3569 lines)", "shortDescription": {"text": "Very large file: client/components/quote/Step4ReviewCheckout.tsx (3569 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-5e47afd5e5395dff", "name": "Very large file: client/components/shared/analysis/OcrResultsModal.tsx (4831 lines)", "shortDescription": {"text": "Very large file: client/components/shared/analysis/OcrResultsModal.tsx (4831 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-0ccfd5878900c03a", "name": "Very large file: client/components/admin/WorkflowPipeline.tsx (3671 lines)", "shortDescription": {"text": "Very large file: client/components/admin/WorkflowPipeline.tsx (3671 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-9ed99f5fe4d08fb4", "name": "Very large file: client/components/admin/OrderFinanceTab.tsx (1401 lines)", "shortDescription": {"text": "Very large file: client/components/admin/OrderFinanceTab.tsx (1401 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-e7772e996b4e1ebe", "name": "Very large file: client/components/admin/BulkPaymentModal.tsx (1510 lines)", "shortDescription": {"text": "Very large file: client/components/admin/BulkPaymentModal.tsx (1510 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-62395153411bc937", "name": "Very large file: client/pages/admin/AccountsReceivable.tsx (1958 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/AccountsReceivable.tsx (1958 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-c4de9f58a3b98a3b", "name": "Very large file: client/pages/admin/CustomerDetail.tsx (2459 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/CustomerDetail.tsx (2459 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-83766c4bdc80e6cd", "name": "Very large file: client/pages/admin/AdminCreateOrder.tsx (2780 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/AdminCreateOrder.tsx (2780 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-4dc08b2f389bf9be", "name": "Very large file: client/pages/admin/AdminPartners.tsx (1550 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/AdminPartners.tsx (1550 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-a196d7848b1b2b21", "name": "Very large file: client/pages/admin/FastQuoteCreate.tsx (2277 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/FastQuoteCreate.tsx (2277 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-3a54f31786483483", "name": "Very large file: client/pages/admin/AdminOrderDetail.tsx (5362 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/AdminOrderDetail.tsx (5362 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-b1cb461135e14f70", "name": "Very large file: client/pages/admin/AdminQuoteDetail.tsx (6598 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/AdminQuoteDetail.tsx (6598 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-a507505193f18c61", "name": "Very large file: client/pages/admin/OCRWordCountPage.tsx (1384 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/OCRWordCountPage.tsx (1384 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-39987224b551744d", "name": "Very large file: client/pages/admin/AdminOrdersList.tsx (2380 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/AdminOrdersList.tsx (2380 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-0f7c10a79b5f35e3", "name": "Very large file: client/pages/admin/RecruitmentDetail.tsx (6447 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/RecruitmentDetail.tsx (6447 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-87fea237c9e83271", "name": "Very large file: client/pages/admin/PreprocessOCRPage.tsx (1847 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/PreprocessOCRPage.tsx (1847 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-6b67e98a7d10154c", "name": "Very large file: client/pages/admin/transcription/TranscriptionJobDetail.tsx (2073 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/transcription/TranscriptionJobDetail.tsx (2073 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-e2fc2af12b5fc4a9", "name": "Very large file: client/pages/admin/transcription/TranscriptionDashboard.tsx (1212 lines)", "shortDescription": {"text": "Very large file: client/pages/admin/transcription/TranscriptionDashboard.tsx (1212 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-c72351b1fafb826a", "name": "Very large file: docs/training/_build_pptx.cjs (1543 lines)", "shortDescription": {"text": "Very large file: docs/training/_build_pptx.cjs (1543 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-4a4ced71f6268671", "name": "Very large file: supabase/functions/update-workflow-step/index.ts (976 lines)", "shortDescription": {"text": "Very large file: supabase/functions/update-workflow-step/index.ts (976 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-13467f942d918b62", "name": "Very large file: supabase/functions/generate-quote-pdf/index.ts (1782 lines)", "shortDescription": {"text": "Very large file: supabase/functions/generate-quote-pdf/index.ts (1782 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-4c9bd5a626b2f7ea", "name": "Very large file: supabase/functions/transcription-process/index.ts (1887 lines)", "shortDescription": {"text": "Very large file: supabase/functions/transcription-process/index.ts (1887 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": "3 test file(s) for 662 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-733bc81d96cdde43", "name": "Node manifest has dependencies but no lockfile: services/audio-extractor/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: services/audio-extractor/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 346 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 647 placeholder/mock markers across 175 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-505bc666a82f9849", "name": "Agent instruction/config may expose a secret: .claude/settings.local.json", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/settings.local.json"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d727f93162243546", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/utils/pdfOperations.ts:408", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/utils/pdfOperations.ts:408"}, "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-9c51c1ac461f60db", "name": "Commented-code block (8 lines) in client/utils/pricing.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in client/utils/pricing.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-160797a14da81e06", "name": "Commented-code block (6 lines) in client/components/ProcessingStatus.tsx:98", "shortDescription": {"text": "Commented-code block (6 lines) in client/components/ProcessingStatus.tsx:98"}, "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-6943183ba4936b44", "name": "Commented-code block (11 lines) in client/components/upload/ConfirmationView.tsx:24", "shortDescription": {"text": "Commented-code block (11 lines) in client/components/upload/ConfirmationView.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb41928d1f31a9f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/quote/Step3Contact.tsx:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/quote/Step3Contact.tsx:110"}, "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-3cce8b0f790a4061", "name": "Commented-code block (5 lines) in client/components/quote/Step1Upload.tsx:553", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/quote/Step1Upload.tsx:553"}, "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-e7f6fa16c5513ef9", "name": "Commented-code block (5 lines) in client/components/quote/Step4ReviewCheckout.tsx:1022", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/quote/Step4ReviewCheckout.tsx:1022"}, "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-09c5a770a533f47a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/quote/Step4ReviewCheckout.tsx:1902", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/quote/Step4ReviewCheckout.tsx:1902"}, "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-71c6fb846f6cc775", "name": "Commented-code block (5 lines) in client/components/shared/CustomerSearch.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/shared/CustomerSearch.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a9f00ec7b636069", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/CustomerSearch.tsx:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/CustomerSearch.tsx:4"}, "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-702755e7251610a5", "name": "Commented-code block (5 lines) in client/components/shared/analysis/OcrResultsModal.tsx:1184", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/shared/analysis/OcrResultsModal.tsx:1184"}, "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-e67926014ee6c89a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/analysis/OcrResultsModal.tsx:851", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/analysis/OcrResultsModal.tsx:851"}, "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-17fcdf3beac583bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/document-flow/DocumentFlowEditor.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/document-flow/DocumentFlowEditor.tsx:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9b2bca8aca977890", "name": "Commented-code block (5 lines) in client/components/customer/CustomerUploadWidget.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/customer/CustomerUploadWidget.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a97d90a68aff7791", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/customer/PaymentModal.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/customer/PaymentModal.tsx:78"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f263fcd56df1d45", "name": "Commented-code block (7 lines) in client/components/pdf-manager/PdfTextEditor.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in client/components/pdf-manager/PdfTextEditor.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38c7098a4b6c281f", "name": "Commented-code block (5 lines) in client/components/admin/ConfirmDialog.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/ConfirmDialog.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-beb8d14f0676e230", "name": "Commented-code block (5 lines) in client/components/admin/CustomerConversationTab.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/CustomerConversationTab.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8600f52bed7e0cbf", "name": "Commented-code block (5 lines) in client/components/admin/EditOrderModal.tsx:339", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/EditOrderModal.tsx:339"}, "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-0862f0bce7a524c2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/CustomerARSummary.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/CustomerARSummary.tsx:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-afe03595aa4cbcb2", "name": "Commented-code block (5 lines) in client/components/admin/WorkflowPipeline.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/WorkflowPipeline.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d035935b29e8535b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/WorkflowPipeline.tsx:674", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/WorkflowPipeline.tsx:674"}, "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-8682ec0f2afe8662", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/RecordPaymentModal.tsx:777", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/RecordPaymentModal.tsx:777"}, "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-3993ef5288b7363e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/BalanceResolutionModal.tsx:270", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/BalanceResolutionModal.tsx:270"}, "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-8cda4882b1d4cc43", "name": "Commented-code block (7 lines) in client/components/admin/OrderWorkflowSection.tsx:406", "shortDescription": {"text": "Commented-code block (7 lines) in client/components/admin/OrderWorkflowSection.tsx:406"}, "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-50e16b04d7e334db", "name": "Commented-code block (5 lines) in client/components/admin/VendorFinderModal.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/VendorFinderModal.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83fd4410f8adfcbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/OriginalsModal.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/OriginalsModal.tsx:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-004775b9d337533c", "name": "Commented-code block (5 lines) in client/components/admin/UnassignVendorModal.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/UnassignVendorModal.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e63cdf09a6296bb", "name": "Commented-code block (5 lines) in client/components/admin/OrderFinanceTab.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/OrderFinanceTab.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-498ab0baba05271c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/RecordVendorPaymentModal.tsx:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/RecordVendorPaymentModal.tsx:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98390116f889c6a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/EmailLogAccordion.tsx:207", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/EmailLogAccordion.tsx:207"}, "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-2f702a4f5dadec32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/OrderInvoiceCard.tsx:887", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/OrderInvoiceCard.tsx:887"}, "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-bc060651a76d041a", "name": "Commented-code block (5 lines) in client/components/admin/VendorAssignModal.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in client/components/admin/VendorAssignModal.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73be92b41738897a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/MessageCustomerModal.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/MessageCustomerModal.tsx:134"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0fb4fd2a1f444574", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/messaging/MessageComposer.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/messaging/MessageComposer.tsx:87"}, "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-72721f3c26b30c74", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/lib/payment-api.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/lib/payment-api.ts:15"}, "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-6a3c9184a33780ff", "name": "Commented-code block (7 lines) in client/lib/iso17100.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in client/lib/iso17100.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ef60fab744dd58f", "name": "Commented-code block (5 lines) in client/pages/Index.tsx:159", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/Index.tsx:159"}, "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-66251b50850d6e83", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/Index.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/Index.tsx:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01f4e9852ba6708e", "name": "Commented-code block (10 lines) in client/pages/quote/QuoteRevisionPage.tsx:86", "shortDescription": {"text": "Commented-code block (10 lines) in client/pages/quote/QuoteRevisionPage.tsx:86"}, "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-addd813f91fefd59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/quote/QuoteRevisionPage.tsx:193", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/quote/QuoteRevisionPage.tsx:193"}, "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-29c382a6fb9f3b6e", "name": "Commented-code block (5 lines) in client/pages/kiosk/KioskStaffForm.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/kiosk/KioskStaffForm.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1bb8df961c086bc", "name": "Commented-code block (8 lines) in client/pages/kiosk/KioskShell.tsx:6", "shortDescription": {"text": "Commented-code block (8 lines) in client/pages/kiosk/KioskShell.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-457dcf5f3f3c3e59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/customer/CustomerMessages.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/customer/CustomerMessages.tsx:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e84ebfa0fd1bf910", "name": "Legacy-named symbol `isOld` in client/pages/customer/CustomerOrderDetail.tsx:791", "shortDescription": {"text": "Legacy-named symbol `isOld` in client/pages/customer/CustomerOrderDetail.tsx:791"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41110d3cc5b197b6", "name": "Commented-code block (6 lines) in client/pages/customer/CustomerOrderDetail.tsx:275", "shortDescription": {"text": "Commented-code block (6 lines) in client/pages/customer/CustomerOrderDetail.tsx:275"}, "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-d469bf69ccedf85e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminPaymentHistory.tsx:379", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminPaymentHistory.tsx:379"}, "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-436a2f784d5b6c3c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/PublicSubmissionsPage.tsx:194", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/PublicSubmissionsPage.tsx:194"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de795316001af498", "name": "Commented-code block (6 lines) in client/pages/admin/CustomerDetail.tsx:620", "shortDescription": {"text": "Commented-code block (6 lines) in client/pages/admin/CustomerDetail.tsx:620"}, "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-6d6014ac9fd02922", "name": "Commented-code block (5 lines) in client/pages/admin/AdminCreateOrder.tsx:239", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminCreateOrder.tsx:239"}, "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-05ba8000d74fdc71", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminCreateOrder.tsx:1281", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminCreateOrder.tsx:1281"}, "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-149c0ece1478df8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/VendorPaymentsList.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/VendorPaymentsList.tsx:21"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dadccf87bbc73873", "name": "Commented-code block (6 lines) in client/pages/admin/AdminQuotesList.tsx:169", "shortDescription": {"text": "Commented-code block (6 lines) in client/pages/admin/AdminQuotesList.tsx:169"}, "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-7b0d7e8b4f15f8fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/FastQuoteCreate.tsx:923", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/FastQuoteCreate.tsx:923"}, "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-1939cc5ffc643673", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminInvoiceDetail.tsx:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminInvoiceDetail.tsx:264"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aebc43540fbebd18", "name": "Commented-code block (8 lines) in client/pages/admin/AdminProjectDetail.tsx:324", "shortDescription": {"text": "Commented-code block (8 lines) in client/pages/admin/AdminProjectDetail.tsx:324"}, "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-b1da64bbb69599f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminProjectDetail.tsx:194", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminProjectDetail.tsx:194"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95b8369ebce2422b", "name": "Commented-code block (7 lines) in client/pages/admin/RecruitmentList.tsx:21", "shortDescription": {"text": "Commented-code block (7 lines) in client/pages/admin/RecruitmentList.tsx:21"}, "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-5b3219c1ab91f701", "name": "Commented-code block (6 lines) in client/pages/admin/AdminOrderDetail.tsx:294", "shortDescription": {"text": "Commented-code block (6 lines) in client/pages/admin/AdminOrderDetail.tsx:294"}, "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-a26c96e1717fff29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminOrderDetail.tsx:853", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminOrderDetail.tsx:853"}, "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-9bdee326ee7454f9", "name": "Commented-code block (5 lines) in client/pages/admin/AdminVendorsList.tsx:261", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminVendorsList.tsx:261"}, "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-5ef6daa4730c7113", "name": "Commented-code block (5 lines) in client/pages/admin/AdminQuoteDetail.tsx:203", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminQuoteDetail.tsx:203"}, "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-c00f13fc3c5a1ca1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminQuoteDetail.tsx:1390", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminQuoteDetail.tsx:1390"}, "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-3995001b536ca314", "name": "Commented-code block (7 lines) in client/pages/admin/PdfToWordPage.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in client/pages/admin/PdfToWordPage.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4364bbe144574c09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminMessages.tsx:540", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminMessages.tsx:540"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-70b32d91bb214b82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/OCRWordCountPage.tsx:660", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/OCRWordCountPage.tsx:660"}, "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-c337a552586eb702", "name": "Commented-code block (5 lines) in client/pages/admin/AdminOrdersList.tsx:117", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminOrdersList.tsx:117"}, "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-02ff4b99c60a78b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/RecruitmentRegradeBackfill.tsx:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/RecruitmentRegradeBackfill.tsx:24"}, "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-0eb009ab996854bc", "name": "Commented-code block (12 lines) in client/pages/admin/RecruitmentDetail.tsx:1320", "shortDescription": {"text": "Commented-code block (12 lines) in client/pages/admin/RecruitmentDetail.tsx:1320"}, "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-ba93b65f484fadd3", "name": "Legacy-named symbol `automated_pipeline_v1` in client/pages/admin/AdminQmsQueue.tsx:8", "shortDescription": {"text": "Legacy-named symbol `automated_pipeline_v1` in client/pages/admin/AdminQmsQueue.tsx:8"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8b6423b7855d50d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/PreprocessOCRPage.tsx:704", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/PreprocessOCRPage.tsx:704"}, "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-ae48c03ed2a92e7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/settings/WorkflowTemplatesSettings.tsx:386", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/settings/WorkflowTemplatesSettings.tsx:386"}, "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-f480618ced39596c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/settings/CallRecordingSettings.tsx:230", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/settings/CallRecordingSettings.tsx:230"}, "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-51674a7938c63a90", "name": "Commented-code block (9 lines) in client/pages/admin/transcription/TranscriptionJobDetail.tsx:268", "shortDescription": {"text": "Commented-code block (9 lines) in client/pages/admin/transcription/TranscriptionJobDetail.tsx:268"}, "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-b385ad6a33f9ee73", "name": "Commented-code block (7 lines) in client/pages/admin/transcription/TranscriptionDashboard.tsx:118", "shortDescription": {"text": "Commented-code block (7 lines) in client/pages/admin/transcription/TranscriptionDashboard.tsx:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4aa7c0e804996632", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/transcription/TranscriptionDashboard.tsx:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/transcription/TranscriptionDashboard.tsx:156"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf662eca874ef453", "name": "Commented-code block (5 lines) in client/pages/admin/vendor-detail/VendorDetailHeader.tsx:77", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/admin/vendor-detail/VendorDetailHeader.tsx:77"}, "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-554667a984d6de3b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/vendor-detail/VendorAuthTab.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/vendor-detail/VendorAuthTab.tsx:80"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a229be88d2626d43", "name": "Legacy-named symbol `20260602_qms_public_lookup_views_v2` in client/pages/admin/vendor-detail/VendorQmsTab.tsx:102", "shortDescription": {"text": "Legacy-named symbol `20260602_qms_public_lookup_views_v2` in client/pages/admin/vendor-detail/VendorQmsTab.tsx:102"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ca511cbc9932549", "name": "Commented-code block (7 lines) in client/pages/admin/vendor-detail/VendorQmsTab.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in client/pages/admin/vendor-detail/VendorQmsTab.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4f6a2674ca34c16", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/vendor-detail/VendorRatesTab.tsx:284", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/vendor-detail/VendorRatesTab.tsx:284"}, "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-adf8c0c3194bd44d", "name": "Legacy-named symbol `translation_quality_v1` in client/pages/admin/tr/AdminReviewJobNew.tsx:78", "shortDescription": {"text": "Legacy-named symbol `translation_quality_v1` in client/pages/admin/tr/AdminReviewJobNew.tsx:78"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66c9972cbb9c4d7f", "name": "Commented-code block (5 lines) in client/pages/admin/tr/AdminReviewJobNew.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in client/pages/admin/tr/AdminReviewJobNew.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0a0dccbc5969814", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/invoices/CreateInvoice.tsx:357", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/invoices/CreateInvoice.tsx:357"}, "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-1de8aa96fa4dfb9a", "name": "Commented-code block (5 lines) in client/hooks/useDropdownOptions.ts:50", "shortDescription": {"text": "Commented-code block (5 lines) in client/hooks/useDropdownOptions.ts:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b032ea57b7f59e78", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/hooks/useAdminAuth.ts:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/hooks/useAdminAuth.ts:87"}, "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-19137fa375ff7e3a", "name": "Commented-code block (6 lines) in client/context/CustomerAuthContext.tsx:153", "shortDescription": {"text": "Commented-code block (6 lines) in client/context/CustomerAuthContext.tsx:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c230419fa895375", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/CustomerAuthContext.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/CustomerAuthContext.tsx:66"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-329064d19cf3d918", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/BrandingContext.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/BrandingContext.tsx:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17fc38bf10126f30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/UploadContext.tsx:405", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/UploadContext.tsx:405"}, "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-cc079f4f228e454c", "name": "Legacy-named symbol `cethos_app_figma_design_v1` in docs/training/_build_guidde_guide.cjs:2", "shortDescription": {"text": "Legacy-named symbol `cethos_app_figma_design_v1` in docs/training/_build_guidde_guide.cjs:2"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-431b7ac7bd3f54e9", "name": "Commented-code block (5 lines) in scripts/render-affidavit-fixture.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/render-affidavit-fixture.mjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9e2c54ac466ba3d", "name": "Commented-code block (6 lines) in supabase/functions/staff-deliver-step/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/staff-deliver-step/index.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-40858003a6fc4b8d", "name": "Commented-code block (5 lines) in supabase/functions/rc-sync-sms/index.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/rc-sync-sms/index.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-107ce74041819897", "name": "Commented-code block (5 lines) in supabase/functions/send-step-draft-to-customer/index.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-step-draft-to-customer/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11db222d0d9352b4", "name": "Commented-code block (7 lines) in supabase/functions/send-final-deliverable/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/send-final-deliverable/index.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-97756f7f0a67b19f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-exchange-rates/index.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-exchange-rates/index.ts:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6845cc75da54d3d7", "name": "Commented-code block (5 lines) in supabase/functions/get-customer-quote-detail/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/get-customer-quote-detail/index.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-fb0f025a21ecd42c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cancel-order/index.ts:395", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cancel-order/index.ts:395"}, "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-459ac422113c58d3", "name": "Commented-code block (10 lines) in supabase/functions/ocr-process-mistral/index.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/ocr-process-mistral/index.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df1250e92ac1918c", "name": "Commented-code block (6 lines) in supabase/functions/rc-make-call/index.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/rc-make-call/index.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9977b079706dfc0d", "name": "Commented-code block (5 lines) in supabase/functions/update-workflow-step/index.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/update-workflow-step/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51a1a5c9c5febaef", "name": "Commented-code block (6 lines) in supabase/functions/customer-resolve-impersonation/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/customer-resolve-impersonation/index.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-40028894cbde5e83", "name": "Commented-code block (10 lines) in supabase/functions/customer-quote-finalize-files/index.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/customer-quote-finalize-files/index.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-1e20719530192d47", "name": "Commented-code block (5 lines) in supabase/functions/tr-preflight/index.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-preflight/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd81629b1be8d81b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-oauth/index.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-oauth/index.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0f7e0446fccbae6", "name": "Commented-code block (7 lines) in supabase/functions/admin-record-qualification/index.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/admin-record-qualification/index.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4631081ad76962eb", "name": "Commented-code block (5 lines) in supabase/functions/tr-vendor-share-create/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-vendor-share-create/index.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-4e9354a6bde4ec57", "name": "Commented-code block (9 lines) in supabase/functions/get-customer-orders/index.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/get-customer-orders/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e95da7945cda8b5", "name": "Commented-code block (5 lines) in supabase/functions/tr-approve-job-plan/index.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-approve-job-plan/index.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a3f57a78b1bb4b1", "name": "Commented-code block (5 lines) in supabase/functions/vendor-negotiate-counter/index.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/vendor-negotiate-counter/index.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7737f206f034e181", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-negotiate-counter/index.ts:315", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-negotiate-counter/index.ts:315"}, "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-602705d36505571e", "name": "Commented-code block (5 lines) in supabase/functions/manage-vendor-payables/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/manage-vendor-payables/index.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-7e0229b87417745e", "name": "Commented-code block (5 lines) in supabase/functions/upload-staff-quote-file/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/upload-staff-quote-file/index.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-51dff5a1136a45cd", "name": "Commented-code block (5 lines) in supabase/functions/vendor-activation-email-cron/index.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/vendor-activation-email-cron/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4fad3995fad632b", "name": "Legacy-named symbol `pmLegacy` in supabase/functions/manage-vendor-payments/index.ts:322", "shortDescription": {"text": "Legacy-named symbol `pmLegacy` in supabase/functions/manage-vendor-payments/index.ts:322"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba996abe8b4eddbe", "name": "Commented-code block (10 lines) in supabase/functions/manage-vendor-payments/index.ts:5", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/manage-vendor-payments/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-468856d80c81c219", "name": "Legacy-named symbol `create_folder_v2` in supabase/functions/dropbox-files/index.ts:117", "shortDescription": {"text": "Legacy-named symbol `create_folder_v2` in supabase/functions/dropbox-files/index.ts:117"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-210073d0e67bd0e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-files/index.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-files/index.ts:83"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-200221ba6e34b2a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-ai-check/index.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-ai-check/index.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7f7c8372555894b", "name": "Commented-code block (7 lines) in supabase/functions/ocr-batch-results/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/ocr-batch-results/index.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-a9ab4d8bd1dd74c1", "name": "Commented-code block (11 lines) in supabase/functions/tr-create-job/index.ts:4", "shortDescription": {"text": "Commented-code block (11 lines) in supabase/functions/tr-create-job/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6211a7d0d2f70c1", "name": "Legacy-named symbol `scribe_v1` in supabase/functions/rc-call-recording/index.ts:166", "shortDescription": {"text": "Legacy-named symbol `scribe_v1` in supabase/functions/rc-call-recording/index.ts:166"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca61ce629a5830dd", "name": "Commented-code block (5 lines) in supabase/functions/rc-call-recording/index.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/rc-call-recording/index.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f30e4593bed154d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-call-recording/index.ts:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-call-recording/index.ts:105"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a4bb7f0a1a073f5", "name": "Commented-code block (7 lines) in supabase/functions/cal-integrations/index.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/cal-integrations/index.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2494b16a2df87fd0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cal-integrations/index.ts:244", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cal-integrations/index.ts:244"}, "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-c2f24be8c36bd458", "name": "Commented-code block (7 lines) in supabase/functions/notify-customer-order-confirmed/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/notify-customer-order-confirmed/index.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-bd866cdfca9f9d88", "name": "Commented-code block (10 lines) in supabase/functions/update-quote-from-analysis/index.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/update-quote-from-analysis/index.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-099d5df75b1f416f", "name": "Commented-code block (7 lines) in supabase/functions/notify-vendor-instructions-changed/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/notify-vendor-instructions-changed/index.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-e366a8b9c781d92b", "name": "Commented-code block (5 lines) in supabase/functions/recalculate-quote-pricing/index.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/recalculate-quote-pricing/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4eb56c2068195dc", "name": "Commented-code block (12 lines) in supabase/functions/admin-impersonate-vendor/index.ts:1", "shortDescription": {"text": "Commented-code block (12 lines) in supabase/functions/admin-impersonate-vendor/index.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-62e863066f6463fa", "name": "Commented-code block (8 lines) in supabase/functions/transcription-poll-google-batch/index.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/transcription-poll-google-batch/index.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-260f794185abaed4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-poll-google-batch/index.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-poll-google-batch/index.ts:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b75b50d993cb7af2", "name": "Commented-code block (5 lines) in supabase/functions/admin-impersonate-customer/index.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/admin-impersonate-customer/index.ts:10"}, "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-8a651790c5a4c924", "name": "Commented-code block (7 lines) in supabase/functions/send-customer-message/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/send-customer-message/index.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-6183d91010882108", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-customer-message/index.ts:480", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-customer-message/index.ts:480"}, "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-5894f39bfed03a6e", "name": "Commented-code block (5 lines) in supabase/functions/get-staff-tasks/index.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/get-staff-tasks/index.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38896c0a6c29c5e7", "name": "Commented-code block (5 lines) in supabase/functions/get-order-workflow/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/get-order-workflow/index.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-596bb0522f7ab14b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/get-order-workflow/index.ts:517", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/get-order-workflow/index.ts:517"}, "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-5fe3d16dc587de1f", "name": "Commented-code block (6 lines) in supabase/functions/delete-staff-quote-file/index.ts:21", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/delete-staff-quote-file/index.ts:21"}, "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-6783b35958349908", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/delete-staff-quote-file/index.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/delete-staff-quote-file/index.ts:13"}, "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-d2ddeb08b93e6a97", "name": "Commented-code block (7 lines) in supabase/functions/generate-quote-pdf/index.ts:10", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/generate-quote-pdf/index.ts:10"}, "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-89b4b304f08f7e36", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-quote-pdf/index.ts:386", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-quote-pdf/index.ts:386"}, "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-1ff311b68686d6eb", "name": "Commented-code block (5 lines) in supabase/functions/assign-order-workflow/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/assign-order-workflow/index.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-5d4189a54e29b312", "name": "Commented-code block (5 lines) in supabase/functions/validate-partner-code/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/validate-partner-code/index.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-1dc8125a9e855f44", "name": "Commented-code block (5 lines) in supabase/functions/secure-upload-otp-send/index.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/secure-upload-otp-send/index.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1fac36ad896677b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/secure-upload-otp-send/index.ts:237", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/secure-upload-otp-send/index.ts:237"}, "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-9e1f9c43729c9dfb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/process-invoice-queue/index.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/process-invoice-queue/index.ts:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aff1c876283bbcaf", "name": "Commented-code block (5 lines) in supabase/functions/void-vendor-payable/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/void-vendor-payable/index.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec2c0f666fd90654", "name": "Commented-code block (5 lines) in supabase/functions/transcription-ai-compare/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-ai-compare/index.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-6cba9166c4fb00b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-ai-compare/index.ts:157", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-ai-compare/index.ts:157"}, "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-689ae2d76c210c3b", "name": "Commented-code block (5 lines) in supabase/functions/apply-affidavit-and-finalize/index.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/apply-affidavit-and-finalize/index.ts:22"}, "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-3c2b6a0cb374f675", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-upload/index.ts:315", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-upload/index.ts:315"}, "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-eb0aead7ce1d04f2", "name": "Commented-code block (7 lines) in supabase/functions/analyse-ocr-next/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/analyse-ocr-next/index.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-4ce266e71276716f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/analyse-ocr-next/index.ts:233", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/analyse-ocr-next/index.ts:233"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e69a0f64b45e90d6", "name": "Commented-code block (5 lines) in supabase/functions/tr-search-project-files/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-search-project-files/index.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-50eb96455ff711f0", "name": "Commented-code block (9 lines) in supabase/functions/vendor-acceptance-reminders/index.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/vendor-acceptance-reminders/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a4e28001cb19398", "name": "Commented-code block (7 lines) in supabase/functions/vendor-doc-request-status-sweep/index.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/vendor-doc-request-status-sweep/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd8ce169b7b8820f", "name": "Commented-code block (5 lines) in supabase/functions/tr-link-existing-file/index.ts:91", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-link-existing-file/index.ts:91"}, "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-988b7cc0a100e8da", "name": "Commented-code block (9 lines) in supabase/functions/get-customer-quotes/index.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/get-customer-quotes/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15b4bf76b660afd8", "name": "Commented-code block (14 lines) in supabase/functions/send-invoice-email/index.ts:1", "shortDescription": {"text": "Commented-code block (14 lines) in supabase/functions/send-invoice-email/index.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-8ac58f40a215837d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-invoice-email/index.ts:349", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-invoice-email/index.ts:349"}, "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-4931dce0c4fb4f8f", "name": "Commented-code block (5 lines) in supabase/functions/send-email/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-email/index.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-2aed7e5c90253064", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-email/index.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-email/index.ts:64"}, "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-88e8ef838c62a00e", "name": "Commented-code block (6 lines) in supabase/functions/cvp-suggest-vendor-rate/index.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/cvp-suggest-vendor-rate/index.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3067be04047e496", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/pdf-to-word-mistral/index.ts:237", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/pdf-to-word-mistral/index.ts:237"}, "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-7287ee3fe22732cf", "name": "Commented-code block (7 lines) in supabase/functions/vendor-doc-request-reminder/index.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/vendor-doc-request-reminder/index.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-710c335881d3e76f", "name": "Commented-code block (5 lines) in supabase/functions/send-payment-reminders/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-payment-reminders/index.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-46b5cb4a6061353f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/provision-tm-job/index.ts:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/provision-tm-job/index.ts:126"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d7302082cfe2295", "name": "Commented-code block (6 lines) in supabase/functions/analyse-ocr-batch/index.ts:20", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/analyse-ocr-batch/index.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b94edf034d4f3929", "name": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/index.ts:338", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/index.ts:338"}, "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-e2715dd41fe05fa0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/stripe-webhook/index.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/stripe-webhook/index.ts:64"}, "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-efef5c806a7ccaca", "name": "Commented-code block (5 lines) in supabase/functions/scan-public-submission/index.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/scan-public-submission/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ea40b02eaa01f42", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/scan-public-submission/index.ts:205", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/scan-public-submission/index.ts:205"}, "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-2b6ce23ef546f499", "name": "Commented-code block (5 lines) in supabase/functions/process-quote-documents/index.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/process-quote-documents/index.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d35819d2e3cbca7", "name": "Commented-code block (7 lines) in supabase/functions/crm-create-order/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/crm-create-order/index.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-37e3be4fab998c07", "name": "Commented-code block (7 lines) in supabase/functions/apostille-consult-sms-reminders/index.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/apostille-consult-sms-reminders/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04cac07c0b419b91", "name": "Commented-code block (9 lines) in supabase/functions/vendor-auth-otp-send/index.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/vendor-auth-otp-send/index.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-a6aabbdfd9d67d74", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-auth-otp-send/index.ts:220", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-auth-otp-send/index.ts:220"}, "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-ff753acb0f172269", "name": "Commented-code block (7 lines) in supabase/functions/get-brevo-email-events/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/get-brevo-email-events/index.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-58915298c933d7fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/get-brevo-email-events/index.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/get-brevo-email-events/index.ts:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c1e1132cc3c10fc", "name": "Commented-code block (5 lines) in supabase/functions/qms-auto-qualify/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/qms-auto-qualify/index.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ede85ff9ada623b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qms-auto-qualify/index.ts:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qms-auto-qualify/index.ts:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21a744ad4b810fd6", "name": "Commented-code block (6 lines) in supabase/functions/create-vendor/index.ts:88", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/create-vendor/index.ts:88"}, "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-fb158948765a6cdf", "name": "Commented-code block (10 lines) in supabase/functions/review-draft-file/index.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/review-draft-file/index.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-0d6b1a3901733366", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/review-draft-file/index.ts:1034", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/review-draft-file/index.ts:1034"}, "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-62a7d8c4319686c0", "name": "Commented-code block (7 lines) in supabase/functions/ocr-batch-create/index.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/ocr-batch-create/index.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ce05813299f76b1", "name": "Commented-code block (11 lines) in supabase/functions/admin-create-order/index.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in supabase/functions/admin-create-order/index.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-60e75ddcb98098b9", "name": "Commented-code block (6 lines) in supabase/functions/find-matching-vendors/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/find-matching-vendors/index.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-f7e32df6103a8f79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/upload-complete/index.ts:549", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/upload-complete/index.ts:549"}, "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-e9d742b77fee3490", "name": "Commented-code block (5 lines) in supabase/functions/transcription-deliver/index.ts:803", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-deliver/index.ts:803"}, "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-909d2fa13b537cad", "name": "Commented-code block (7 lines) in supabase/functions/vendor-invitation-reminder/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/vendor-invitation-reminder/index.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-f2530f1f190236a4", "name": "Legacy-named symbol `scribe_v2` in supabase/functions/transcription-process/index.ts:1084", "shortDescription": {"text": "Legacy-named symbol `scribe_v2` in supabase/functions/transcription-process/index.ts:1084"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-759029b739e70363", "name": "Commented-code block (5 lines) in supabase/functions/transcription-process/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-process/index.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-341b72ad633373b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-process/index.ts:863", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-process/index.ts:863"}, "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-52e72343e35d83fb", "name": "Legacy-named symbol `pmLegacy` in supabase/functions/manage-customer-payments/index.ts:342", "shortDescription": {"text": "Legacy-named symbol `pmLegacy` in supabase/functions/manage-customer-payments/index.ts:342"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89c605de96dd18d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/manage-customer-payments/index.ts:437", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/manage-customer-payments/index.ts:437"}, "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-77c0a15432ef73bf", "name": "Commented-code block (10 lines) in supabase/functions/manage-receivables/index.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/manage-receivables/index.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-19a0b5613d49859b", "name": "Commented-code block (7 lines) in supabase/functions/get-customer-dashboard/index.ts:14", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/get-customer-dashboard/index.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03106e9a2c794b94", "name": "Commented-code block (6 lines) in supabase/functions/notify-customer-quote-ack/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/notify-customer-quote-ack/index.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-84a0f92a4b5d14da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/pdf-to-word-convert/index.ts:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/pdf-to-word-convert/index.ts:120"}, "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-01c2ae9f8a74ea6e", "name": "Commented-code block (6 lines) in supabase/functions/tr-vendor-finding-respond/index.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/tr-vendor-finding-respond/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d440c7ffae3d647", "name": "Commented-code block (7 lines) in supabase/functions/generate-invoice-pdf/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/generate-invoice-pdf/index.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-7d74c99bf19447f9", "name": "Commented-code block (7 lines) in supabase/functions/verify-customer-login-otp/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/verify-customer-login-otp/index.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-3989f56c932ba36a", "name": "Commented-code block (5 lines) in supabase/functions/vendor-send-cv-nda-reminder/index.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/vendor-send-cv-nda-reminder/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-547b82f2aa691838", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-send-cv-nda-reminder/index.ts:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-send-cv-nda-reminder/index.ts:228"}, "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-37b57e8ee491e429", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-sync-calls/index.ts:148", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-sync-calls/index.ts:148"}, "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-6cb34c7f19d6ecd8", "name": "Commented-code block (8 lines) in supabase/functions/generate-tax-report/index.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/generate-tax-report/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-237c19689b12f6fd", "name": "Commented-code block (8 lines) in supabase/functions/send-deposit-reminder/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/send-deposit-reminder/index.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-230d91ba6b16a79f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-deposit-reminder/index.ts:238", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-deposit-reminder/index.ts:238"}, "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-5fcc7a3893282a78", "name": "Commented-code block (7 lines) in supabase/functions/list-vendor-qms/index.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/list-vendor-qms/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fac9ee02a6ccd7a", "name": "Commented-code block (5 lines) in supabase/functions/transcription-stripe-webhook/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-stripe-webhook/index.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-87c21a4ec1d9f0de", "name": "Commented-code block (21 lines) in supabase/functions/admin-manage-customer/index.ts:7", "shortDescription": {"text": "Commented-code block (21 lines) in supabase/functions/admin-manage-customer/index.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ebb4e60031ca3dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-call-intelligence-report/index.ts:221", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-call-intelligence-report/index.ts:221"}, "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-c4b0f11796f93fe1", "name": "Commented-code block (8 lines) in supabase/functions/generate-order-instructions/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/generate-order-instructions/index.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-179797b7da58c7e6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-order-instructions/index.ts:283", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-order-instructions/index.ts:283"}, "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-b129224adc905923", "name": "Commented-code block (5 lines) in supabase/functions/void-customer-invoice/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/void-customer-invoice/index.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43af2cdeea8cb681", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/staff-submit-bug-report/index.ts:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/staff-submit-bug-report/index.ts:140"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8603d5c7cd20b0ae", "name": "Commented-code block (5 lines) in supabase/functions/manage-sops/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/manage-sops/index.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa135b0e9fc03b2b", "name": "Commented-code block (6 lines) in supabase/functions/rc-send-sms/index.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/rc-send-sms/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60742e6509b4b6fd", "name": "Commented-code block (5 lines) in supabase/functions/qms-request-documents-bulk/index.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/qms-request-documents-bulk/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d1f8208d1a58e54", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qms-request-documents-bulk/index.ts:230", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qms-request-documents-bulk/index.ts:230"}, "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-3906368146d6ddfe", "name": "Commented-code block (5 lines) in supabase/functions/negotiation-hitl-reminder/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/negotiation-hitl-reminder/index.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-ecba1c41e63e061a", "name": "Commented-code block (6 lines) in supabase/functions/notify-staff-new-lead/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/notify-staff-new-lead/index.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-332394297409ffce", "name": "Commented-code block (6 lines) in supabase/functions/upload-start/index.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/upload-start/index.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-557b6ff0b49ba93a", "name": "Commented-code block (6 lines) in supabase/functions/send-customer-login-otp/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/send-customer-login-otp/index.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-571ddc9573c3567e", "name": "Commented-code block (5 lines) in supabase/functions/send-quote-link-email/index.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-quote-link-email/index.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-759f24175b07734e", "name": "Commented-code block (5 lines) in supabase/functions/create-checkout-session/index.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/create-checkout-session/index.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0666950555d78a0", "name": "Commented-code block (10 lines) in supabase/functions/customer-approve-quote-ar/index.ts:10", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/customer-approve-quote-ar/index.ts:10"}, "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-7fefb3cf2ae2792e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/customer-approve-quote-ar/index.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/customer-approve-quote-ar/index.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30ff6d1a3e01baec", "name": "Commented-code block (7 lines) in supabase/functions/get-customer-files/index.ts:15", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/get-customer-files/index.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f411beadd63b3557", "name": "Legacy-named symbol `create_folder_v2` in supabase/functions/dropbox-sync/index.ts:615", "shortDescription": {"text": "Legacy-named symbol `create_folder_v2` in supabase/functions/dropbox-sync/index.ts:615"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a5c2528b63e53ff", "name": "Commented-code block (5 lines) in supabase/functions/dropbox-sync/index.ts:220", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/dropbox-sync/index.ts:220"}, "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-66cb04d7f668b0c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-sync/index.ts:225", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-sync/index.ts:225"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0e6778b34798c1e2", "name": "Commented-code block (5 lines) in supabase/functions/tr-vendor-upload-new-version/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-vendor-upload-new-version/index.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-9a0d57f0947d6893", "name": "Commented-code block (5 lines) in supabase/functions/rc-webhook-manage/index.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/rc-webhook-manage/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f50d2df280a16032", "name": "Commented-code block (6 lines) in supabase/functions/promote-step-delivery-to-draft/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/promote-step-delivery-to-draft/index.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-ca0d7e4fca98891d", "name": "Commented-code block (7 lines) in supabase/functions/manage-staff-competence/index.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/manage-staff-competence/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a85816834b25203d", "name": "Legacy-named symbol `scribe_v1` in supabase/functions/rc-auto-transcribe/index.ts:182", "shortDescription": {"text": "Legacy-named symbol `scribe_v1` in supabase/functions/rc-auto-transcribe/index.ts:182"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9825c7d4963cd33d", "name": "Commented-code block (6 lines) in supabase/functions/rc-auto-transcribe/index.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/rc-auto-transcribe/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed7f12c95c1fdbd8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-auto-transcribe/index.ts:166", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-auto-transcribe/index.ts:166"}, "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-47c0f77b9326b2dc", "name": "Commented-code block (5 lines) in supabase/functions/validate-quote-token/index.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/validate-quote-token/index.ts:55"}, "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-89f22476d4d3acc3", "name": "Commented-code block (6 lines) in supabase/functions/send-staff-message/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/send-staff-message/index.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-e26a4469465cb448", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-staff-message/index.ts:405", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-staff-message/index.ts:405"}, "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-0e5827926e6b4fd0", "name": "Commented-code block (5 lines) in supabase/functions/manage-staff-notes/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/manage-staff-notes/index.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6e910dce46b1c78", "name": "Commented-code block (13 lines) in supabase/functions/split-step/index.ts:6", "shortDescription": {"text": "Commented-code block (13 lines) in supabase/functions/split-step/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdb519d407c0b91d", "name": "Commented-code block (10 lines) in supabase/functions/convert-submission-to-quote/index.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/convert-submission-to-quote/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9be8ed917121e3b8", "name": "Commented-code block (5 lines) in supabase/functions/tr-close-job/index.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-close-job/index.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed3b59b78c303ad1", "name": "Commented-code block (13 lines) in supabase/functions/ocr-process-next/index.ts:1", "shortDescription": {"text": "Commented-code block (13 lines) in supabase/functions/ocr-process-next/index.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-700f53287120a0f0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/ocr-process-next/index.ts:444", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/ocr-process-next/index.ts:444"}, "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-e68df1c485d4db24", "name": "Commented-code block (11 lines) in supabase/functions/expire-stale-offers/index.ts:8", "shortDescription": {"text": "Commented-code block (11 lines) in supabase/functions/expire-stale-offers/index.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f863aa4fb573054", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/kiosk-send-quote-email/index.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/kiosk-send-quote-email/index.ts:123"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7775dd4c61d2a6a9", "name": "Commented-code block (5 lines) in supabase/functions/transcription-segment-edit/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-segment-edit/index.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-d715493a2030cbd1", "name": "Commented-code block (5 lines) in supabase/functions/parse-cat-analysis/index.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/parse-cat-analysis/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ecba3c34a64d53a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/parse-cat-analysis/index.ts:259", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/parse-cat-analysis/index.ts:259"}, "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-030755b97f9c8c1a", "name": "Commented-code block (5 lines) in supabase/functions/tr-review/index.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/tr-review/index.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6ed8af3340a00fa", "name": "Legacy-named symbol `backfill_v2` in supabase/functions/transcription-backfill-segments/index.ts:220", "shortDescription": {"text": "Legacy-named symbol `backfill_v2` in supabase/functions/transcription-backfill-segments/index.ts:220"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad12b0f3c83d7256", "name": "Commented-code block (16 lines) in supabase/functions/vendor-request-documents/index.ts:9", "shortDescription": {"text": "Commented-code block (16 lines) in supabase/functions/vendor-request-documents/index.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc00e419475c2c5f", "name": "Commented-code block (5 lines) in supabase/functions/manage-order-workflow-steps/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/manage-order-workflow-steps/index.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-16dfbbbd0cd1a36b", "name": "Commented-code block (7 lines) in supabase/functions/ai-paystub-allocate/index.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/ai-paystub-allocate/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9adee3fde6065439", "name": "Commented-code block (8 lines) in supabase/functions/admin-respond-counter-offer/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/admin-respond-counter-offer/index.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-57d0678a89b4ddc9", "name": "Commented-code block (10 lines) in supabase/functions/create-deposit-payment-link/index.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/create-deposit-payment-link/index.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-1e884f57c4981ceb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-deposit-payment-link/index.ts:297", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-deposit-payment-link/index.ts:297"}, "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-7a6e9f713eb2f14c", "name": "Commented-code block (9 lines) in supabase/functions/ai-allocate-payment/index.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/ai-allocate-payment/index.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-74ff7f177e2cc654", "name": "Commented-code block (6 lines) in supabase/functions/vendor-iso17100-assess/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/vendor-iso17100-assess/index.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-ee7af4640ba4ed2a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-iso17100-assess/index.ts:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-iso17100-assess/index.ts:226"}, "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-e61482cd9c12d09c", "name": "Commented-code block (7 lines) in supabase/functions/process-inbound-email/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/process-inbound-email/index.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-51d88cc740c5fd57", "name": "Commented-code block (8 lines) in supabase/functions/_shared/rush-pricing.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/_shared/rush-pricing.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-5697803b27db1614", "name": "Commented-code block (6 lines) in supabase/functions/_shared/kiosk-auth.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/kiosk-auth.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b80a38fd2f1acc2", "name": "Commented-code block (6 lines) in supabase/functions/_shared/notify-counter.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/notify-counter.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-7b94d6342e2ecba4", "name": "Commented-code block (6 lines) in supabase/functions/_shared/ringcentral.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/ringcentral.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67e763af293ff639", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/ringcentral.ts:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/ringcentral.ts:89"}, "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-40bfd69038328246", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/word-to-pdf.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/word-to-pdf.ts:42"}, "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-1486bc36de12ef60", "name": "Commented-code block (5 lines) in supabase/functions/_shared/notify-vendor-assignment.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/notify-vendor-assignment.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-67ae650d12428633", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/tr-claude.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/tr-claude.ts:76"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-afee2391b9053d6d", "name": "Commented-code block (5 lines) in supabase/functions/_shared/multi-page-discount.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/multi-page-discount.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06c079814b0aeef4", "name": "Commented-code block (11 lines) in supabase/functions/_shared/notify-step-lifecycle.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in supabase/functions/_shared/notify-step-lifecycle.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-905c529ed15a53a1", "name": "Commented-code block (5 lines) in supabase/functions/_shared/affidavit-docx.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/affidavit-docx.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bc2f8d0414528ce", "name": "Commented-code block (6 lines) in supabase/functions/_shared/email-subject.ts:19", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/email-subject.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a34d4fb3ea216f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/google-auth.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/google-auth.ts:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54aef200508d7bf8", "name": "Commented-code block (12 lines) in supabase/functions/_shared/email-shell.ts:1", "shortDescription": {"text": "Commented-code block (12 lines) in supabase/functions/_shared/email-shell.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-4bad3e3feb134598", "name": "Commented-code block (7 lines) in supabase/functions/_shared/customer-quote.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/_shared/customer-quote.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f8991c027af3e26", "name": "Commented-code block (5 lines) in supabase/functions/_shared/iso-recheck.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/iso-recheck.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-f8c8b8c5a899b353", "name": "Commented-code block (6 lines) in supabase/functions/_shared/google-storage.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/google-storage.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ff3035d75eef71e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/google-storage.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/google-storage.ts:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff653107d53dbbed", "name": "Commented-code block (8 lines) in services/audio-extractor/index.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in services/audio-extractor/index.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f57efbc2bc78929c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/audio-extractor/index.js:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/audio-extractor/index.js:137"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f580fe35be20d1ae", "name": "Commented-code block (5 lines) in video/src/fonts.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in video/src/fonts.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-030da566069872e9", "name": "15 env vars used in code but missing from .env.example", "shortDescription": {"text": "15 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `EXTRACTOR_SECRET`, `MODE`, `NODE_ENV`, `PORT`, `RLS_TEST_CUSTOMER_EMAIL`, `RLS_TEST_CUSTOMER_ID`, `RLS_TEST_CUSTOMER_PASSWORD`, `SENTRY_AUTH_TOKEN` + 7 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cf7c4f0073c433a", "name": "Frontend route `/login/verify` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/login/verify` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bcc3a4b98db8594", "name": "Frontend route `/success` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/success` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29ce03c14ad66cd5", "name": "Frontend route `/quote/:quoteId/checkout` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/quote/:quoteId/checkout` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ef159696d1a67c6", "name": "Frontend route `/quote/:quoteId/review` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/quote/:quoteId/review` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-985a8b529109fcae", "name": "Frontend route `/quote/:quoteId/revision` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/quote/:quoteId/revision` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19591ec9f97b7b3d", "name": "Frontend route `/quote/confirmation` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/quote/confirmation` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be737aa51d43bbbc", "name": "Frontend route `/quote/saved` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/quote/saved` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af705a82c025fd22", "name": "Frontend route `/quote/:quoteId/continue` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/quote/:quoteId/continue` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4eabbf8dcb13a76d", "name": "Frontend route `/order/success` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/order/success` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53e42169e0dffee2", "name": "Frontend route `/order/confirmation/:quoteId` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/order/confirmation/:quoteId` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edb64d54044d35f7", "name": "Frontend route `/payment/cancel` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/payment/cancel` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1497a043c19c782e", "name": "Frontend route `/etransfer/confirm` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/etransfer/confirm` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eba85bdb7626773d", "name": "Frontend route `/etransfer/success` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/etransfer/success` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6bcb41e46058b1e2", "name": "Frontend route `/deposit-success` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/deposit-success` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e235bc0976af757", "name": "Frontend route `/customer/invoices` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/customer/invoices` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c7246d8667da98e", "name": "Frontend route `/upload/confirmation` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/upload/confirmation` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80c317121f51aa4b", "name": "Frontend route `/p/:code` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/p/:code` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f49add12a021f84d", "name": "Frontend route `/tr/share/:token` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/tr/share/:token` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-151f8dceb50630a7", "name": "Frontend route `/dashboard/quotes/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/dashboard/quotes/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81a55ca8794caf4f", "name": "Frontend route `/dashboard/orders/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/dashboard/orders/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-015f404febcabdb2", "name": "Frontend route `/dashboard/upload` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/dashboard/upload` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ddb8833a980b0493", "name": "Frontend route `/admin/reset-password` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `/admin/reset-password` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af5770299befad0d", "name": "Frontend route `dashboard` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d40b8ebd2ce4274", "name": "Frontend route `quotes` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `quotes` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0364b081e3105d15", "name": "Frontend route `quotes/fast-create` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `quotes/fast-create` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41bc705c5f194dc0", "name": "Frontend route `quotes/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `quotes/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-861121006c6f0e93", "name": "Frontend route `messages` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `messages` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b18267580468f5e", "name": "Frontend route `calls` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `calls` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2555b1180189d79b", "name": "Frontend route `call-intelligence` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `call-intelligence` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd5a5a0ee770d583", "name": "Frontend route `tasks` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `tasks` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b06fd6440f35b2d3", "name": "Frontend route `orders` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `orders` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d209b43f6a25c19a", "name": "Frontend route `orders/new` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `orders/new` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fece12edf7e84a9f", "name": "Frontend route `orders/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `orders/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f80034708ecca639", "name": "Frontend route `projects` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `projects` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e43d72d325e6551f", "name": "Frontend route `projects/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `projects/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a1540eca99c54952", "name": "Frontend route `tr/jobs` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `tr/jobs` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3383e673cc0b5a79", "name": "Frontend route `tr/jobs/new` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `tr/jobs/new` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c92680600020527c", "name": "Frontend route `tr/jobs/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `tr/jobs/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f04183e0de67926f", "name": "Frontend route `partners` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `partners` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-03d599aec531e9ff", "name": "Frontend route `settings` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4363be6d75653db", "name": "Frontend route `settings/purge-quotes` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/purge-quotes` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c07b1de095448a59", "name": "Frontend route `settings/sms-templates` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/sms-templates` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-304f59ec75734457", "name": "Frontend route `analytics` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7190b38a47a940cf", "name": "Frontend route `ai/analytics` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `ai/analytics` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74265a4ee4e132e2", "name": "Frontend route `patterns` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `patterns` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a38e427aae96e8d", "name": "Frontend route `learning` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `learning` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ead786b35ea7b9fe", "name": "Frontend route `thresholds` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `thresholds` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bce516053c6d777c", "name": "Frontend route `ai/knowledge` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `ai/knowledge` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc8509a076874075", "name": "Frontend route `staff` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `staff` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-43395297989648b1", "name": "Frontend route `kiosk-devices` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `kiosk-devices` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-203d0d6e1fff0bf4", "name": "Frontend route `reports` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `reports` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6715d20e64be26f", "name": "Frontend route `ar` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `ar` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5952b985d5d58971", "name": "Frontend route `customers` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `customers` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-486752a2e1770fea", "name": "Frontend route `customers/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `customers/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ce9a4205b0290ac", "name": "Frontend route `ocr-word-count` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `ocr-word-count` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65f62a7a66c481ee", "name": "Frontend route `ocr-word-count/:batchId` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `ocr-word-count/:batchId` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54b63c3a5561a017", "name": "Frontend route `preprocess-ocr` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `preprocess-ocr` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55d63810aa7f47eb", "name": "Frontend route `pdf-to-word` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `pdf-to-word` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4baa9b9b5c00f3b", "name": "Frontend route `public-submissions` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `public-submissions` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb35b4cb25971489", "name": "Frontend route `pdf-manager` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `pdf-manager` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d1fdac02f657d8f0", "name": "Frontend route `vendors` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `vendors` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-907f6e12f5a91838", "name": "Frontend route `vendors/new` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `vendors/new` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f9d03056ab0e673", "name": "Frontend route `vendors/:vendorId` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `vendors/:vendorId` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28b73e2504a30927", "name": "Frontend route `iso-quizzes` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `iso-quizzes` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74eff8e254987c33", "name": "Frontend route `sops` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `sops` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90acb594610687a0", "name": "Frontend route `sops/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `sops/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-734c2d3c9a2f285a", "name": "Frontend route `qms/queue` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `qms/queue` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d29b8171e77eba5", "name": "Frontend route `qms/staff` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `qms/staff` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46bbf52011f9c160", "name": "Frontend route `recruitment` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `recruitment` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4037e433ff631736", "name": "Frontend route `recruitment/system/regrade-backfill` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `recruitment/system/regrade-backfill` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb67e9fd4232652b", "name": "Frontend route `recruitment/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `recruitment/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b118ab44eab9f1b", "name": "Frontend route `trainings` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `trainings` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-984eb5c78a94b5a3", "name": "Frontend route `trainings/:slug` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `trainings/:slug` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57dceea03c6aac23", "name": "Frontend route `trainings/:slug/assign` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `trainings/:slug/assign` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b74a80030d1f1072", "name": "Frontend route `trainings/:slug/:lessonSlug` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `trainings/:slug/:lessonSlug` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-daa6d645324092b3", "name": "Frontend route `quick-payment` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `quick-payment` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c42a295de3e3457", "name": "Frontend route `quick-payment/history` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `quick-payment/history` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ecb153fef219fa93", "name": "Frontend route `payments` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `payments` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a1d44a84d1b180f8", "name": "Frontend route `vendor-payments` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `vendor-payments` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32a38d4d75a92bbd", "name": "Frontend route `ap` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `ap` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0bde9830d69a4aa", "name": "Frontend route `payments/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `payments/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-981d42a8778458d4", "name": "Frontend route `exchange-rates` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `exchange-rates` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-164893cd62661c61", "name": "Frontend route `reports/aging` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `reports/aging` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9b449bbc3542038", "name": "Frontend route `reports/tax` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `reports/tax` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-283f91fa08208176", "name": "Frontend route `invoices/vendor` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `invoices/vendor` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55dc26d44309db4b", "name": "Frontend route `invoices/portal` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `invoices/portal` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-944dcaf39f990a9d", "name": "Frontend route `invoices/customer` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `invoices/customer` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-04a2ef98e4ac5d42", "name": "Frontend route `invoices/create` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `invoices/create` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4414e0a72d2d9a63", "name": "Frontend route `invoices/customer/:invoiceId` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `invoices/customer/:invoiceId` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62c0586082455f8c", "name": "Frontend route `transcription` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `transcription` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-38357e8c099e47cc", "name": "Frontend route `transcription/:id` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `transcription/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f680c4e79ccc1b9", "name": "Frontend route `transcription/vendors` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `transcription/vendors` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ed602d66d41a1d6", "name": "Frontend route `settings/transcription` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/transcription` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-24a9b1654a8834ca", "name": "Frontend route `settings/pricing` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/pricing` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d358b7184163c764", "name": "Frontend route `settings/negotiation-automation` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/negotiation-automation` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-06227ad17d60de98", "name": "Frontend route `settings/complexity` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/complexity` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5d9441512ccaed8", "name": "Frontend route `settings/turnaround` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/turnaround` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6561690dff8bb248", "name": "Frontend route `settings/document-types` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/document-types` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91f384522726ae03", "name": "Frontend route `settings/certifications` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/certifications` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c5df97db49c055f", "name": "Frontend route `settings/delivery` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/delivery` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be6167d33107b80d", "name": "Frontend route `settings/tax` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/tax` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b61355deacd229cf", "name": "Frontend route `settings/hours` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/hours` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7bbbb9e8428c5b83", "name": "Frontend route `settings/holidays` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/holidays` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab1bcc7f93ede27f", "name": "Frontend route `settings/ai-prompts` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/ai-prompts` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e08e2a2787834ed", "name": "Frontend route `settings/ocr` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/ocr` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09a1b05d4575be39", "name": "Frontend route `settings/intended-uses` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/intended-uses` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f5859a98f04466f", "name": "Frontend route `settings/pickup-locations` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/pickup-locations` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a0c6dc4364da71b", "name": "Frontend route `settings/payment-methods` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/payment-methods` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1bea73f0fbd082fb", "name": "Frontend route `settings/same-day` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/same-day` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98c216793cd27577", "name": "Frontend route `settings/language-tiers` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/language-tiers` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81b334366493adbb", "name": "Frontend route `settings/languages` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/languages` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d99f97e80b0c8e80", "name": "Frontend route `settings/file-categories` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/file-categories` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62083bdca9417e94", "name": "Frontend route `settings/tracking` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/tracking` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d491b2e406393bb6", "name": "Frontend route `settings/services` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/services` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-abeef1209f184019", "name": "Frontend route `settings/workflows` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/workflows` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-729c4bb0a19dd422", "name": "Frontend route `settings/branches` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/branches` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d666eb7a79239e3", "name": "Frontend route `settings/dropbox` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/dropbox` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f3cd946bb7ffdb5", "name": "Frontend route `settings/call-recording` has no Link/navigate to it \u2014 client/App.tsx", "shortDescription": {"text": "Frontend route `settings/call-recording` has no Link/navigate to it \u2014 client/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-93f33082fca64dbe", "name": "Dangling fetch: GET https://ipapi.co/json/ (client/components/quote/Step4ReviewCheckout.tsx:1163)", "shortDescription": {"text": "Dangling fetch: GET https://ipapi.co/json/ (client/components/quote/Step4ReviewCheckout.tsx:1163)"}, "fullDescription": {"text": "`client/components/quote/Step4ReviewCheckout.tsx:1163` calls `GET https://ipapi.co/json/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ipapi.co/json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-130067d961cd36f1", "name": "Dangling fetch: POST https://lmzoyezvsjgsxveoakdr.supabase.co/functions/v1/handle-stripe-invoice-payment (client/pages/c", "shortDescription": {"text": "Dangling fetch: POST https://lmzoyezvsjgsxveoakdr.supabase.co/functions/v1/handle-stripe-invoice-payment (client/pages/customer/CustomerInvoicePayment.tsx:28)"}, "fullDescription": {"text": "`client/pages/customer/CustomerInvoicePayment.tsx:28` calls `POST https://lmzoyezvsjgsxveoakdr.supabase.co/functions/v1/handle-stripe-invoice-payment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/lmzoyezvsjgsxveoakdr.supabase.co/functions/v1/handle-stripe-invoice-payment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2a669d5ea03d624", "name": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (client/pages/admin/ExchangeRates.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (client/pages/admin/ExchangeRates.tsx:119)"}, "fullDescription": {"text": "`client/pages/admin/ExchangeRates.tsx:119` calls `GET https://open.er-api.com/v6/latest/USD` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.er-api.com/v6/latest/usd`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d1245163c70a9a1", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-step-draft-to-customer/index.ts:181)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-step-draft-to-customer/index.ts:181)"}, "fullDescription": {"text": "`supabase/functions/send-step-draft-to-customer/index.ts:181` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-368f7eaa11f0b100", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-final-deliverable/index.ts:362)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-final-deliverable/index.ts:362)"}, "fullDescription": {"text": "`supabase/functions/send-final-deliverable/index.ts:362` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fa4c79ed96884d7", "name": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (supabase/functions/fetch-exchange-rates/index.ts:37)", "shortDescription": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (supabase/functions/fetch-exchange-rates/index.ts:37)"}, "fullDescription": {"text": "`supabase/functions/fetch-exchange-rates/index.ts:37` calls `GET https://open.er-api.com/v6/latest/USD` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.er-api.com/v6/latest/usd`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7fff3ee7a84ca9c0", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-payment-email/index.ts:235)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-payment-email/index.ts:235)"}, "fullDescription": {"text": "`supabase/functions/send-payment-email/index.ts:235` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d415a4cc246139f0", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-proofread/index.ts:206)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-proofread/index.ts:206)"}, "fullDescription": {"text": "`supabase/functions/transcription-ai-proofread/index.ts:206` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b54ff92945fa1b31", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/cancel-order/index.ts:395)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/cancel-order/index.ts:395)"}, "fullDescription": {"text": "`supabase/functions/cancel-order/index.ts:395` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75d068da952e9e97", "name": "Dangling fetch: POST https://api.dropboxapi.com/oauth2/token (supabase/functions/dropbox-oauth/index.ts:67)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/oauth2/token (supabase/functions/dropbox-oauth/index.ts:67)"}, "fullDescription": {"text": "`supabase/functions/dropbox-oauth/index.ts:67` calls `POST https://api.dropboxapi.com/oauth2/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/oauth2/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6731a6dd765827e", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/users/get_current_account (supabase/functions/dropbox-oauth/index.ts:1", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/users/get_current_account (supabase/functions/dropbox-oauth/index.ts:100)"}, "fullDescription": {"text": "`supabase/functions/dropbox-oauth/index.ts:100` calls `POST https://api.dropboxapi.com/2/users/get_current_account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/users/get_current_account`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60d935379c9b2b99", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/auth/token/revoke (supabase/functions/dropbox-oauth/index.ts:187)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/auth/token/revoke (supabase/functions/dropbox-oauth/index.ts:187)"}, "fullDescription": {"text": "`supabase/functions/dropbox-oauth/index.ts:187` calls `POST https://api.dropboxapi.com/2/auth/token/revoke` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/auth/token/revoke`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-763c4b18da17e306", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/tr-vendor-share-create/index.ts:141)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/tr-vendor-share-create/index.ts:141)"}, "fullDescription": {"text": "`supabase/functions/tr-vendor-share-create/index.ts:141` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-722eb9b981c8961d", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/vendor-negotiate-counter/index.ts:481)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/vendor-negotiate-counter/index.ts:481)"}, "fullDescription": {"text": "`supabase/functions/vendor-negotiate-counter/index.ts:481` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b88ad0920fe932f", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/oauth2/token (supabase/functions/dropbox-files/index.ts:83)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/oauth2/token (supabase/functions/dropbox-files/index.ts:83)"}, "fullDescription": {"text": "`supabase/functions/dropbox-files/index.ts:83` calls `POST https://api.dropboxapi.com/2/oauth2/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/oauth2/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3007beeb47ee1d77", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/files/create_folder_v2 (supabase/functions/dropbox-files/index.ts:117)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/create_folder_v2 (supabase/functions/dropbox-files/index.ts:117)"}, "fullDescription": {"text": "`supabase/functions/dropbox-files/index.ts:117` calls `POST https://api.dropboxapi.com/2/files/create_folder_v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/files/create_folder_v2`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c79465fd422007e3", "name": "Dangling fetch: POST https://content.dropboxapi.com/2/files/upload (supabase/functions/dropbox-files/index.ts:145)", "shortDescription": {"text": "Dangling fetch: POST https://content.dropboxapi.com/2/files/upload (supabase/functions/dropbox-files/index.ts:145)"}, "fullDescription": {"text": "`supabase/functions/dropbox-files/index.ts:145` calls `POST https://content.dropboxapi.com/2/files/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/content.dropboxapi.com/<p>/files/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38011bba47a831ef", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/files/list_folder (supabase/functions/dropbox-files/index.ts:171)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/list_folder (supabase/functions/dropbox-files/index.ts:171)"}, "fullDescription": {"text": "`supabase/functions/dropbox-files/index.ts:171` calls `POST https://api.dropboxapi.com/2/files/list_folder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/files/list_folder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a54cf6b5839a39d6", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings (supabase/functions/dropbox-f", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings (supabase/functions/dropbox-files/index.ts:202)"}, "fullDescription": {"text": "`supabase/functions/dropbox-files/index.ts:202` calls `POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/sharing/create_shared_link_with_settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c1faf9859927553", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/list_shared_links (supabase/functions/dropbox-files/index.ts:2", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/list_shared_links (supabase/functions/dropbox-files/index.ts:221)"}, "fullDescription": {"text": "`supabase/functions/dropbox-files/index.ts:221` calls `POST https://api.dropboxapi.com/2/sharing/list_shared_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/sharing/list_shared_links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2d39556c0cfdb6a", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/files/get_metadata (supabase/functions/dropbox-files/index.ts:249)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/get_metadata (supabase/functions/dropbox-files/index.ts:249)"}, "fullDescription": {"text": "`supabase/functions/dropbox-files/index.ts:249` calls `POST https://api.dropboxapi.com/2/files/get_metadata` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/files/get_metadata`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f40404661d56e17", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-check/index.ts:60)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-check/index.ts:60)"}, "fullDescription": {"text": "`supabase/functions/transcription-ai-check/index.ts:60` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15814da770fb956d", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/rc-call-recording/index.ts:168)", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/rc-call-recording/index.ts:168)"}, "fullDescription": {"text": "`supabase/functions/rc-call-recording/index.ts:168` calls `POST https://api.elevenlabs.io/v1/speech-to-text` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.elevenlabs.io/v1/speech-to-text`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-febf16ef26505ac2", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-call-recording/index.ts:221)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-call-recording/index.ts:221)"}, "fullDescription": {"text": "`supabase/functions/rc-call-recording/index.ts:221` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6b0a04c4d3e8949", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/cal-integrations/index.ts:244)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/cal-integrations/index.ts:244)"}, "fullDescription": {"text": "`supabase/functions/cal-integrations/index.ts:244` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-152356a37aded057", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-customer-order-confirmed/index.ts:31", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-customer-order-confirmed/index.ts:315)"}, "fullDescription": {"text": "`supabase/functions/notify-customer-order-confirmed/index.ts:315` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22a18665b134d00e", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-vendor-instructions-changed/index.ts", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-vendor-instructions-changed/index.ts:150)"}, "fullDescription": {"text": "`supabase/functions/notify-vendor-instructions-changed/index.ts:150` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8def41daac81d401", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-activation-emails/index.ts:183)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-activation-emails/index.ts:183)"}, "fullDescription": {"text": "`supabase/functions/vendor-send-activation-emails/index.ts:183` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2ef83bab834910b", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-activation-emails/index.ts:315)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-activation-emails/index.ts:315)"}, "fullDescription": {"text": "`supabase/functions/vendor-send-activation-emails/index.ts:315` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78a46d1d313b799c", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-customer-message/index.ts:480)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-customer-message/index.ts:480)"}, "fullDescription": {"text": "`supabase/functions/send-customer-message/index.ts:480` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12f3a81b0db91f2a", "name": "Dangling fetch: POST https://api.stripe.com/v1/payment_links (supabase/functions/generate-quote-pdf/index.ts:386)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/payment_links (supabase/functions/generate-quote-pdf/index.ts:386)"}, "fullDescription": {"text": "`supabase/functions/generate-quote-pdf/index.ts:386` calls `POST https://api.stripe.com/v1/payment_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/payment_links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e6746947cb81c89", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/secure-upload-otp-send/index.ts:237)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/secure-upload-otp-send/index.ts:237)"}, "fullDescription": {"text": "`supabase/functions/secure-upload-otp-send/index.ts:237` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51502e03b85c476a", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-compare/index.ts:157)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-compare/index.ts:157)"}, "fullDescription": {"text": "`supabase/functions/transcription-ai-compare/index.ts:157` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-946f212842739cd4", "name": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (supabase/functions/transcription-upload/index.ts:315)", "shortDescription": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (supabase/functions/transcription-upload/index.ts:315)"}, "fullDescription": {"text": "`supabase/functions/transcription-upload/index.ts:315` calls `POST https://api.stripe.com/v1/checkout/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/v1/checkout/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43dde4ad041c192d", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-translate/index.ts:129)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-translate/index.ts:129)"}, "fullDescription": {"text": "`supabase/functions/transcription-ai-translate/index.ts:129` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cb62881819f6115", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/analyse-ocr-next/index.ts:233)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/analyse-ocr-next/index.ts:233)"}, "fullDescription": {"text": "`supabase/functions/analyse-ocr-next/index.ts:233` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c49c3de03a296c9", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/analyse-ocr-next/index.ts:532)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/analyse-ocr-next/index.ts:532)"}, "fullDescription": {"text": "`supabase/functions/analyse-ocr-next/index.ts:532` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41d05b17db666e85", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-acceptance-reminders/index.ts:221)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-acceptance-reminders/index.ts:221)"}, "fullDescription": {"text": "`supabase/functions/vendor-acceptance-reminders/index.ts:221` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bf60464efea679c", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-invoice-email/index.ts:349)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-invoice-email/index.ts:349)"}, "fullDescription": {"text": "`supabase/functions/send-invoice-email/index.ts:349` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35313c4b57400941", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-email/index.ts:64)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-email/index.ts:64)"}, "fullDescription": {"text": "`supabase/functions/send-email/index.ts:64` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd36d446e1054adb", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/cvp-suggest-vendor-rate/index.ts:187)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/cvp-suggest-vendor-rate/index.ts:187)"}, "fullDescription": {"text": "`supabase/functions/cvp-suggest-vendor-rate/index.ts:187` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-841b10004784c611", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-doc-request-reminder/index.ts:297)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-doc-request-reminder/index.ts:297)"}, "fullDescription": {"text": "`supabase/functions/vendor-doc-request-reminder/index.ts:297` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b668c3c77c333419", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/analyse-ocr-batch/index.ts:623)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/analyse-ocr-batch/index.ts:623)"}, "fullDescription": {"text": "`supabase/functions/analyse-ocr-batch/index.ts:623` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-307f263f3724ba4d", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/stripe-webhook/index.ts:64)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/stripe-webhook/index.ts:64)"}, "fullDescription": {"text": "`supabase/functions/stripe-webhook/index.ts:64` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11da7f5e2914943d", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-auth-otp-send/index.ts:220)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-auth-otp-send/index.ts:220)"}, "fullDescription": {"text": "`supabase/functions/vendor-auth-otp-send/index.ts:220` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d349fed9f594387d", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-auth-otp-send/index.ts:306)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-auth-otp-send/index.ts:306)"}, "fullDescription": {"text": "`supabase/functions/vendor-auth-otp-send/index.ts:306` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc864f73eb715fca", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/qms-auto-qualify/index.ts:107)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/qms-auto-qualify/index.ts:107)"}, "fullDescription": {"text": "`supabase/functions/qms-auto-qualify/index.ts:107` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eca09764bb04bc30", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1034)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1034)"}, "fullDescription": {"text": "`supabase/functions/review-draft-file/index.ts:1034` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0554dc20b775719", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1096)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1096)"}, "fullDescription": {"text": "`supabase/functions/review-draft-file/index.ts:1096` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02386beb4b65ff85", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1160)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1160)"}, "fullDescription": {"text": "`supabase/functions/review-draft-file/index.ts:1160` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a869783e892c2560", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1266)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1266)"}, "fullDescription": {"text": "`supabase/functions/review-draft-file/index.ts:1266` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd12df65aef1278d", "name": "Dangling fetch: GET https://us.sentry.io/api/0/projects/${SENTRY_ORG}/${project}/issues/?query=is:unresolved&sort=date&l", "shortDescription": {"text": "Dangling fetch: GET https://us.sentry.io/api/0/projects/${SENTRY_ORG}/${project}/issues/?query=is:unresolved&sort=date&limit=25 (supabase/functions/check-open-issues/index.ts:54)"}, "fullDescription": {"text": "`supabase/functions/check-open-issues/index.ts:54` calls `GET https://us.sentry.io/api/0/projects/${SENTRY_ORG}/${project}/issues/?query=is:unresolved&sort=date&limit=25` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/us.sentry.io/api/<p>/projects/<p>/<p>/issues`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d61a7d70d52607f3", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/upload-complete/index.ts:549)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/upload-complete/index.ts:549)"}, "fullDescription": {"text": "`supabase/functions/upload-complete/index.ts:549` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7477c5210e6f6c2", "name": "Dangling fetch: POST https://api.assemblyai.com/v2/transcript (supabase/functions/transcription-process/index.ts:956)", "shortDescription": {"text": "Dangling fetch: POST https://api.assemblyai.com/v2/transcript (supabase/functions/transcription-process/index.ts:956)"}, "fullDescription": {"text": "`supabase/functions/transcription-process/index.ts:956` calls `POST https://api.assemblyai.com/v2/transcript` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.assemblyai.com/v2/transcript`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96baebe7f46ffad1", "name": "Dangling fetch: GET https://api.assemblyai.com/v2/transcript/${transcriptId} (supabase/functions/transcription-process/i", "shortDescription": {"text": "Dangling fetch: GET https://api.assemblyai.com/v2/transcript/${transcriptId} (supabase/functions/transcription-process/index.ts:980)"}, "fullDescription": {"text": "`supabase/functions/transcription-process/index.ts:980` calls `GET https://api.assemblyai.com/v2/transcript/${transcriptId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.assemblyai.com/v2/transcript/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5242e1c5c7b0c8ef", "name": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (supabase/functions/transcription-process/index.ts:1", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (supabase/functions/transcription-process/index.ts:1041)"}, "fullDescription": {"text": "`supabase/functions/transcription-process/index.ts:1041` calls `POST https://api.openai.com/v1/audio/transcriptions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/audio/transcriptions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-387936bda374d1de", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/transcription-process/index.ts:1105", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/transcription-process/index.ts:1105)"}, "fullDescription": {"text": "`supabase/functions/transcription-process/index.ts:1105` calls `POST https://api.elevenlabs.io/v1/speech-to-text` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.elevenlabs.io/v1/speech-to-text`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e6e39f5d3e298cf", "name": "Dangling fetch: POST https://api.deepgram.com/v1/listen?${params.toString()} (supabase/functions/transcription-process/i", "shortDescription": {"text": "Dangling fetch: POST https://api.deepgram.com/v1/listen?${params.toString()} (supabase/functions/transcription-process/index.ts:1161)"}, "fullDescription": {"text": "`supabase/functions/transcription-process/index.ts:1161` calls `POST https://api.deepgram.com/v1/listen?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.deepgram.com/v1/listen`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71a97209c250e974", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-process/index.ts:1728)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-process/index.ts:1728)"}, "fullDescription": {"text": "`supabase/functions/transcription-process/index.ts:1728` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b24b5553220b0dec", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-process/index.ts:1811)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-process/index.ts:1811)"}, "fullDescription": {"text": "`supabase/functions/transcription-process/index.ts:1811` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c019db9d263eefe", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-customer-quote-ack/index.ts:276)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-customer-quote-ack/index.ts:276)"}, "fullDescription": {"text": "`supabase/functions/notify-customer-quote-ack/index.ts:276` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abddd1d9c7e81833", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-deadline-reminders/index.ts:192)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-deadline-reminders/index.ts:192)"}, "fullDescription": {"text": "`supabase/functions/vendor-deadline-reminders/index.ts:192` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43eb54734298a1e6", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-cv-nda-reminder/index.ts:228)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-cv-nda-reminder/index.ts:228)"}, "fullDescription": {"text": "`supabase/functions/vendor-send-cv-nda-reminder/index.ts:228` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2732ca3f97cf9e32", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-cv-nda-reminder/index.ts:410)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-cv-nda-reminder/index.ts:410)"}, "fullDescription": {"text": "`supabase/functions/vendor-send-cv-nda-reminder/index.ts:410` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c884b750a1cf3053", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-deposit-reminder/index.ts:238)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-deposit-reminder/index.ts:238)"}, "fullDescription": {"text": "`supabase/functions/send-deposit-reminder/index.ts:238` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-633724f4b036c7cc", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-call-intelligence-report/index.ts:221)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-call-intelligence-report/index.ts:221)"}, "fullDescription": {"text": "`supabase/functions/rc-call-intelligence-report/index.ts:221` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cde24150772a024b", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/rc-call-intelligence-report/index.ts:287)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/rc-call-intelligence-report/index.ts:287)"}, "fullDescription": {"text": "`supabase/functions/rc-call-intelligence-report/index.ts:287` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c10c4dd9bb207561", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/generate-order-instructions/index.ts:283)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/generate-order-instructions/index.ts:283)"}, "fullDescription": {"text": "`supabase/functions/generate-order-instructions/index.ts:283` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-382cac78ba8b7a2e", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/generate-order-instructions/index.ts:314)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/generate-order-instructions/index.ts:314)"}, "fullDescription": {"text": "`supabase/functions/generate-order-instructions/index.ts:314` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80d96c76cbb1ba83", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/staff-submit-bug-report/index.ts:140)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/staff-submit-bug-report/index.ts:140)"}, "fullDescription": {"text": "`supabase/functions/staff-submit-bug-report/index.ts:140` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dae0011359181e8e", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/qms-request-documents-bulk/index.ts:97)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/qms-request-documents-bulk/index.ts:97)"}, "fullDescription": {"text": "`supabase/functions/qms-request-documents-bulk/index.ts:97` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29b3eedb65986409", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/negotiation-hitl-reminder/index.ts:174)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/negotiation-hitl-reminder/index.ts:174)"}, "fullDescription": {"text": "`supabase/functions/negotiation-hitl-reminder/index.ts:174` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7e5e03f58c8b7f3", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-staff-new-lead/index.ts:292)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-staff-new-lead/index.ts:292)"}, "fullDescription": {"text": "`supabase/functions/notify-staff-new-lead/index.ts:292` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1fbcf5ecd7bf5a42", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-customer-login-otp/index.ts:212)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-customer-login-otp/index.ts:212)"}, "fullDescription": {"text": "`supabase/functions/send-customer-login-otp/index.ts:212` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af54bde987b65317", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-quote-link-email/index.ts:403)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-quote-link-email/index.ts:403)"}, "fullDescription": {"text": "`supabase/functions/send-quote-link-email/index.ts:403` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ffa2feb6d1f319c", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/customer-approve-quote-ar/index.ts:55)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/customer-approve-quote-ar/index.ts:55)"}, "fullDescription": {"text": "`supabase/functions/customer-approve-quote-ar/index.ts:55` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbfb40ff691b6a62", "name": "Dangling fetch: POST https://content.dropboxapi.com/2/files/upload (supabase/functions/dropbox-sync/index.ts:225)", "shortDescription": {"text": "Dangling fetch: POST https://content.dropboxapi.com/2/files/upload (supabase/functions/dropbox-sync/index.ts:225)"}, "fullDescription": {"text": "`supabase/functions/dropbox-sync/index.ts:225` calls `POST https://content.dropboxapi.com/2/files/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/content.dropboxapi.com/<p>/files/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be3e3de9d9148ca7", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings (supabase/functions/dropbox-s", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings (supabase/functions/dropbox-sync/index.ts:345)"}, "fullDescription": {"text": "`supabase/functions/dropbox-sync/index.ts:345` calls `POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/sharing/create_shared_link_with_settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8efa537ceeaa4bc3", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/list_shared_links (supabase/functions/dropbox-sync/index.ts:36", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/list_shared_links (supabase/functions/dropbox-sync/index.ts:368)"}, "fullDescription": {"text": "`supabase/functions/dropbox-sync/index.ts:368` calls `POST https://api.dropboxapi.com/2/sharing/list_shared_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/sharing/list_shared_links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c82c1e1347972e77", "name": "Dangling fetch: POST https://api.dropboxapi.com/2/files/create_folder_v2 (supabase/functions/dropbox-sync/index.ts:615)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/create_folder_v2 (supabase/functions/dropbox-sync/index.ts:615)"}, "fullDescription": {"text": "`supabase/functions/dropbox-sync/index.ts:615` calls `POST https://api.dropboxapi.com/2/files/create_folder_v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/<p>/files/create_folder_v2`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-963933d27b7fafd3", "name": "Dangling fetch: POST https://api.dropboxapi.com/oauth2/token (supabase/functions/dropbox-sync/index.ts:759)", "shortDescription": {"text": "Dangling fetch: POST https://api.dropboxapi.com/oauth2/token (supabase/functions/dropbox-sync/index.ts:759)"}, "fullDescription": {"text": "`supabase/functions/dropbox-sync/index.ts:759` calls `POST https://api.dropboxapi.com/oauth2/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.dropboxapi.com/oauth2/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2748c7e3601ceb0", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/rc-auto-transcribe/index.ts:184)", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/rc-auto-transcribe/index.ts:184)"}, "fullDescription": {"text": "`supabase/functions/rc-auto-transcribe/index.ts:184` calls `POST https://api.elevenlabs.io/v1/speech-to-text` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.elevenlabs.io/v1/speech-to-text`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42914ce4f7f78162", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-auto-transcribe/index.ts:219)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-auto-transcribe/index.ts:219)"}, "fullDescription": {"text": "`supabase/functions/rc-auto-transcribe/index.ts:219` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce9039837b57b0b6", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-staff-message/index.ts:405)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-staff-message/index.ts:405)"}, "fullDescription": {"text": "`supabase/functions/send-staff-message/index.ts:405` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f12709eca525308", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/ocr-process-next/index.ts:444)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/ocr-process-next/index.ts:444)"}, "fullDescription": {"text": "`supabase/functions/ocr-process-next/index.ts:444` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f975ef01a829874", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/ocr-process-next/index.ts:546)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/ocr-process-next/index.ts:546)"}, "fullDescription": {"text": "`supabase/functions/ocr-process-next/index.ts:546` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e811ed599b23e74d", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/kiosk-send-quote-email/index.ts:123)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/kiosk-send-quote-email/index.ts:123)"}, "fullDescription": {"text": "`supabase/functions/kiosk-send-quote-email/index.ts:123` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1367fea6ed719147", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/parse-cat-analysis/index.ts:259)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/parse-cat-analysis/index.ts:259)"}, "fullDescription": {"text": "`supabase/functions/parse-cat-analysis/index.ts:259` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74972bfe67f32e8f", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-request-documents/index.ts:291)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-request-documents/index.ts:291)"}, "fullDescription": {"text": "`supabase/functions/vendor-request-documents/index.ts:291` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-455b1436b898cd3b", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/create-deposit-payment-link/index.ts:297)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/create-deposit-payment-link/index.ts:297)"}, "fullDescription": {"text": "`supabase/functions/create-deposit-payment-link/index.ts:297` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-777be23c01973247", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/vendor-iso17100-assess/index.ts:226)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/vendor-iso17100-assess/index.ts:226)"}, "fullDescription": {"text": "`supabase/functions/vendor-iso17100-assess/index.ts:226` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9059fd6b32534d4b", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-staff-assignment.ts:170)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-staff-assignment.ts:170)"}, "fullDescription": {"text": "`supabase/functions/_shared/notify-staff-assignment.ts:170` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54e9e13718f6ae8d", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-counter.ts:102)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-counter.ts:102)"}, "fullDescription": {"text": "`supabase/functions/_shared/notify-counter.ts:102` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37a87a6b62998fe3", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-vendor-assignment.ts:335)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-vendor-assignment.ts:335)"}, "fullDescription": {"text": "`supabase/functions/_shared/notify-vendor-assignment.ts:335` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3107288b8fce8791", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-vendor-assignment.ts:587)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-vendor-assignment.ts:587)"}, "fullDescription": {"text": "`supabase/functions/_shared/notify-vendor-assignment.ts:587` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a9f3524ac99adeb", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-step-lifecycle.ts:165)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-step-lifecycle.ts:165)"}, "fullDescription": {"text": "`supabase/functions/_shared/notify-step-lifecycle.ts:165` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94e958793d6d9baf", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/_shared/google-auth.ts:69)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/_shared/google-auth.ts:69)"}, "fullDescription": {"text": "`supabase/functions/_shared/google-auth.ts:69` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47a5aa94f081140b", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/_shared/google-auth.ts:166)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/_shared/google-auth.ts:166)"}, "fullDescription": {"text": "`supabase/functions/_shared/google-auth.ts:166` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-670849995b517221", "name": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/transcription.ts:185)", "shortDescription": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/transcription.ts:185)"}, "fullDescription": {"text": "`supabase/functions/_shared/transcription.ts:185` calls `POST https://api.brevo.com/v3/smtp/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.brevo.com/v3/smtp/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-430bc25028626fd6", "name": "Dangling fetch: POST https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(name)} (supabase/functions/_shared", "shortDescription": {"text": "Dangling fetch: POST https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(name)} (supabase/functions/_shared/google-storage.ts:48)"}, "fullDescription": {"text": "`supabase/functions/_shared/google-storage.ts:48` calls `POST https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/storage.googleapis.com/storage/v1/b/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ad31ca02edfad72", "name": "Dangling fetch: DELETE https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(bucket)}/o/${encodeURIComponent(", "shortDescription": {"text": "Dangling fetch: DELETE https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(bucket)}/o/${encodeURIComponent(objectName)} (supabase/functions/_shared/google-storage.ts:114)"}, "fullDescription": {"text": "`supabase/functions/_shared/google-storage.ts:114` calls `DELETE https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(bucket)}/o/${encodeURIComponent(objectName)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/storage.googleapis.com/storage/v1/b/<p>/o/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af4de720f651079e", "name": "Unused endpoint: POST /extract", "shortDescription": {"text": "Unused endpoint: POST /extract"}, "fullDescription": {"text": "`services/audio-extractor/index.js` declares `POST /extract` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-684f0e83ba7e1558", "name": "Unused endpoint: GET ", "shortDescription": {"text": "Unused endpoint: GET "}, "fullDescription": {"text": "`client/pages/customer/CustomerDocuments.tsx` declares `GET ` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c93b82c283e36ca", "name": "Unused endpoint: GET /api/ping", "shortDescription": {"text": "Unused endpoint: GET /api/ping"}, "fullDescription": {"text": "`server/index.ts` declares `GET /api/ping` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa64b09a918e9a24", "name": "Unused endpoint: GET /api/demo", "shortDescription": {"text": "Unused endpoint: GET /api/demo"}, "fullDescription": {"text": "`server/index.ts` declares `GET /api/demo` 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/20211"}, "properties": {"repository": "ssraminder/cethos_app_figma_design_v1", "repoUrl": "https://github.com/ssraminder/cethos_app_figma_design_v1", "branch": "main"}, "results": [{"ruleId": "scanner-479d4a12d15c54ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/utils/navigationHelpers.ts:18"}, "properties": {"repobilityId": "16a33f6107ff2a37", "scanner": "scanner-primary", "fingerprint": "479d4a12d15c54ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-769d9abdab54f0c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/utils/compressPdf.ts:20"}, "properties": {"repobilityId": "ec4949275d3868bc", "scanner": "scanner-primary", "fingerprint": "769d9abdab54f0c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13b55ea9aa645004", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/SearchableDropdown.tsx:191"}, "properties": {"repobilityId": "d03d876234ce1b44", "scanner": "scanner-primary", "fingerprint": "13b55ea9aa645004", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f435c8de83195f28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/SaveForLater.tsx:10"}, "properties": {"repobilityId": "8536b2daca8f50ae", "scanner": "scanner-primary", "fingerprint": "f435c8de83195f28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a81ce8d606427e19", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/FileUpload.tsx:390"}, "properties": {"repobilityId": "337ac54d81db501c", "scanner": "scanner-primary", "fingerprint": "a81ce8d606427e19", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2f00c3100bbbf00", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/DocumentPricingCard.tsx:26"}, "properties": {"repobilityId": "11fca5d11383dacf", "scanner": "scanner-primary", "fingerprint": "b2f00c3100bbbf00", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c53e0650226cfe5e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 client/components/CorrectionReasonModal.tsx:117"}, "properties": {"repobilityId": "be8d74535e0b3edb", "scanner": "scanner-primary", "fingerprint": "c53e0650226cfe5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-725cf862b293b109", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/upload/UploadStep1.tsx:30"}, "properties": {"repobilityId": "ad9aacad4a3b8508", "scanner": "scanner-primary", "fingerprint": "725cf862b293b109", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c913adc58317a7fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/quote/Step3Contact.tsx:145"}, "properties": {"repobilityId": "b492f8313418deb4", "scanner": "scanner-primary", "fingerprint": "c913adc58317a7fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d5ede5f7f5b448e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/quote/Step1Upload.tsx:758"}, "properties": {"repobilityId": "975fe2283d0d2ca9", "scanner": "scanner-primary", "fingerprint": "3d5ede5f7f5b448e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-48e972217deabe10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/quote/Step4ReviewCheckout.tsx:419"}, "properties": {"repobilityId": "44083d8666fdfcd6", "scanner": "scanner-primary", "fingerprint": "48e972217deabe10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-172e8beb4f5557aa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/SearchableSelect.tsx:346"}, "properties": {"repobilityId": "d28016ec173a2ff5", "scanner": "scanner-primary", "fingerprint": "172e8beb4f5557aa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e4a616531efc91e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/AnalyzeDocumentModal.tsx:194"}, "properties": {"repobilityId": "d1e8f3726441cefd", "scanner": "scanner-primary", "fingerprint": "9e4a616531efc91e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f99f7a90e9cd894f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/EditableDocumentAnalysisPanel.tsx:445"}, "properties": {"repobilityId": "eb7cdacb803bd379", "scanner": "scanner-primary", "fingerprint": "f99f7a90e9cd894f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2fdbf709935c0cf7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/OcrResultsModal.tsx:3474"}, "properties": {"repobilityId": "e245547afd55485b", "scanner": "scanner-primary", "fingerprint": "2fdbf709935c0cf7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd355f03dacd3c81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/analysis/OcrResultsModal.tsx:903"}, "properties": {"repobilityId": "4b80578650d0a20f", "scanner": "scanner-primary", "fingerprint": "fd355f03dacd3c81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2071a565d7940315", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/DocumentAnalysisPanel.tsx:124"}, "properties": {"repobilityId": "e1e2fd65b33f34d1", "scanner": "scanner-primary", "fingerprint": "2071a565d7940315", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-614538c51d6f8cfa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/analysis/ManualEntryModal.tsx:532"}, "properties": {"repobilityId": "e1a54be3cf1c7deb", "scanner": "scanner-primary", "fingerprint": "614538c51d6f8cfa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-352410c78404b504", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/analysis/ManualEntryModal.tsx:332"}, "properties": {"repobilityId": "14fc9150de2f788a", "scanner": "scanner-primary", "fingerprint": "352410c78404b504", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1a6bc296e7c97a1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-flow/components/UploadZone.tsx:148"}, "properties": {"repobilityId": "53db124b606175db", "scanner": "scanner-primary", "fingerprint": "a1a6bc296e7c97a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61ed18443b7d8dd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-flow/hooks/useDocumentFlow.ts:197"}, "properties": {"repobilityId": "618fda0630dca608", "scanner": "scanner-primary", "fingerprint": "61ed18443b7d8dd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a59a9f61b5680dab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-groups/DocumentGroupEditor.tsx:411"}, "properties": {"repobilityId": "b0a043bea09f6cc6", "scanner": "scanner-primary", "fingerprint": "a59a9f61b5680dab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8301daa7bfea4dbb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-groups/UnassignedItemsPool.tsx:101"}, "properties": {"repobilityId": "18fbf2e193e2996c", "scanner": "scanner-primary", "fingerprint": "8301daa7bfea4dbb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bfb13d0f48d517b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/FileCard.tsx:164"}, "properties": {"repobilityId": "31972fd104fad026", "scanner": "scanner-primary", "fingerprint": "bfb13d0f48d517b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-637f8991d1881807", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/FileCard.tsx:373"}, "properties": {"repobilityId": "620249596a38cca4", "scanner": "scanner-primary", "fingerprint": "637f8991d1881807", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a3d860b85ae97663", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/FileCard.tsx:374"}, "properties": {"repobilityId": "8435f6c68e6b9d31", "scanner": "scanner-primary", "fingerprint": "a3d860b85ae97663", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78573b0016404078", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/FileListWithGroups.tsx:103"}, "properties": {"repobilityId": "33b8c888e196e80f", "scanner": "scanner-primary", "fingerprint": "78573b0016404078", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3a02ccd63d7ab586", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/FileListWithGroups.tsx:102"}, "properties": {"repobilityId": "8dd22155e50aaa14", "scanner": "scanner-primary", "fingerprint": "3a02ccd63d7ab586", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-024b05ab654b3be8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:954"}, "properties": {"repobilityId": "5f82ec688fec59d4", "scanner": "scanner-primary", "fingerprint": "024b05ab654b3be8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c8d0a0c35968a2ed", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:738"}, "properties": {"repobilityId": "609de63f74676574", "scanner": "scanner-primary", "fingerprint": "c8d0a0c35968a2ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1562eec97847b2a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/shared/document-editor/UnifiedDocumentEditor.tsx:739"}, "properties": {"repobilityId": "8b31cb3b296b463a", "scanner": "scanner-primary", "fingerprint": "1562eec97847b2a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ace1dd432635de37", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/shared/document-editor/DocumentGroupsSummary.tsx:149"}, "properties": {"repobilityId": "6efd88ccc715789b", "scanner": "scanner-primary", "fingerprint": "ace1dd432635de37", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13f4afbe2a23abcb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/components/ui/chart.tsx:79"}, "properties": {"repobilityId": "7fccb5e33b5d9508", "scanner": "scanner-primary", "fingerprint": "13f4afbe2a23abcb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8b0c64c1097c43a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/customer/ImpersonationBanner.tsx:28"}, "properties": {"repobilityId": "07c33eed8bea0b7b", "scanner": "scanner-primary", "fingerprint": "8b0c64c1097c43a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed98c45e725fe94e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/customer/CustomerUploadWidget.tsx:364"}, "properties": {"repobilityId": "1525c95b411af623", "scanner": "scanner-primary", "fingerprint": "ed98c45e725fe94e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd0c514df8c0e324", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/FileListPanel.tsx:59"}, "properties": {"repobilityId": "baf2ddf04623e260", "scanner": "scanner-primary", "fingerprint": "cd0c514df8c0e324", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d14ec7fbbcbf8848", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/InsertPagesDialog.tsx:131"}, "properties": {"repobilityId": "ef4fbd89c90cb652", "scanner": "scanner-primary", "fingerprint": "d14ec7fbbcbf8848", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a8d7139dc30d58a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/AnnotationSidebar.tsx:108"}, "properties": {"repobilityId": "14c835464ad2c432", "scanner": "scanner-primary", "fingerprint": "5a8d7139dc30d58a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33daddad93485f49", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/pdf-manager/FolderTree.tsx:100"}, "properties": {"repobilityId": "4f9c91bbef3932b2", "scanner": "scanner-primary", "fingerprint": "33daddad93485f49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab3a64ad62b29148", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderUploadModal.tsx:185"}, "properties": {"repobilityId": "409adaf1e24c71c0", "scanner": "scanner-primary", "fingerprint": "ab3a64ad62b29148", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcfbadaaa510a1be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderFinanceSection.tsx:593"}, "properties": {"repobilityId": "c7dbd82db4c96c8c", "scanner": "scanner-primary", "fingerprint": "bcfbadaaa510a1be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfcd904b68d38686", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/EditOrderModal.tsx:598"}, "properties": {"repobilityId": "e06c3eac34832c00", "scanner": "scanner-primary", "fingerprint": "dfcd904b68d38686", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-239124bc917efe8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OcrAnalysisModal.tsx:219"}, "properties": {"repobilityId": "5686acc2830cf887", "scanner": "scanner-primary", "fingerprint": "239124bc917efe8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-79b3a0a40810c047", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/QuoteActivityFeed.tsx:392"}, "properties": {"repobilityId": "f736ea0e026bde30", "scanner": "scanner-primary", "fingerprint": "79b3a0a40810c047", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9eeca9dd31434438", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/WorkflowPipeline.tsx:2754"}, "properties": {"repobilityId": "eadebae64cdbd319", "scanner": "scanner-primary", "fingerprint": "9eeca9dd31434438", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ce6c19bdcf1d215", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/CustomerFilesTab.tsx:390"}, "properties": {"repobilityId": "f531369afc6f8e17", "scanner": "scanner-primary", "fingerprint": "1ce6c19bdcf1d215", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a912b27489ec3b21", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/components/admin/VendorActivationEmailModal.tsx:321"}, "properties": {"repobilityId": "9f8f3b2313a811cc", "scanner": "scanner-primary", "fingerprint": "a912b27489ec3b21", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-069ad69eb231d887", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/SplitStepModal.tsx:353"}, "properties": {"repobilityId": "9e99eaa9b311837e", "scanner": "scanner-primary", "fingerprint": "069ad69eb231d887", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bec9e8a16014efba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OriginalsModal.tsx:134"}, "properties": {"repobilityId": "5f086d10b6b4ec1a", "scanner": "scanner-primary", "fingerprint": "bec9e8a16014efba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f017fd4370493d2", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 client/components/admin/UnassignVendorModal.tsx:100"}, "properties": {"repobilityId": "0012ffc7de8abfda", "scanner": "scanner-primary", "fingerprint": "4f017fd4370493d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-5db03f2975ca6f07", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderCommunicationsTab.tsx:585"}, "properties": {"repobilityId": "efd2ef1eaeaf90e3", "scanner": "scanner-primary", "fingerprint": "5db03f2975ca6f07", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68f6e66eb0cfb668", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderFinanceTab.tsx:677"}, "properties": {"repobilityId": "d61abdf0007b9e47", "scanner": "scanner-primary", "fingerprint": "68f6e66eb0cfb668", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d167b83a14cf1cee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/VendorActivationDripProgress.tsx:272"}, "properties": {"repobilityId": "dc648ee34039f071", "scanner": "scanner-primary", "fingerprint": "d167b83a14cf1cee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2972325a52ed3039", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/NotificationProvider.tsx:339"}, "properties": {"repobilityId": "0a9d2d1f6e834fd9", "scanner": "scanner-primary", "fingerprint": "2972325a52ed3039", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c663b67bc0081456", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/admin/NotificationProvider.tsx:45"}, "properties": {"repobilityId": "1a0d43e4efbd5928", "scanner": "scanner-primary", "fingerprint": "c663b67bc0081456", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d2ec8f921000f78", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/CustomerRatesTab.tsx:625"}, "properties": {"repobilityId": "6134758f7468918a", "scanner": "scanner-primary", "fingerprint": "8d2ec8f921000f78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9410b603c5ae9f3f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/OrderInvoiceCard.tsx:800"}, "properties": {"repobilityId": "13ed51a32f337ba1", "scanner": "scanner-primary", "fingerprint": "9410b603c5ae9f3f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e93a8bd0fef8955f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/EditDocumentModal.tsx:180"}, "properties": {"repobilityId": "ac29a746b6677975", "scanner": "scanner-primary", "fingerprint": "e93a8bd0fef8955f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6fab27449382304e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/DocumentPreviewModal.tsx:86"}, "properties": {"repobilityId": "ace71ae3af6fb239", "scanner": "scanner-primary", "fingerprint": "6fab27449382304e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0632d9d223b76b7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/MessageCustomerModal.tsx:381"}, "properties": {"repobilityId": "7554180e2992dc18", "scanner": "scanner-primary", "fingerprint": "0632d9d223b76b7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce235f0916653d3a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/admin/MessageCustomerModal.tsx:152"}, "properties": {"repobilityId": "4db5c2a2fa64f21b", "scanner": "scanner-primary", "fingerprint": "ce235f0916653d3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f721e52a3927faa2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/admin/AdminLayout.tsx:633"}, "properties": {"repobilityId": "7e39831418310d96", "scanner": "scanner-primary", "fingerprint": "f721e52a3927faa2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c9ad39f3f9e4609", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/steps/Step1Upload.tsx:30"}, "properties": {"repobilityId": "08a4c59afd89e64a", "scanner": "scanner-primary", "fingerprint": "0c9ad39f3f9e4609", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1d7ab50d37c21a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/messaging/MessageComposer.tsx:204"}, "properties": {"repobilityId": "7052e03db459e7dd", "scanner": "scanner-primary", "fingerprint": "b1d7ab50d37c21a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-975d7f07a5d61f1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/messaging/MessagePanel.tsx:293"}, "properties": {"repobilityId": "28b07bb05e8c4956", "scanner": "scanner-primary", "fingerprint": "975d7f07a5d61f1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1045072f15b7382b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/components/messaging/MessagePanel.tsx:40"}, "properties": {"repobilityId": "7d59bb214a721cc9", "scanner": "scanner-primary", "fingerprint": "1045072f15b7382b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-198d585764551d5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/components/layouts/CustomerLayout.tsx:178"}, "properties": {"repobilityId": "51f09edc5ac4f4a9", "scanner": "scanner-primary", "fingerprint": "198d585764551d5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2665f4201eb51efb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/lib/supabase.ts:32"}, "properties": {"repobilityId": "c6c127c96b90631f", "scanner": "scanner-primary", "fingerprint": "2665f4201eb51efb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d782e7af09d1849", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/quote/QuoteContinuePage.tsx:123"}, "properties": {"repobilityId": "4f599f32c51687d3", "scanner": "scanner-primary", "fingerprint": "2d782e7af09d1849", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c91af6a7d857b447", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/quote/QuoteRevisionPage.tsx:324"}, "properties": {"repobilityId": "e8816a4e52016805", "scanner": "scanner-primary", "fingerprint": "c91af6a7d857b447", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb1de2bf57a94d7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerUpload.tsx:406"}, "properties": {"repobilityId": "99dd9f50dbfcb347", "scanner": "scanner-primary", "fingerprint": "cb1de2bf57a94d7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1da42bd537ec6dd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/customer/CustomerMessages.tsx:201"}, "properties": {"repobilityId": "4f1b49628d0f02bd", "scanner": "scanner-primary", "fingerprint": "1da42bd537ec6dd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04247293ea54123b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerDashboard.tsx:193"}, "properties": {"repobilityId": "489dc6766d5ed9dd", "scanner": "scanner-primary", "fingerprint": "04247293ea54123b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2b43cd1a8449783", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/customer/CustomerDocuments.tsx:336"}, "properties": {"repobilityId": "f4583b99eaeb7eec", "scanner": "scanner-primary", "fingerprint": "a2b43cd1a8449783", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cc120809253b855", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 client/pages/admin/AdminIsoQuizzes.tsx:309"}, "properties": {"repobilityId": "351a2671843d211c", "scanner": "scanner-primary", "fingerprint": "1cc120809253b855", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-7a6ad15b2aa469b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/PublicSubmissionsPage.tsx:726"}, "properties": {"repobilityId": "987985b73c7a47f0", "scanner": "scanner-primary", "fingerprint": "7a6ad15b2aa469b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f099620af6e7b5d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminCreateOrder.tsx:2187"}, "properties": {"repobilityId": "4e5764024f37103d", "scanner": "scanner-primary", "fingerprint": "f099620af6e7b5d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53b64c871c6ee566", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminDashboard.tsx:492"}, "properties": {"repobilityId": "8376ac3363790446", "scanner": "scanner-primary", "fingerprint": "53b64c871c6ee566", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c0ea981bbde2582", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/FastQuoteCreate.tsx:1725"}, "properties": {"repobilityId": "0fdab76721c0895c", "scanner": "scanner-primary", "fingerprint": "8c0ea981bbde2582", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-144436e7f044bf23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminInvoiceDetail.tsx:859"}, "properties": {"repobilityId": "c6afee3b4a747f85", "scanner": "scanner-primary", "fingerprint": "144436e7f044bf23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b6bcb928e5add8a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/Login.tsx:58"}, "properties": {"repobilityId": "edd821373b04274c", "scanner": "scanner-primary", "fingerprint": "b6bcb928e5add8a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cff59103436c9405", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminProjectDetail.tsx:619"}, "properties": {"repobilityId": "57f2b30650ac0742", "scanner": "scanner-primary", "fingerprint": "cff59103436c9405", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6ccebfa5d543cbb9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminOrderDetail.tsx:2922"}, "properties": {"repobilityId": "d098416581747daf", "scanner": "scanner-primary", "fingerprint": "6ccebfa5d543cbb9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb47862798bddd6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/AdminOrderDetail.tsx:936"}, "properties": {"repobilityId": "c4ffe1262031b6f7", "scanner": "scanner-primary", "fingerprint": "fb47862798bddd6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9687a88d7b806ba6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminQuoteDetail.tsx:3954"}, "properties": {"repobilityId": "ce9f6db4e202ce19", "scanner": "scanner-primary", "fingerprint": "9687a88d7b806ba6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c045dc69c1d58e30", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/AdminQuoteDetail.tsx:1193"}, "properties": {"repobilityId": "ce37a44d0be7ca5e", "scanner": "scanner-primary", "fingerprint": "c045dc69c1d58e30", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-249beb358e793881", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/PdfToWordPage.tsx:731"}, "properties": {"repobilityId": "872db4761ad721fc", "scanner": "scanner-primary", "fingerprint": "249beb358e793881", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d2abff546471424", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminMessages.tsx:653"}, "properties": {"repobilityId": "47b6c4aa1b22c074", "scanner": "scanner-primary", "fingerprint": "6d2abff546471424", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-795f7610f022f92c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminSmsInbox.tsx:175"}, "properties": {"repobilityId": "5c1f167955dc78c0", "scanner": "scanner-primary", "fingerprint": "795f7610f022f92c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1def64bd4ebcad67", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/AdminOrdersList.tsx:1431"}, "properties": {"repobilityId": "7de5957d9a308c3b", "scanner": "scanner-primary", "fingerprint": "1def64bd4ebcad67", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7242ee22cb9e8ea3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 client/pages/admin/AdminOrdersList.tsx:1007"}, "properties": {"repobilityId": "f83b7142b86efd31", "scanner": "scanner-primary", "fingerprint": "7242ee22cb9e8ea3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b3a8c31c61188721", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/RecruitmentDetail.tsx:1634"}, "properties": {"repobilityId": "8715520afe31981a", "scanner": "scanner-primary", "fingerprint": "b3a8c31c61188721", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-930bc41cbec37f3d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/ResetPassword.tsx:45"}, "properties": {"repobilityId": "44d70dbae2bf8ae2", "scanner": "scanner-primary", "fingerprint": "930bc41cbec37f3d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ac350e1072fff06", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/settings/AIPromptsSettings.tsx:247"}, "properties": {"repobilityId": "e38ca55adcf711d2", "scanner": "scanner-primary", "fingerprint": "0ac350e1072fff06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3b5757fce6e3d9b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/pages/admin/settings/LanguageTiersSettings.tsx:69"}, "properties": {"repobilityId": "771f16f7bc8f6db2", "scanner": "scanner-primary", "fingerprint": "3b5757fce6e3d9b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8271ee25c98662f4", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/settings/HolidaysSettings.tsx:474"}, "properties": {"repobilityId": "6dfe5bb41668e6d8", "scanner": "scanner-primary", "fingerprint": "8271ee25c98662f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8a5d8d51d4dc244e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/settings/TaxRatesSettings.tsx:498"}, "properties": {"repobilityId": "bfe0e3467f30387f", "scanner": "scanner-primary", "fingerprint": "8a5d8d51d4dc244e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f7809e9e2e54f614", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/settings/FileCategoriesSettings.tsx:350"}, "properties": {"repobilityId": "56a762e8a0c12495", "scanner": "scanner-primary", "fingerprint": "f7809e9e2e54f614", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1c41af4b960af57", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/transcription/TranscriptionJobDetail.tsx:1118"}, "properties": {"repobilityId": "888d6026a941ae5e", "scanner": "scanner-primary", "fingerprint": "c1c41af4b960af57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3c72dbdb4293fa2a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionJobDetail.tsx:782"}, "properties": {"repobilityId": "4eaefb44d7e66b87", "scanner": "scanner-primary", "fingerprint": "3c72dbdb4293fa2a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-974bea0f96490c31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionDashboard.tsx:618"}, "properties": {"repobilityId": "4d6c40e80b10004b", "scanner": "scanner-primary", "fingerprint": "974bea0f96490c31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-41e84acff4714b39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/transcription/TranscriptionVendors.tsx:265"}, "properties": {"repobilityId": "ec91e16a1a1cb35a", "scanner": "scanner-primary", "fingerprint": "41e84acff4714b39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-300adf990bba8d93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/trainings/TrainingAssign.tsx:167"}, "properties": {"repobilityId": "08e3f850c8e554a1", "scanner": "scanner-primary", "fingerprint": "300adf990bba8d93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b80cbed9a2fe1936", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 client/pages/admin/vendor-detail/VendorNdaTab.tsx:485"}, "properties": {"repobilityId": "c06f7c380c239666", "scanner": "scanner-primary", "fingerprint": "b80cbed9a2fe1936", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-22c32be677c61bc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/IsoAssessmentSection.tsx:200"}, "properties": {"repobilityId": "20d4ef6a632a7d6f", "scanner": "scanner-primary", "fingerprint": "22c32be677c61bc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ead3700567e668f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/VendorDocumentsTab.tsx:315"}, "properties": {"repobilityId": "bc4964f97828294a", "scanner": "scanner-primary", "fingerprint": "3ead3700567e668f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d21b007831e9e33a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/vendor-detail/VendorReferencesSection.tsx:258"}, "properties": {"repobilityId": "b7d808f234751d50", "scanner": "scanner-primary", "fingerprint": "d21b007831e9e33a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-52f744c24fcec6aa", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 client/pages/admin/vendor-detail/VendorQmsTab.tsx:309"}, "properties": {"repobilityId": "bf6e15f3c5145526", "scanner": "scanner-primary", "fingerprint": "52f744c24fcec6aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-12a6e41ac725f164", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/invoices/CreateInvoice.tsx:482"}, "properties": {"repobilityId": "e2f0196de93a5f1e", "scanner": "scanner-primary", "fingerprint": "12a6e41ac725f164", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71ddb7c05d1fcbf9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 client/pages/admin/invoices/components/InvoiceDateFilter.tsx:260"}, "properties": {"repobilityId": "b271a908faa759e0", "scanner": "scanner-primary", "fingerprint": "71ddb7c05d1fcbf9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6747e96191a8fe87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useAdminAuth.ts:79"}, "properties": {"repobilityId": "fec05a2f8afdec4c", "scanner": "scanner-primary", "fingerprint": "6747e96191a8fe87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db62b2a865ecd248", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useDocumentProcessing.ts:27"}, "properties": {"repobilityId": "64a3df8590868de6", "scanner": "scanner-primary", "fingerprint": "db62b2a865ecd248", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f981b0d7b547c1db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useQuotePricing.ts:180"}, "properties": {"repobilityId": "a95173f0cec708fc", "scanner": "scanner-primary", "fingerprint": "f981b0d7b547c1db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ee240a5c643b379", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 client/hooks/useSupabase.ts:169"}, "properties": {"repobilityId": "b799f99590b03bb6", "scanner": "scanner-primary", "fingerprint": "5ee240a5c643b379", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6941e05f630dc4ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/hooks/useSupabase.ts:38"}, "properties": {"repobilityId": "fedccad64ab157df", "scanner": "scanner-primary", "fingerprint": "6941e05f630dc4ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3726c8993d11a35d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/context/StaffAuthContext.tsx:56"}, "properties": {"repobilityId": "ac20e1a363abb8fc", "scanner": "scanner-primary", "fingerprint": "3726c8993d11a35d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bda0e47ac3a0828a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/context/UploadContext.tsx:219"}, "properties": {"repobilityId": "f76e2e439ef017fc", "scanner": "scanner-primary", "fingerprint": "bda0e47ac3a0828a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2da170e88ceefb51", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/staff-deliver-step/index.ts:140"}, "properties": {"repobilityId": "c0302e6916c05013", "scanner": "scanner-primary", "fingerprint": "2da170e88ceefb51", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f6634240909a9e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-customer-quote-detail/index.ts:61"}, "properties": {"repobilityId": "d1ca227b67f6f6c2", "scanner": "scanner-primary", "fingerprint": "6f6634240909a9e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c776be0718706002", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-process-mistral/index.ts:76"}, "properties": {"repobilityId": "81da01e20cb13d99", "scanner": "scanner-primary", "fingerprint": "c776be0718706002", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1b30a0f50da67c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/rc-make-call/index.ts:85"}, "properties": {"repobilityId": "273de5820b92d8d4", "scanner": "scanner-primary", "fingerprint": "c1b30a0f50da67c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0545865a8f157694", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-set-password/index.ts:37"}, "properties": {"repobilityId": "f5f2057600e1c992", "scanner": "scanner-primary", "fingerprint": "0545865a8f157694", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-465bb730c8a9bdac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-vendor-detail/index.ts:66"}, "properties": {"repobilityId": "45808a0e0291deec", "scanner": "scanner-primary", "fingerprint": "465bb730c8a9bdac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-291816c087d1a5ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/manage-vendor-payables/index.ts:268"}, "properties": {"repobilityId": "711ea4fd458f8f2b", "scanner": "scanner-primary", "fingerprint": "291816c087d1a5ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6ebe15c70cb0282", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-staff-quote-file/index.ts:51"}, "properties": {"repobilityId": "7d1a3e26b29a94dd", "scanner": "scanner-primary", "fingerprint": "f6ebe15c70cb0282", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-012b4c43d1433067", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-batch-results/index.ts:84"}, "properties": {"repobilityId": "e52f41c07bfd47fd", "scanner": "scanner-primary", "fingerprint": "012b4c43d1433067", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-808eb2bfd5a3c24f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/admin-impersonate-vendor/index.ts:129"}, "properties": {"repobilityId": "ab883b030ba74b2a", "scanner": "scanner-primary", "fingerprint": "808eb2bfd5a3c24f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e7fc91b3bde17a99", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/admin-impersonate-customer/index.ts:108"}, "properties": {"repobilityId": "9f06b3d63de8cfef", "scanner": "scanner-primary", "fingerprint": "e7fc91b3bde17a99", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-187bb2f5fec6e620", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-customer-message/index.ts:75"}, "properties": {"repobilityId": "81eb775d3e6efd58", "scanner": "scanner-primary", "fingerprint": "187bb2f5fec6e620", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11654d1e272f954b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/assign-order-workflow/index.ts:146"}, "properties": {"repobilityId": "d4304f07d7dc683b", "scanner": "scanner-primary", "fingerprint": "11654d1e272f954b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dafe830bfbc73208", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/secure-upload-otp-send/index.ts:162"}, "properties": {"repobilityId": "8e739c1e2d267d12", "scanner": "scanner-primary", "fingerprint": "dafe830bfbc73208", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20f8e6e9aa2d2930", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyse-ocr-next/index.ts:111"}, "properties": {"repobilityId": "e22ba5f9147014f7", "scanner": "scanner-primary", "fingerprint": "20f8e6e9aa2d2930", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0186ae710e635b21", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-acceptance-reminders/index.ts:242"}, "properties": {"repobilityId": "4c3439c611f950bb", "scanner": "scanner-primary", "fingerprint": "0186ae710e635b21", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-337321944c6ea346", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-signed-urls/index.ts:86"}, "properties": {"repobilityId": "e96fbc1dfd4d5896", "scanner": "scanner-primary", "fingerprint": "337321944c6ea346", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3edc21eda5c760be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-invoice-email/index.ts:347"}, "properties": {"repobilityId": "1ad7517723e0fba6", "scanner": "scanner-primary", "fingerprint": "3edc21eda5c760be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c4b205f7d62381d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-email/index.ts:62"}, "properties": {"repobilityId": "6678deaa66491fad", "scanner": "scanner-primary", "fingerprint": "7c4b205f7d62381d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ba8f23b13640161", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/pdf-to-word-mistral/index.ts:118"}, "properties": {"repobilityId": "b9f88d83988d449b", "scanner": "scanner-primary", "fingerprint": "9ba8f23b13640161", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-734df6c897efc200", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/provision-tm-job/index.ts:154"}, "properties": {"repobilityId": "3ebcccf3e880c16e", "scanner": "scanner-primary", "fingerprint": "734df6c897efc200", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62d055f90cd17f97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/analyse-ocr-batch/index.ts:175"}, "properties": {"repobilityId": "ac8b559f89d519ee", "scanner": "scanner-primary", "fingerprint": "62d055f90cd17f97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a77e2c9a713ab85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:128"}, "properties": {"repobilityId": "7c738a141c293866", "scanner": "scanner-primary", "fingerprint": "6a77e2c9a713ab85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a57cb57be0e823c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/scan-public-submission/index.ts:166"}, "properties": {"repobilityId": "5f45c5a0680e4458", "scanner": "scanner-primary", "fingerprint": "a57cb57be0e823c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-def0ec07c725438d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 supabase/functions/process-quote-documents/index.ts:384"}, "properties": {"repobilityId": "127469a477246ef3", "scanner": "scanner-primary", "fingerprint": "def0ec07c725438d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f29247a11b922140", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-quote-documents/index.ts:34"}, "properties": {"repobilityId": "9ccd83b2d5041e9a", "scanner": "scanner-primary", "fingerprint": "f29247a11b922140", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d30a0f14ba73bb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-auth-otp-send/index.ts:236"}, "properties": {"repobilityId": "13f080d464d5027f", "scanner": "scanner-primary", "fingerprint": "6d30a0f14ba73bb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf321ccddaa7b5b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-vendor/index.ts:58"}, "properties": {"repobilityId": "0bf916f7c0bdbd7f", "scanner": "scanner-primary", "fingerprint": "cf321ccddaa7b5b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f5fb64a7429c83d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/review-draft-file/index.ts:146"}, "properties": {"repobilityId": "c181b8d9d225c947", "scanner": "scanner-primary", "fingerprint": "1f5fb64a7429c83d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5548079f211c267", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-batch-create/index.ts:106"}, "properties": {"repobilityId": "548c32170c1da22d", "scanner": "scanner-primary", "fingerprint": "f5548079f211c267", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb11baa241352e9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/get-customer-order-detail/index.ts:31"}, "properties": {"repobilityId": "f59d73f5f52a094b", "scanner": "scanner-primary", "fingerprint": "bb11baa241352e9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-974c297b66dce939", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-complete/index.ts:232"}, "properties": {"repobilityId": "aa0cf460e54a4d7c", "scanner": "scanner-primary", "fingerprint": "974c297b66dce939", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cc281e4be9634c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/vendor-invitation-reminder/index.ts:60"}, "properties": {"repobilityId": "45ed33264b87c297", "scanner": "scanner-primary", "fingerprint": "7cc281e4be9634c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b28eb0d207398ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/transcription-process/index.ts:271"}, "properties": {"repobilityId": "53b4cd7dac9e6317", "scanner": "scanner-primary", "fingerprint": "4b28eb0d207398ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01f3c51a12ac7423", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-vendor-payment-info/index.ts:34"}, "properties": {"repobilityId": "8850c2a37d9016fb", "scanner": "scanner-primary", "fingerprint": "01f3c51a12ac7423", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7cf6e034cd3e93f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/pdf-to-word-convert/index.ts:70"}, "properties": {"repobilityId": "8ee7f852c7e5638d", "scanner": "scanner-primary", "fingerprint": "c7cf6e034cd3e93f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dac9b22189fd8336", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/update-vendor-rates/index.ts:37"}, "properties": {"repobilityId": "6c62caae12358c39", "scanner": "scanner-primary", "fingerprint": "dac9b22189fd8336", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8ca7a45ea72b42d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/handle-stripe-invoice-payment/index.ts:126"}, "properties": {"repobilityId": "89d10ec69cca9ebf", "scanner": "scanner-primary", "fingerprint": "a8ca7a45ea72b42d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e73f415a40045258", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/generate-invoice-pdf/index.ts:85"}, "properties": {"repobilityId": "b1d2ff0e34f414bb", "scanner": "scanner-primary", "fingerprint": "e73f415a40045258", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3c2e1adaa6a7526", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/verify-customer-login-otp/index.ts:56"}, "properties": {"repobilityId": "a4501edaefd5a0c4", "scanner": "scanner-primary", "fingerprint": "a3c2e1adaa6a7526", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5a79167c5d8ff02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-deposit-reminder/index.ts:251"}, "properties": {"repobilityId": "f01340f5c1e6e35c", "scanner": "scanner-primary", "fingerprint": "c5a79167c5d8ff02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f21a86b2467853b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/upload-start/index.ts:92"}, "properties": {"repobilityId": "8a0e91d3b4bfe8db", "scanner": "scanner-primary", "fingerprint": "f21a86b2467853b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d68bc5aa49f507fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-customer-login-otp/index.ts:127"}, "properties": {"repobilityId": "455331e6d079fe1e", "scanner": "scanner-primary", "fingerprint": "d68bc5aa49f507fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09357462a300e711", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-staff-message/index.ts:65"}, "properties": {"repobilityId": "6d9c52efba867966", "scanner": "scanner-primary", "fingerprint": "09357462a300e711", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29d26ec97eb42350", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/ocr-process-next/index.ts:59"}, "properties": {"repobilityId": "4095853df9e70538", "scanner": "scanner-primary", "fingerprint": "29d26ec97eb42350", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e55d1410ada2013", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/rc-webhook/index.ts:47"}, "properties": {"repobilityId": "0e52838207bb3428", "scanner": "scanner-primary", "fingerprint": "4e55d1410ada2013", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c91189267029010", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-payment-link/index.ts:45"}, "properties": {"repobilityId": "67e3b267c288bddb", "scanner": "scanner-primary", "fingerprint": "1c91189267029010", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a3eff9fceb6800f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/secure-upload-otp-verify/index.ts:125"}, "properties": {"repobilityId": "48471a61221bbafa", "scanner": "scanner-primary", "fingerprint": "1a3eff9fceb6800f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e9b5c2440fe4666", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/create-deposit-payment-link/index.ts:64"}, "properties": {"repobilityId": "29277f86d6ad8451", "scanner": "scanner-primary", "fingerprint": "0e9b5c2440fe4666", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a163d66cccc0c95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/process-inbound-email/index.ts:67"}, "properties": {"repobilityId": "ccdd1eaa795e639a", "scanner": "scanner-primary", "fingerprint": "5a163d66cccc0c95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e8aa65ec8ced667", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/notify-staff-assignment.ts:203"}, "properties": {"repobilityId": "5b20ed678680fc90", "scanner": "scanner-primary", "fingerprint": "9e8aa65ec8ced667", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2080ce54836af3f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/_shared/notify-vendor-assignment.ts:371"}, "properties": {"repobilityId": "6264237a6e4be1d4", "scanner": "scanner-primary", "fingerprint": "2080ce54836af3f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-602b47f6540b3f30", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/node-build.ts:27"}, "properties": {"repobilityId": "fc1b9db607756502", "scanner": "scanner-primary", "fingerprint": "602b47f6540b3f30", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fae7e97edd31907a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/lint-migrations-rls.ts:90"}, "properties": {"repobilityId": "6956f0161b9dbcc6", "scanner": "scanner-primary", "fingerprint": "fae7e97edd31907a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61957c7d69b4aa2a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/rls-audit.ts:42"}, "properties": {"repobilityId": "419e82b46022fe5a", "scanner": "scanner-primary", "fingerprint": "61957c7d69b4aa2a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3c5171fef4d80aa4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/audio-extractor/index.js:91"}, "properties": {"repobilityId": "08b0892f7035d4ec", "scanner": "scanner-primary", "fingerprint": "3c5171fef4d80aa4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b4dea0e71777804", "level": "warning", "message": {"text": "Dockerfile runs as root: services/audio-extractor/Dockerfile"}, "properties": {"repobilityId": "e3c0469f35ac27f1", "scanner": "scanner-primary", "fingerprint": "1b4dea0e71777804", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-77f0ce0edab6e384", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "properties": {"repobilityId": "b1f77683aa047e73", "scanner": "scanner-primary", "fingerprint": "77f0ce0edab6e384", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/audio-extractor/Dockerfile"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-ac136b8bb4e115af", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/components/ui/chart.tsx:79"}, "properties": {"repobilityId": "1422f2ab68b40507", "scanner": "scanner-primary", "fingerprint": "ac136b8bb4e115af", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/components/ui/chart.tsx"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-7621cbc4ac9fb26e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/components/admin/VendorActivationEmailModal.tsx:321"}, "properties": {"repobilityId": "86bf1f4930834759", "scanner": "scanner-primary", "fingerprint": "7621cbc4ac9fb26e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/components/admin/VendorActivationEmailModal.tsx"}, "region": {"startLine": 321}}}]}, {"ruleId": "scanner-eaa3c130b0fd1673", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in client/pages/admin/Login.tsx:211"}, "properties": {"repobilityId": "ba8aab46f3818152", "scanner": "scanner-primary", "fingerprint": "eaa3c130b0fd1673", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/pages/admin/Login.tsx"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-4b40f9d52238e74a", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in client/pages/admin/trainings/TrainingLesson.tsx:163"}, "properties": {"repobilityId": "5e85bf2f785f91f2", "scanner": "scanner-primary", "fingerprint": "4b40f9d52238e74a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/pages/admin/trainings/TrainingLesson.tsx"}, "region": {"startLine": 163}}}]}, {"ruleId": "scanner-a6df18b65795ab91", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in client/pages/admin/vendor-detail/VendorNdaTab.tsx:485"}, "properties": {"repobilityId": "2c1e92d418f5ea8d", "scanner": "scanner-primary", "fingerprint": "a6df18b65795ab91", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/pages/admin/vendor-detail/VendorNdaTab.tsx"}, "region": {"startLine": 485}}}]}, {"ruleId": "scanner-212bb63141bde21f", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in client/hooks/useAdminAuth.ts:131"}, "properties": {"repobilityId": "9f7f776ad3039a2f", "scanner": "scanner-primary", "fingerprint": "212bb63141bde21f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/hooks/useAdminAuth.ts"}, "region": {"startLine": 131}}}]}, {"ruleId": "scanner-89533d9da3489f6a", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in client/context/StaffAuthContext.tsx:178"}, "properties": {"repobilityId": "59a78753b320ed39", "scanner": "scanner-primary", "fingerprint": "89533d9da3489f6a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/context/StaffAuthContext.tsx"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-b7cb7b949cecb9bb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/staff-deliver-step/index.ts:13"}, "properties": {"repobilityId": "c66bb260ae6f8504", "scanner": "scanner-primary", "fingerprint": "b7cb7b949cecb9bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/staff-deliver-step/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-3dbf03bdec19944c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-step-draft-to-customer/index.ts:38"}, "properties": {"repobilityId": "fac9943663079473", "scanner": "scanner-primary", "fingerprint": "3dbf03bdec19944c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-step-draft-to-customer/index.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-4229ef559c7a8449", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-final-deliverable/index.ts:39"}, "properties": {"repobilityId": "c3b2ae0a809717ad", "scanner": "scanner-primary", "fingerprint": "4229ef559c7a8449", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-final-deliverable/index.ts"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-34fec16333d73264", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-exchange-rates/index.ts:13"}, "properties": {"repobilityId": "92dc89abf4488003", "scanner": "scanner-primary", "fingerprint": "34fec16333d73264", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/fetch-exchange-rates/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-c9153115e23dc948", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-quote-detail/index.ts:28"}, "properties": {"repobilityId": "9f0343f6a6d321ca", "scanner": "scanner-primary", "fingerprint": "c9153115e23dc948", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-customer-quote-detail/index.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-0b9de6135a6d69d3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-payment-email/index.ts:43"}, "properties": {"repobilityId": "0236c6c8ae35364e", "scanner": "scanner-primary", "fingerprint": "0b9de6135a6d69d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-payment-email/index.ts"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-a9d3801935621d58", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/cancel-order/index.ts:29"}, "properties": {"repobilityId": "38a1a5ab780652af", "scanner": "scanner-primary", "fingerprint": "a9d3801935621d58", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/cancel-order/index.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-556086a50de9de4e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-process-mistral/index.ts:29"}, "properties": {"repobilityId": "c2db439c7fd47261", "scanner": "scanner-primary", "fingerprint": "556086a50de9de4e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ocr-process-mistral/index.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-15a3ea5f0525a2ea", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-workflow-step/index.ts:34"}, "properties": {"repobilityId": "023fb73e0d6acb5d", "scanner": "scanner-primary", "fingerprint": "15a3ea5f0525a2ea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/update-workflow-step/index.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-fbaa678b485f4baf", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/customer-resolve-impersonation/index.ts:19"}, "properties": {"repobilityId": "5b5bbd2537340a33", "scanner": "scanner-primary", "fingerprint": "fbaa678b485f4baf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/customer-resolve-impersonation/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-9b1c7bd64b0b034b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-set-password/index.ts:5"}, "properties": {"repobilityId": "bdfa21c00b4b8360", "scanner": "scanner-primary", "fingerprint": "9b1c7bd64b0b034b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-set-password/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-b2be51a982a6d6fe", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-vendor-detail/index.ts:5"}, "properties": {"repobilityId": "8886f02e10dcd680", "scanner": "scanner-primary", "fingerprint": "b2be51a982a6d6fe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-vendor-detail/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-6de462028c512c48", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-oauth/index.ts:5"}, "properties": {"repobilityId": "88edfde9e694721b", "scanner": "scanner-primary", "fingerprint": "6de462028c512c48", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/dropbox-oauth/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-051f938bd726a37d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-record-qualification/index.ts:21"}, "properties": {"repobilityId": "3d7391f1b75d8aaa", "scanner": "scanner-primary", "fingerprint": "051f938bd726a37d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-record-qualification/index.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-5c3192e8ef29be0c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-orders/index.ts:38"}, "properties": {"repobilityId": "649dd5e9260eb267", "scanner": "scanner-primary", "fingerprint": "5c3192e8ef29be0c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-customer-orders/index.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-a34e364b2132d8dd", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-negotiate-counter/index.ts:26"}, "properties": {"repobilityId": "b6da1e317031a4cc", "scanner": "scanner-primary", "fingerprint": "a34e364b2132d8dd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-negotiate-counter/index.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-893ca596f0b0b344", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-vendor-payables/index.ts:16"}, "properties": {"repobilityId": "6db8e51adf4f3c98", "scanner": "scanner-primary", "fingerprint": "893ca596f0b0b344", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-vendor-payables/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-6782f0630192f43c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-staff-quote-file/index.ts:11"}, "properties": {"repobilityId": "f6f5b7f71d6693cb", "scanner": "scanner-primary", "fingerprint": "6782f0630192f43c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/upload-staff-quote-file/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-59c62efeefb3c869", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-activation-email-cron/index.ts:18"}, "properties": {"repobilityId": "27fd947395820d01", "scanner": "scanner-primary", "fingerprint": "59c62efeefb3c869", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-activation-email-cron/index.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-c7ef63721941af71", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-vendor-payments/index.ts:20"}, "properties": {"repobilityId": "763937a2a003c437", "scanner": "scanner-primary", "fingerprint": "c7ef63721941af71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-vendor-payments/index.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-78c520264f1c2572", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-files/index.ts:5"}, "properties": {"repobilityId": "b8e9e512d3104bf3", "scanner": "scanner-primary", "fingerprint": "78c520264f1c2572", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/dropbox-files/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-4f87c059a0aeecac", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-batch-results/index.ts:13"}, "properties": {"repobilityId": "25ec8923cf00f6cb", "scanner": "scanner-primary", "fingerprint": "4f87c059a0aeecac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ocr-batch-results/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-fc85fdcd664cd204", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/cal-integrations/index.ts:52"}, "properties": {"repobilityId": "71971c57fef30689", "scanner": "scanner-primary", "fingerprint": "fc85fdcd664cd204", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/cal-integrations/index.ts"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-7440b2133120c861", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-customer-order-confirmed/index.ts:54"}, "properties": {"repobilityId": "d4f61559dd0427c9", "scanner": "scanner-primary", "fingerprint": "7440b2133120c861", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/notify-customer-order-confirmed/index.ts"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-d918c7f36de9a4f3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-quote-from-analysis/index.ts:16"}, "properties": {"repobilityId": "6d13bb2cbcf19c03", "scanner": "scanner-primary", "fingerprint": "d918c7f36de9a4f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/update-quote-from-analysis/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-ac716d676904b427", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-vendor-instructions-changed/index.ts:15"}, "properties": {"repobilityId": "749741cde0769d5c", "scanner": "scanner-primary", "fingerprint": "ac716d676904b427", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/notify-vendor-instructions-changed/index.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-4d16d5c5ecc7538e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/recalculate-quote-pricing/index.ts:26"}, "properties": {"repobilityId": "643aa15fa3f75d71", "scanner": "scanner-primary", "fingerprint": "4d16d5c5ecc7538e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/recalculate-quote-pricing/index.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-c83835a797fa569c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-impersonate-vendor/index.ts:23"}, "properties": {"repobilityId": "1cafc4116cf13313", "scanner": "scanner-primary", "fingerprint": "c83835a797fa569c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-impersonate-vendor/index.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-01d11ae54b3119e9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-impersonate-customer/index.ts:20"}, "properties": {"repobilityId": "ecb9e095bc93e6e4", "scanner": "scanner-primary", "fingerprint": "01d11ae54b3119e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-impersonate-customer/index.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-0d25fdfc4e2e347a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-send-activation-emails/index.ts:25"}, "properties": {"repobilityId": "ae1d3837da3fbe73", "scanner": "scanner-primary", "fingerprint": "0d25fdfc4e2e347a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-send-activation-emails/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-accd53da85811789", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-customer-message/index.ts:31"}, "properties": {"repobilityId": "72c9b3d4a9bc2816", "scanner": "scanner-primary", "fingerprint": "accd53da85811789", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-customer-message/index.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-0a7b0cbc6fcb166a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-staff-tasks/index.ts:21"}, "properties": {"repobilityId": "b829501bb81d2183", "scanner": "scanner-primary", "fingerprint": "0a7b0cbc6fcb166a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-staff-tasks/index.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-cfe79375fbde8204", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-order-workflow/index.ts:11"}, "properties": {"repobilityId": "49381f99e9f75890", "scanner": "scanner-primary", "fingerprint": "cfe79375fbde8204", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-order-workflow/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-b12ece248c92c78e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-staff-quote-file/index.ts:32"}, "properties": {"repobilityId": "a47077f70bbe8bc0", "scanner": "scanner-primary", "fingerprint": "b12ece248c92c78e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/delete-staff-quote-file/index.ts"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-4270d469bf5678e1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-quote-pdf/index.ts:83"}, "properties": {"repobilityId": "540c561ddc8e6f8e", "scanner": "scanner-primary", "fingerprint": "4270d469bf5678e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-quote-pdf/index.ts"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-b9e13089f37d64ed", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/assign-order-workflow/index.ts:12"}, "properties": {"repobilityId": "bf2c551aadea6b10", "scanner": "scanner-primary", "fingerprint": "b9e13089f37d64ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/assign-order-workflow/index.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-07039f6fd02771fa", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-ar-aging/index.ts:16"}, "properties": {"repobilityId": "fc74c585bb7bbd37", "scanner": "scanner-primary", "fingerprint": "07039f6fd02771fa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-ar-aging/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-b5c43c110387e067", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-partner-code/index.ts:11"}, "properties": {"repobilityId": "721e8a1f70b1ee52", "scanner": "scanner-primary", "fingerprint": "b5c43c110387e067", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/validate-partner-code/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-abd26e92ba661884", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/secure-upload-otp-send/index.ts:41"}, "properties": {"repobilityId": "157069feda54a0bd", "scanner": "scanner-primary", "fingerprint": "abd26e92ba661884", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/secure-upload-otp-send/index.ts"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-3ba38cc5cff17434", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-invoice-queue/index.ts:5"}, "properties": {"repobilityId": "85be61eb30de8001", "scanner": "scanner-primary", "fingerprint": "3ba38cc5cff17434", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/process-invoice-queue/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-4d66877680202fc3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/void-vendor-payable/index.ts:24"}, "properties": {"repobilityId": "e16cdbb497c10ac4", "scanner": "scanner-primary", "fingerprint": "4d66877680202fc3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/void-vendor-payable/index.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-3718fb30ab4d308d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/apply-affidavit-and-finalize/index.ts:34"}, "properties": {"repobilityId": "ae09119fefa938c4", "scanner": "scanner-primary", "fingerprint": "3718fb30ab4d308d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/apply-affidavit-and-finalize/index.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-4ab070bcf8a582e4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analyse-ocr-next/index.ts:13"}, "properties": {"repobilityId": "bc7a0db9d6faa567", "scanner": "scanner-primary", "fingerprint": "4ab070bcf8a582e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/analyse-ocr-next/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-7fc327c6e8998b7e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-acceptance-reminders/index.ts:51"}, "properties": {"repobilityId": "ff90890a126ffdbd", "scanner": "scanner-primary", "fingerprint": "7fc327c6e8998b7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-acceptance-reminders/index.ts"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-7b24cffbf2b11a17", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-doc-request-status-sweep/index.ts:26"}, "properties": {"repobilityId": "c084fb2e49d9d764", "scanner": "scanner-primary", "fingerprint": "7b24cffbf2b11a17", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-doc-request-status-sweep/index.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-02ac53dbbe92f54b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-quotes/index.ts:34"}, "properties": {"repobilityId": "460022a8fde008c9", "scanner": "scanner-primary", "fingerprint": "02ac53dbbe92f54b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-customer-quotes/index.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-328e03040cc97a29", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-signed-urls/index.ts:5"}, "properties": {"repobilityId": "c20aeacbd3fe1065", "scanner": "scanner-primary", "fingerprint": "328e03040cc97a29", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-signed-urls/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-b25486890ee7bca6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-invoice-email/index.ts:20"}, "properties": {"repobilityId": "af9915fc803b8cb7", "scanner": "scanner-primary", "fingerprint": "b25486890ee7bca6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-invoice-email/index.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-3ca0f1ce9777b580", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-email/index.ts:10"}, "properties": {"repobilityId": "deaf722fb6438a69", "scanner": "scanner-primary", "fingerprint": "3ca0f1ce9777b580", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-email/index.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-d454b831261f88bd", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/cvp-suggest-vendor-rate/index.ts:41"}, "properties": {"repobilityId": "6027316366db2048", "scanner": "scanner-primary", "fingerprint": "d454b831261f88bd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/cvp-suggest-vendor-rate/index.ts"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-2f833aa381acfa25", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/pdf-to-word-mistral/index.ts:45"}, "properties": {"repobilityId": "e7319893a2947f79", "scanner": "scanner-primary", "fingerprint": "2f833aa381acfa25", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/pdf-to-word-mistral/index.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-3e881e2ec75a9487", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-doc-request-reminder/index.ts:50"}, "properties": {"repobilityId": "361f5c499e1b49c4", "scanner": "scanner-primary", "fingerprint": "3e881e2ec75a9487", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-doc-request-reminder/index.ts"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-9b84edadf98464f1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/provision-tm-job/index.ts:11"}, "properties": {"repobilityId": "d10bc9178511392e", "scanner": "scanner-primary", "fingerprint": "9b84edadf98464f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/provision-tm-job/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-78cbe418ac52dadd", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analyse-ocr-batch/index.ts:14"}, "properties": {"repobilityId": "276de6494ec26e7e", "scanner": "scanner-primary", "fingerprint": "78cbe418ac52dadd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/analyse-ocr-batch/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-22140e3e5139f4c4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-webhook/index.ts:41"}, "properties": {"repobilityId": "37ab8b4c9da13a4c", "scanner": "scanner-primary", "fingerprint": "22140e3e5139f4c4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/stripe-webhook/index.ts"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-e9915219bc22bd33", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/scan-public-submission/index.ts:27"}, "properties": {"repobilityId": "fa36484d81a4ca80", "scanner": "scanner-primary", "fingerprint": "e9915219bc22bd33", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/scan-public-submission/index.ts"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-ac755e862e80ba34", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-quote-documents/index.ts:5"}, "properties": {"repobilityId": "46e8b5159eb82bef", "scanner": "scanner-primary", "fingerprint": "ac755e862e80ba34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/process-quote-documents/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-15bd1b8be5bfc3a7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/crm-create-order/index.ts:13"}, "properties": {"repobilityId": "82e7d6b2a91fbfe7", "scanner": "scanner-primary", "fingerprint": "15bd1b8be5bfc3a7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/crm-create-order/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-0c5b21da147c48fa", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/apostille-consult-sms-reminders/index.ts:34"}, "properties": {"repobilityId": "3efd432b853e11de", "scanner": "scanner-primary", "fingerprint": "0c5b21da147c48fa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/apostille-consult-sms-reminders/index.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-cc858b5699346455", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-auth-otp-send/index.ts:39"}, "properties": {"repobilityId": "b5a0b2035fe27876", "scanner": "scanner-primary", "fingerprint": "cc858b5699346455", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-auth-otp-send/index.ts"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-f41bd8c421d6c55a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-brevo-email-events/index.ts:12"}, "properties": {"repobilityId": "ea03e2495cbf94cd", "scanner": "scanner-primary", "fingerprint": "f41bd8c421d6c55a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-brevo-email-events/index.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-a2820b950fd89c69", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/qms-auto-qualify/index.ts:36"}, "properties": {"repobilityId": "2f6cd68b971c571e", "scanner": "scanner-primary", "fingerprint": "a2820b950fd89c69", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/qms-auto-qualify/index.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-4adade5042af2536", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-vendor/index.ts:5"}, "properties": {"repobilityId": "a9884b88fa33d7a6", "scanner": "scanner-primary", "fingerprint": "4adade5042af2536", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/create-vendor/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-46f3d151a6024625", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/review-draft-file/index.ts:61"}, "properties": {"repobilityId": "72fd64ff7b787070", "scanner": "scanner-primary", "fingerprint": "46f3d151a6024625", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/review-draft-file/index.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-db472ed30beed424", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-batch-create/index.ts:23"}, "properties": {"repobilityId": "c549e431d4e00fbf", "scanner": "scanner-primary", "fingerprint": "db472ed30beed424", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ocr-batch-create/index.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-58394115ed727b8b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-create-order/index.ts:17"}, "properties": {"repobilityId": "47af989c4b796898", "scanner": "scanner-primary", "fingerprint": "58394115ed727b8b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-create-order/index.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-19806828909126c7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/check-open-issues/index.ts:18"}, "properties": {"repobilityId": "a970741ec783f335", "scanner": "scanner-primary", "fingerprint": "19806828909126c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/check-open-issues/index.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-24d1d34198b55218", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-order-detail/index.ts:5"}, "properties": {"repobilityId": "1d1c839141a64a6b", "scanner": "scanner-primary", "fingerprint": "24d1d34198b55218", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-customer-order-detail/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-c76b1e21336f7fb2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/find-matching-vendors/index.ts:18"}, "properties": {"repobilityId": "fc6e005132775c1f", "scanner": "scanner-primary", "fingerprint": "c76b1e21336f7fb2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/find-matching-vendors/index.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-b626bf4d21276c9f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-step-draft-pdf/index.ts:21"}, "properties": {"repobilityId": "ab4183adb82abe3e", "scanner": "scanner-primary", "fingerprint": "b626bf4d21276c9f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-step-draft-pdf/index.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-a322552d11a4eb4d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-complete/index.ts:53"}, "properties": {"repobilityId": "a658579c2c3655c0", "scanner": "scanner-primary", "fingerprint": "a322552d11a4eb4d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/upload-complete/index.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-44a3de3409a3ae40", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/recover-quote-by-token/index.ts:37"}, "properties": {"repobilityId": "9e8ffb842c7859e7", "scanner": "scanner-primary", "fingerprint": "44a3de3409a3ae40", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/recover-quote-by-token/index.ts"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-f9264324093bf05a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-invitation-reminder/index.ts:13"}, "properties": {"repobilityId": "6b9c25c6a5fae6b7", "scanner": "scanner-primary", "fingerprint": "f9264324093bf05a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-invitation-reminder/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-c77e4ad9e4c88523", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-update-profile/index.ts:5"}, "properties": {"repobilityId": "84a14ee12451014a", "scanner": "scanner-primary", "fingerprint": "c77e4ad9e4c88523", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-update-profile/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-1bf563540be94eea", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-customer-payments/index.ts:24"}, "properties": {"repobilityId": "60065fff06deef78", "scanner": "scanner-primary", "fingerprint": "1bf563540be94eea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-customer-payments/index.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-1d06cb828f238a5f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-receivables/index.ts:16"}, "properties": {"repobilityId": "29657a458e0486f8", "scanner": "scanner-primary", "fingerprint": "1d06cb828f238a5f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-receivables/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-b64faeaa80ab2647", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-dashboard/index.ts:26"}, "properties": {"repobilityId": "45554f9e3e65b345", "scanner": "scanner-primary", "fingerprint": "b64faeaa80ab2647", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-customer-dashboard/index.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-e81e053b72b40557", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-vendor-payment-info/index.ts:5"}, "properties": {"repobilityId": "0341fbe08ed952a2", "scanner": "scanner-primary", "fingerprint": "e81e053b72b40557", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/update-vendor-payment-info/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-99fba04c42ebcb42", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-customer-quote-ack/index.ts:45"}, "properties": {"repobilityId": "e700bf5658f90f38", "scanner": "scanner-primary", "fingerprint": "99fba04c42ebcb42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/notify-customer-quote-ack/index.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-a01f93831bb07974", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/pdf-to-word-convert/index.ts:22"}, "properties": {"repobilityId": "ecf47ca3c1be9ac0", "scanner": "scanner-primary", "fingerprint": "a01f93831bb07974", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/pdf-to-word-convert/index.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-cbb6efb302a85015", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-deadline-reminders/index.ts:47"}, "properties": {"repobilityId": "62f5d04d894e7778", "scanner": "scanner-primary", "fingerprint": "cbb6efb302a85015", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-deadline-reminders/index.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-97076ce6f96ebe74", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-vendor-rates/index.ts:5"}, "properties": {"repobilityId": "a7e9bed4df6d1bbd", "scanner": "scanner-primary", "fingerprint": "97076ce6f96ebe74", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/update-vendor-rates/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-00aea7ec0f0e0655", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/handle-stripe-invoice-payment/index.ts:18"}, "properties": {"repobilityId": "68f157b970b564b4", "scanner": "scanner-primary", "fingerprint": "00aea7ec0f0e0655", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/handle-stripe-invoice-payment/index.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-cb6738057a40cf11", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-invoice-pdf/index.ts:13"}, "properties": {"repobilityId": "3b090cc413c028e7", "scanner": "scanner-primary", "fingerprint": "cb6738057a40cf11", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-invoice-pdf/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-728ca01926ab9a7e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/verify-customer-login-otp/index.ts:13"}, "properties": {"repobilityId": "5eb8e76175fba34a", "scanner": "scanner-primary", "fingerprint": "728ca01926ab9a7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/verify-customer-login-otp/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-a406811579093092", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-send-cv-nda-reminder/index.ts:38"}, "properties": {"repobilityId": "fd5c956efd657358", "scanner": "scanner-primary", "fingerprint": "a406811579093092", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-send-cv-nda-reminder/index.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-dbfce9d9ea9daaeb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-tax-report/index.ts:33"}, "properties": {"repobilityId": "4d12fe24b4e95380", "scanner": "scanner-primary", "fingerprint": "dbfce9d9ea9daaeb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-tax-report/index.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-37dc9a60ab393084", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-deposit-reminder/index.ts:36"}, "properties": {"repobilityId": "0709372175c7b99b", "scanner": "scanner-primary", "fingerprint": "37dc9a60ab393084", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-deposit-reminder/index.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-4778695cdfd9dd0c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-vendor-qms/index.ts:16"}, "properties": {"repobilityId": "1e0849d827affaab", "scanner": "scanner-primary", "fingerprint": "4778695cdfd9dd0c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/list-vendor-qms/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-146163ebd5aafd64", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-manage-customer/index.ts:35"}, "properties": {"repobilityId": "e604dd3b709eaf35", "scanner": "scanner-primary", "fingerprint": "146163ebd5aafd64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-manage-customer/index.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-c965ad3660365cbb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-order-instructions/index.ts:14"}, "properties": {"repobilityId": "748037b4112a5a76", "scanner": "scanner-primary", "fingerprint": "c965ad3660365cbb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-order-instructions/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-76fd28cd0db677b2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/void-customer-invoice/index.ts:25"}, "properties": {"repobilityId": "5bda9a56f37db1b2", "scanner": "scanner-primary", "fingerprint": "76fd28cd0db677b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/void-customer-invoice/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-3402c3e0e8cfa1c3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/staff-submit-bug-report/index.ts:22"}, "properties": {"repobilityId": "7c6cfa659eadbcc7", "scanner": "scanner-primary", "fingerprint": "3402c3e0e8cfa1c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/staff-submit-bug-report/index.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-6d23bf43f8bbfdb2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-sops/index.ts:22"}, "properties": {"repobilityId": "cbcc8bbdf3d6c120", "scanner": "scanner-primary", "fingerprint": "6d23bf43f8bbfdb2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-sops/index.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-9ed3cad60b3887be", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/qms-request-documents-bulk/index.ts:25"}, "properties": {"repobilityId": "d889b0847bcd7a3b", "scanner": "scanner-primary", "fingerprint": "9ed3cad60b3887be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/qms-request-documents-bulk/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-96ef2089e2feeb6d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/negotiation-hitl-reminder/index.ts:36"}, "properties": {"repobilityId": "95ae13feedc710a6", "scanner": "scanner-primary", "fingerprint": "96ef2089e2feeb6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/negotiation-hitl-reminder/index.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-052f6f9dab4ce598", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/notify-staff-new-lead/index.ts:54"}, "properties": {"repobilityId": "30a01fba026d0404", "scanner": "scanner-primary", "fingerprint": "052f6f9dab4ce598", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/notify-staff-new-lead/index.ts"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-923a089863abc1f5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/upload-start/index.ts:40"}, "properties": {"repobilityId": "515807da02bff17e", "scanner": "scanner-primary", "fingerprint": "923a089863abc1f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/upload-start/index.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-16fbf16646ff0ab9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-customer-login-otp/index.ts:37"}, "properties": {"repobilityId": "717fd5633414bb3c", "scanner": "scanner-primary", "fingerprint": "16fbf16646ff0ab9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-customer-login-otp/index.ts"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-3a92ca4a4d0b974f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-quote-link-email/index.ts:44"}, "properties": {"repobilityId": "999811b9dc7264bf", "scanner": "scanner-primary", "fingerprint": "3a92ca4a4d0b974f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-quote-link-email/index.ts"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-5f024e408f4c8fc5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-checkout-session/index.ts:23"}, "properties": {"repobilityId": "7aee77e5776de8e6", "scanner": "scanner-primary", "fingerprint": "5f024e408f4c8fc5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/create-checkout-session/index.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-9da690b8c7fc73c9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/customer-approve-quote-ar/index.ts:27"}, "properties": {"repobilityId": "06b16db988c0d366", "scanner": "scanner-primary", "fingerprint": "9da690b8c7fc73c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/customer-approve-quote-ar/index.ts"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-0e0ff038ee237819", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-customer-files/index.ts:29"}, "properties": {"repobilityId": "620a93ca1068d201", "scanner": "scanner-primary", "fingerprint": "0e0ff038ee237819", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-customer-files/index.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-e10c47898bae49eb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dropbox-sync/index.ts:23"}, "properties": {"repobilityId": "58ff722826bef8e6", "scanner": "scanner-primary", "fingerprint": "e10c47898bae49eb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/dropbox-sync/index.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-1c91b7d1fb320fdd", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/promote-step-delivery-to-draft/index.ts:31"}, "properties": {"repobilityId": "a1550047cd792ee1", "scanner": "scanner-primary", "fingerprint": "1c91b7d1fb320fdd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/promote-step-delivery-to-draft/index.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-0a053c7ac7617f29", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-staff-competence/index.ts:18"}, "properties": {"repobilityId": "7e454390911cba59", "scanner": "scanner-primary", "fingerprint": "0a053c7ac7617f29", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-staff-competence/index.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-771942e550b31030", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-quote-token/index.ts:5"}, "properties": {"repobilityId": "18abdb00932399cc", "scanner": "scanner-primary", "fingerprint": "771942e550b31030", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/validate-quote-token/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-a227497aaeaf12e0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-staff-message/index.ts:31"}, "properties": {"repobilityId": "b9e9fc9f0b2550e7", "scanner": "scanner-primary", "fingerprint": "a227497aaeaf12e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-staff-message/index.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-1253133411fa29af", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-fast-quote/index.ts:5"}, "properties": {"repobilityId": "4cc6f219187dfbe2", "scanner": "scanner-primary", "fingerprint": "1253133411fa29af", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/create-fast-quote/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-208b6fc55b80095a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-staff-notes/index.ts:16"}, "properties": {"repobilityId": "6438c92f6f5abb24", "scanner": "scanner-primary", "fingerprint": "208b6fc55b80095a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-staff-notes/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-1c10e789f64e940d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/split-step/index.ts:44"}, "properties": {"repobilityId": "1152640db73cc674", "scanner": "scanner-primary", "fingerprint": "1c10e789f64e940d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/split-step/index.ts"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-17095fca6d3047d9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/convert-submission-to-quote/index.ts:22"}, "properties": {"repobilityId": "5fb9ce505830ed1b", "scanner": "scanner-primary", "fingerprint": "17095fca6d3047d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/convert-submission-to-quote/index.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-ec17a727a5edfbcf", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in supabase/functions/ocr-process-next/index.ts:428"}, "properties": {"repobilityId": "c2cd17c7a193e069", "scanner": "scanner-primary", "fingerprint": "ec17a727a5edfbcf", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ocr-process-next/index.ts"}, "region": {"startLine": 428}}}]}, {"ruleId": "scanner-7fa89f3720f90002", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ocr-process-next/index.ts:31"}, "properties": {"repobilityId": "b20a85a939eda797", "scanner": "scanner-primary", "fingerprint": "7fa89f3720f90002", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ocr-process-next/index.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-09431456d21a259e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/expire-stale-offers/index.ts:29"}, "properties": {"repobilityId": "421af409f4177290", "scanner": "scanner-primary", "fingerprint": "09431456d21a259e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/expire-stale-offers/index.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-32ace336385c576f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-cat-analysis/index.ts:43"}, "properties": {"repobilityId": "068baa601ee2a6ff", "scanner": "scanner-primary", "fingerprint": "32ace336385c576f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/parse-cat-analysis/index.ts"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-d74e43f1f9caddb2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-request-documents/index.ts:50"}, "properties": {"repobilityId": "cf69d8e8375684d3", "scanner": "scanner-primary", "fingerprint": "d74e43f1f9caddb2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-request-documents/index.ts"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-f1d6fdad8be5cc80", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-order-workflow-steps/index.ts:11"}, "properties": {"repobilityId": "e0efa709fd9180b7", "scanner": "scanner-primary", "fingerprint": "f1d6fdad8be5cc80", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-order-workflow-steps/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-ce86fb0c50ba047f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-payment-link/index.ts:6"}, "properties": {"repobilityId": "6fa3214b8a8fa39e", "scanner": "scanner-primary", "fingerprint": "ce86fb0c50ba047f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/create-payment-link/index.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-66c8afd1f75d1dad", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/secure-upload-otp-verify/index.ts:20"}, "properties": {"repobilityId": "fcbf3d44a9ce39c8", "scanner": "scanner-primary", "fingerprint": "66c8afd1f75d1dad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/secure-upload-otp-verify/index.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-75ba459fb45a141b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ai-paystub-allocate/index.ts:17"}, "properties": {"repobilityId": "5680a33d60ff90ab", "scanner": "scanner-primary", "fingerprint": "75ba459fb45a141b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ai-paystub-allocate/index.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-43db2bc777b7c3a3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-respond-counter-offer/index.ts:19"}, "properties": {"repobilityId": "0d3ecb99b8f97cae", "scanner": "scanner-primary", "fingerprint": "43db2bc777b7c3a3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-respond-counter-offer/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-ba36b1d085e1690c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-deposit-payment-link/index.ts:39"}, "properties": {"repobilityId": "ac3c6960e805a7e1", "scanner": "scanner-primary", "fingerprint": "ba36b1d085e1690c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/create-deposit-payment-link/index.ts"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-72c581a7d867afa8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ai-allocate-payment/index.ts:16"}, "properties": {"repobilityId": "94980415be0bdba2", "scanner": "scanner-primary", "fingerprint": "72c581a7d867afa8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ai-allocate-payment/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-8a0d45101485914c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vendor-iso17100-assess/index.ts:16"}, "properties": {"repobilityId": "11f59292804c1ef6", "scanner": "scanner-primary", "fingerprint": "8a0d45101485914c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vendor-iso17100-assess/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-15cc81fc38d824aa", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/process-inbound-email/index.ts:13"}, "properties": {"repobilityId": "49853a69683abd45", "scanner": "scanner-primary", "fingerprint": "15cc81fc38d824aa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/process-inbound-email/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-795226a5e71ca1ec", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/kiosk-auth.ts:17"}, "properties": {"repobilityId": "20e344243c5be82e", "scanner": "scanner-primary", "fingerprint": "795226a5e71ca1ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/kiosk-auth.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-fd317c5a882a5285", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/ringcentral.ts:212"}, "properties": {"repobilityId": "33aeafa998d98c95", "scanner": "scanner-primary", "fingerprint": "fd317c5a882a5285", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/ringcentral.ts"}, "region": {"startLine": 212}}}]}, {"ruleId": "scanner-1733875ad8a50974", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/tr.ts:6"}, "properties": {"repobilityId": "33068f42c9c6948a", "scanner": "scanner-primary", "fingerprint": "1733875ad8a50974", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/tr.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-505cae5876f86c3f", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in supabase/functions/_shared/google-auth.ts:46"}, "properties": {"repobilityId": "fe05f7ec573f8f46", "scanner": "scanner-primary", "fingerprint": "505cae5876f86c3f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/google-auth.ts"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-5df9856e209c5d08", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/transcription.ts:6"}, "properties": {"repobilityId": "70aba87fd273f944", "scanner": "scanner-primary", "fingerprint": "5df9856e209c5d08", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/transcription.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-9e5b069acaaddf9d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/customer-quote.ts:12"}, "properties": {"repobilityId": "96a8ed419b46dc85", "scanner": "scanner-primary", "fingerprint": "9e5b069acaaddf9d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/customer-quote.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-740d0cf616186c22", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in supabase/functions/_shared/google-storage.ts:155"}, "properties": {"repobilityId": "c7a0232a41872e1c", "scanner": "scanner-primary", "fingerprint": "740d0cf616186c22", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/google-storage.ts"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-5cfb7d5ace8785f3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/index.ts:12"}, "properties": {"repobilityId": "94dc12fe61fc118f", "scanner": "scanner-primary", "fingerprint": "5cfb7d5ace8785f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/index.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-8dc8a25f3687d814", "level": "note", "message": {"text": "Very large file: client/components/quote/Step4ReviewCheckout.tsx (3569 lines)"}, "properties": {"repobilityId": "6cb85b8390884acc", "scanner": "scanner-primary", "fingerprint": "8dc8a25f3687d814", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5e47afd5e5395dff", "level": "note", "message": {"text": "Very large file: client/components/shared/analysis/OcrResultsModal.tsx (4831 lines)"}, "properties": {"repobilityId": "ccfa20e9845e50b0", "scanner": "scanner-primary", "fingerprint": "5e47afd5e5395dff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0ccfd5878900c03a", "level": "note", "message": {"text": "Very large file: client/components/admin/WorkflowPipeline.tsx (3671 lines)"}, "properties": {"repobilityId": "41f51cc38bc07a1e", "scanner": "scanner-primary", "fingerprint": "0ccfd5878900c03a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9ed99f5fe4d08fb4", "level": "note", "message": {"text": "Very large file: client/components/admin/OrderFinanceTab.tsx (1401 lines)"}, "properties": {"repobilityId": "e4df8f4f97936c86", "scanner": "scanner-primary", "fingerprint": "9ed99f5fe4d08fb4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e7772e996b4e1ebe", "level": "note", "message": {"text": "Very large file: client/components/admin/BulkPaymentModal.tsx (1510 lines)"}, "properties": {"repobilityId": "af4f65cbb537c1e8", "scanner": "scanner-primary", "fingerprint": "e7772e996b4e1ebe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-62395153411bc937", "level": "note", "message": {"text": "Very large file: client/pages/admin/AccountsReceivable.tsx (1958 lines)"}, "properties": {"repobilityId": "d1dc8ffc0e525616", "scanner": "scanner-primary", "fingerprint": "62395153411bc937", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c4de9f58a3b98a3b", "level": "note", "message": {"text": "Very large file: client/pages/admin/CustomerDetail.tsx (2459 lines)"}, "properties": {"repobilityId": "90a2c3faae54ac89", "scanner": "scanner-primary", "fingerprint": "c4de9f58a3b98a3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-83766c4bdc80e6cd", "level": "note", "message": {"text": "Very large file: client/pages/admin/AdminCreateOrder.tsx (2780 lines)"}, "properties": {"repobilityId": "f625f18ab1322ddd", "scanner": "scanner-primary", "fingerprint": "83766c4bdc80e6cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4dc08b2f389bf9be", "level": "note", "message": {"text": "Very large file: client/pages/admin/AdminPartners.tsx (1550 lines)"}, "properties": {"repobilityId": "1045071e9cd72fa6", "scanner": "scanner-primary", "fingerprint": "4dc08b2f389bf9be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a196d7848b1b2b21", "level": "note", "message": {"text": "Very large file: client/pages/admin/FastQuoteCreate.tsx (2277 lines)"}, "properties": {"repobilityId": "fd010a2804a42391", "scanner": "scanner-primary", "fingerprint": "a196d7848b1b2b21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3a54f31786483483", "level": "note", "message": {"text": "Very large file: client/pages/admin/AdminOrderDetail.tsx (5362 lines)"}, "properties": {"repobilityId": "19f33d3c74943d50", "scanner": "scanner-primary", "fingerprint": "3a54f31786483483", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b1cb461135e14f70", "level": "note", "message": {"text": "Very large file: client/pages/admin/AdminQuoteDetail.tsx (6598 lines)"}, "properties": {"repobilityId": "d877f193480f381a", "scanner": "scanner-primary", "fingerprint": "b1cb461135e14f70", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a507505193f18c61", "level": "note", "message": {"text": "Very large file: client/pages/admin/OCRWordCountPage.tsx (1384 lines)"}, "properties": {"repobilityId": "19a0a4292a2a2b51", "scanner": "scanner-primary", "fingerprint": "a507505193f18c61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-39987224b551744d", "level": "note", "message": {"text": "Very large file: client/pages/admin/AdminOrdersList.tsx (2380 lines)"}, "properties": {"repobilityId": "02bbc4e7e1e65a91", "scanner": "scanner-primary", "fingerprint": "39987224b551744d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f7c10a79b5f35e3", "level": "note", "message": {"text": "Very large file: client/pages/admin/RecruitmentDetail.tsx (6447 lines)"}, "properties": {"repobilityId": "011072417f7d4409", "scanner": "scanner-primary", "fingerprint": "0f7c10a79b5f35e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-87fea237c9e83271", "level": "note", "message": {"text": "Very large file: client/pages/admin/PreprocessOCRPage.tsx (1847 lines)"}, "properties": {"repobilityId": "7e5520cccc44ce9d", "scanner": "scanner-primary", "fingerprint": "87fea237c9e83271", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6b67e98a7d10154c", "level": "note", "message": {"text": "Very large file: client/pages/admin/transcription/TranscriptionJobDetail.tsx (2073 lines)"}, "properties": {"repobilityId": "04ed289156f4181e", "scanner": "scanner-primary", "fingerprint": "6b67e98a7d10154c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e2fc2af12b5fc4a9", "level": "note", "message": {"text": "Very large file: client/pages/admin/transcription/TranscriptionDashboard.tsx (1212 lines)"}, "properties": {"repobilityId": "01d723d50af005bb", "scanner": "scanner-primary", "fingerprint": "e2fc2af12b5fc4a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c72351b1fafb826a", "level": "note", "message": {"text": "Very large file: docs/training/_build_pptx.cjs (1543 lines)"}, "properties": {"repobilityId": "d32b99e1f3b1d970", "scanner": "scanner-primary", "fingerprint": "c72351b1fafb826a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4a4ced71f6268671", "level": "note", "message": {"text": "Very large file: supabase/functions/update-workflow-step/index.ts (976 lines)"}, "properties": {"repobilityId": "cdbfad93d4793e0c", "scanner": "scanner-primary", "fingerprint": "4a4ced71f6268671", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-13467f942d918b62", "level": "note", "message": {"text": "Very large file: supabase/functions/generate-quote-pdf/index.ts (1782 lines)"}, "properties": {"repobilityId": "a442decee669c32c", "scanner": "scanner-primary", "fingerprint": "13467f942d918b62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4c9bd5a626b2f7ea", "level": "note", "message": {"text": "Very large file: supabase/functions/transcription-process/index.ts (1887 lines)"}, "properties": {"repobilityId": "2955be86908f9368", "scanner": "scanner-primary", "fingerprint": "4c9bd5a626b2f7ea", "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": "09215f2e859e2e05", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-733bc81d96cdde43", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: services/audio-extractor/package.json"}, "properties": {"repobilityId": "a74339370e76429d", "scanner": "scanner-primary", "fingerprint": "733bc81d96cdde43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/audio-extractor/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "72f4ee59db5bc335", "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": "06c185dec836d01b", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "e82cf0cf36146e9e", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "be7f590983f5014d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "abdf28399ef432af", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5d7ccd0a5164421a", "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": "13940da6c2493d4c", "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": "9bfb58d20691dfcd", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-505bc666a82f9849", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/settings.local.json"}, "properties": {"repobilityId": "777970b0fce0a93b", "scanner": "scanner-primary", "fingerprint": "505bc666a82f9849", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-d727f93162243546", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/utils/pdfOperations.ts:408"}, "properties": {"repobilityId": "8d354369f59bbc32", "scanner": "scanner-primary", "fingerprint": "d727f93162243546", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c51c1ac461f60db", "level": "none", "message": {"text": "Commented-code block (8 lines) in client/utils/pricing.ts:6"}, "properties": {"repobilityId": "d6902061e5e69895", "scanner": "scanner-primary", "fingerprint": "9c51c1ac461f60db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-160797a14da81e06", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/components/ProcessingStatus.tsx:98"}, "properties": {"repobilityId": "06645a3b5d66b99b", "scanner": "scanner-primary", "fingerprint": "160797a14da81e06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6943183ba4936b44", "level": "none", "message": {"text": "Commented-code block (11 lines) in client/components/upload/ConfirmationView.tsx:24"}, "properties": {"repobilityId": "723fddb61af0ab06", "scanner": "scanner-primary", "fingerprint": "6943183ba4936b44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb41928d1f31a9f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/quote/Step3Contact.tsx:110"}, "properties": {"repobilityId": "66edd8159ed80029", "scanner": "scanner-primary", "fingerprint": "fb41928d1f31a9f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3cce8b0f790a4061", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/quote/Step1Upload.tsx:553"}, "properties": {"repobilityId": "510cb7bd784c13b9", "scanner": "scanner-primary", "fingerprint": "3cce8b0f790a4061", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7f6fa16c5513ef9", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/quote/Step4ReviewCheckout.tsx:1022"}, "properties": {"repobilityId": "8502e25648931ab4", "scanner": "scanner-primary", "fingerprint": "e7f6fa16c5513ef9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09c5a770a533f47a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/quote/Step4ReviewCheckout.tsx:1902"}, "properties": {"repobilityId": "5d3489f9a7fb72ef", "scanner": "scanner-primary", "fingerprint": "09c5a770a533f47a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-71c6fb846f6cc775", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/shared/CustomerSearch.tsx:1"}, "properties": {"repobilityId": "82abd8e0f7a4bd19", "scanner": "scanner-primary", "fingerprint": "71c6fb846f6cc775", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a9f00ec7b636069", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/CustomerSearch.tsx:4"}, "properties": {"repobilityId": "794fcfb5d8cb2c69", "scanner": "scanner-primary", "fingerprint": "6a9f00ec7b636069", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-702755e7251610a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/shared/analysis/OcrResultsModal.tsx:1184"}, "properties": {"repobilityId": "901a5d4a80d779cb", "scanner": "scanner-primary", "fingerprint": "702755e7251610a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e67926014ee6c89a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/analysis/OcrResultsModal.tsx:851"}, "properties": {"repobilityId": "70ee4e538eaf7037", "scanner": "scanner-primary", "fingerprint": "e67926014ee6c89a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17fcdf3beac583bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/shared/document-flow/DocumentFlowEditor.tsx:95"}, "properties": {"repobilityId": "4a6a3d3e00d6aa7f", "scanner": "scanner-primary", "fingerprint": "17fcdf3beac583bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b2bca8aca977890", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/customer/CustomerUploadWidget.tsx:3"}, "properties": {"repobilityId": "023efd76195aa2ed", "scanner": "scanner-primary", "fingerprint": "9b2bca8aca977890", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a97d90a68aff7791", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/customer/PaymentModal.tsx:78"}, "properties": {"repobilityId": "d36d80ab3e495466", "scanner": "scanner-primary", "fingerprint": "a97d90a68aff7791", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f263fcd56df1d45", "level": "none", "message": {"text": "Commented-code block (7 lines) in client/components/pdf-manager/PdfTextEditor.tsx:1"}, "properties": {"repobilityId": "cc958bcb4be59e1a", "scanner": "scanner-primary", "fingerprint": "3f263fcd56df1d45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38c7098a4b6c281f", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/ConfirmDialog.tsx:3"}, "properties": {"repobilityId": "d68f3bc039a071a8", "scanner": "scanner-primary", "fingerprint": "38c7098a4b6c281f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beb8d14f0676e230", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/CustomerConversationTab.tsx:16"}, "properties": {"repobilityId": "ee4c2515d74dffc9", "scanner": "scanner-primary", "fingerprint": "beb8d14f0676e230", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8600f52bed7e0cbf", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/EditOrderModal.tsx:339"}, "properties": {"repobilityId": "db82c578f819a9f3", "scanner": "scanner-primary", "fingerprint": "8600f52bed7e0cbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0862f0bce7a524c2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/CustomerARSummary.tsx:54"}, "properties": {"repobilityId": "d87e8769e2b8e29c", "scanner": "scanner-primary", "fingerprint": "0862f0bce7a524c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-afe03595aa4cbcb2", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/WorkflowPipeline.tsx:1"}, "properties": {"repobilityId": "466ff2fd3c86b238", "scanner": "scanner-primary", "fingerprint": "afe03595aa4cbcb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d035935b29e8535b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/WorkflowPipeline.tsx:674"}, "properties": {"repobilityId": "c4ef48e8f3017592", "scanner": "scanner-primary", "fingerprint": "d035935b29e8535b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8682ec0f2afe8662", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/RecordPaymentModal.tsx:777"}, "properties": {"repobilityId": "2b4ad001cc676c9d", "scanner": "scanner-primary", "fingerprint": "8682ec0f2afe8662", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3993ef5288b7363e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/BalanceResolutionModal.tsx:270"}, "properties": {"repobilityId": "0560e24f84748fca", "scanner": "scanner-primary", "fingerprint": "3993ef5288b7363e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8cda4882b1d4cc43", "level": "none", "message": {"text": "Commented-code block (7 lines) in client/components/admin/OrderWorkflowSection.tsx:406"}, "properties": {"repobilityId": "c4d9113062fea2fe", "scanner": "scanner-primary", "fingerprint": "8cda4882b1d4cc43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50e16b04d7e334db", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/VendorFinderModal.tsx:1"}, "properties": {"repobilityId": "7795e74d5ebb0266", "scanner": "scanner-primary", "fingerprint": "50e16b04d7e334db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83fd4410f8adfcbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/OriginalsModal.tsx:99"}, "properties": {"repobilityId": "a5decfa846db14eb", "scanner": "scanner-primary", "fingerprint": "83fd4410f8adfcbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-004775b9d337533c", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/UnassignVendorModal.tsx:1"}, "properties": {"repobilityId": "004a98ad3030deb4", "scanner": "scanner-primary", "fingerprint": "004775b9d337533c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e63cdf09a6296bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/OrderFinanceTab.tsx:12"}, "properties": {"repobilityId": "c84754d4a20eb810", "scanner": "scanner-primary", "fingerprint": "5e63cdf09a6296bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-498ab0baba05271c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/RecordVendorPaymentModal.tsx:12"}, "properties": {"repobilityId": "511b5a016d2c1304", "scanner": "scanner-primary", "fingerprint": "498ab0baba05271c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98390116f889c6a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/EmailLogAccordion.tsx:207"}, "properties": {"repobilityId": "cb7d333f07e862ff", "scanner": "scanner-primary", "fingerprint": "98390116f889c6a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f702a4f5dadec32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/OrderInvoiceCard.tsx:887"}, "properties": {"repobilityId": "d01ce77a0059dcd6", "scanner": "scanner-primary", "fingerprint": "2f702a4f5dadec32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc060651a76d041a", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/components/admin/VendorAssignModal.tsx:1"}, "properties": {"repobilityId": "1c0dc66258cbf67a", "scanner": "scanner-primary", "fingerprint": "bc060651a76d041a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73be92b41738897a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/admin/MessageCustomerModal.tsx:134"}, "properties": {"repobilityId": "bf59f5ce1881b6fd", "scanner": "scanner-primary", "fingerprint": "73be92b41738897a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fb4fd2a1f444574", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/components/messaging/MessageComposer.tsx:87"}, "properties": {"repobilityId": "00f2f039dafd9305", "scanner": "scanner-primary", "fingerprint": "0fb4fd2a1f444574", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72721f3c26b30c74", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/lib/payment-api.ts:15"}, "properties": {"repobilityId": "b4476addcb24840f", "scanner": "scanner-primary", "fingerprint": "72721f3c26b30c74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a3c9184a33780ff", "level": "none", "message": {"text": "Commented-code block (7 lines) in client/lib/iso17100.ts:5"}, "properties": {"repobilityId": "1fa1db7112be6cce", "scanner": "scanner-primary", "fingerprint": "6a3c9184a33780ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ef60fab744dd58f", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/Index.tsx:159"}, "properties": {"repobilityId": "890bec9179e95ea0", "scanner": "scanner-primary", "fingerprint": "9ef60fab744dd58f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66251b50850d6e83", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/Index.tsx:69"}, "properties": {"repobilityId": "0210d96712f349a6", "scanner": "scanner-primary", "fingerprint": "66251b50850d6e83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01f4e9852ba6708e", "level": "none", "message": {"text": "Commented-code block (10 lines) in client/pages/quote/QuoteRevisionPage.tsx:86"}, "properties": {"repobilityId": "b776955d6fc06d39", "scanner": "scanner-primary", "fingerprint": "01f4e9852ba6708e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-addd813f91fefd59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/quote/QuoteRevisionPage.tsx:193"}, "properties": {"repobilityId": "308038283d3abf00", "scanner": "scanner-primary", "fingerprint": "addd813f91fefd59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-29c382a6fb9f3b6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/kiosk/KioskStaffForm.tsx:1"}, "properties": {"repobilityId": "8afc0a723cacff20", "scanner": "scanner-primary", "fingerprint": "29c382a6fb9f3b6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1bb8df961c086bc", "level": "none", "message": {"text": "Commented-code block (8 lines) in client/pages/kiosk/KioskShell.tsx:6"}, "properties": {"repobilityId": "4dcaa38de0496c9e", "scanner": "scanner-primary", "fingerprint": "c1bb8df961c086bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-457dcf5f3f3c3e59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/customer/CustomerMessages.tsx:103"}, "properties": {"repobilityId": "388c2c6072702d86", "scanner": "scanner-primary", "fingerprint": "457dcf5f3f3c3e59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e84ebfa0fd1bf910", "level": "note", "message": {"text": "Legacy-named symbol `isOld` in client/pages/customer/CustomerOrderDetail.tsx:791"}, "properties": {"repobilityId": "df99e5da02f55585", "scanner": "scanner-primary", "fingerprint": "e84ebfa0fd1bf910", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-41110d3cc5b197b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/pages/customer/CustomerOrderDetail.tsx:275"}, "properties": {"repobilityId": "bdf9dea37d917c46", "scanner": "scanner-primary", "fingerprint": "41110d3cc5b197b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d469bf69ccedf85e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminPaymentHistory.tsx:379"}, "properties": {"repobilityId": "5da08f6c25a018c6", "scanner": "scanner-primary", "fingerprint": "d469bf69ccedf85e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-436a2f784d5b6c3c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/PublicSubmissionsPage.tsx:194"}, "properties": {"repobilityId": "15c4135365c999fc", "scanner": "scanner-primary", "fingerprint": "436a2f784d5b6c3c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de795316001af498", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/pages/admin/CustomerDetail.tsx:620"}, "properties": {"repobilityId": "70158959cd809e0e", "scanner": "scanner-primary", "fingerprint": "de795316001af498", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d6014ac9fd02922", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminCreateOrder.tsx:239"}, "properties": {"repobilityId": "272debf2d7b51d0d", "scanner": "scanner-primary", "fingerprint": "6d6014ac9fd02922", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05ba8000d74fdc71", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminCreateOrder.tsx:1281"}, "properties": {"repobilityId": "8d8ed584a987b9e0", "scanner": "scanner-primary", "fingerprint": "05ba8000d74fdc71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-149c0ece1478df8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/VendorPaymentsList.tsx:21"}, "properties": {"repobilityId": "ab509e1d060b0d42", "scanner": "scanner-primary", "fingerprint": "149c0ece1478df8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dadccf87bbc73873", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/pages/admin/AdminQuotesList.tsx:169"}, "properties": {"repobilityId": "e940e66a72f1cc58", "scanner": "scanner-primary", "fingerprint": "dadccf87bbc73873", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b0d7e8b4f15f8fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/FastQuoteCreate.tsx:923"}, "properties": {"repobilityId": "9dfd29822f0fa113", "scanner": "scanner-primary", "fingerprint": "7b0d7e8b4f15f8fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1939cc5ffc643673", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminInvoiceDetail.tsx:264"}, "properties": {"repobilityId": "c60148af4bac6be2", "scanner": "scanner-primary", "fingerprint": "1939cc5ffc643673", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aebc43540fbebd18", "level": "none", "message": {"text": "Commented-code block (8 lines) in client/pages/admin/AdminProjectDetail.tsx:324"}, "properties": {"repobilityId": "02b7e6146e98af56", "scanner": "scanner-primary", "fingerprint": "aebc43540fbebd18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1da64bbb69599f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminProjectDetail.tsx:194"}, "properties": {"repobilityId": "3cb84872e312a5c6", "scanner": "scanner-primary", "fingerprint": "b1da64bbb69599f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95b8369ebce2422b", "level": "none", "message": {"text": "Commented-code block (7 lines) in client/pages/admin/RecruitmentList.tsx:21"}, "properties": {"repobilityId": "9a5362e9da923c8f", "scanner": "scanner-primary", "fingerprint": "95b8369ebce2422b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b3219c1ab91f701", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/pages/admin/AdminOrderDetail.tsx:294"}, "properties": {"repobilityId": "89cc04e2672c4982", "scanner": "scanner-primary", "fingerprint": "5b3219c1ab91f701", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a26c96e1717fff29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminOrderDetail.tsx:853"}, "properties": {"repobilityId": "7dca21c6a14a2f98", "scanner": "scanner-primary", "fingerprint": "a26c96e1717fff29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9bdee326ee7454f9", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminVendorsList.tsx:261"}, "properties": {"repobilityId": "2db0a7cd9db0b11f", "scanner": "scanner-primary", "fingerprint": "9bdee326ee7454f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ef6daa4730c7113", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminQuoteDetail.tsx:203"}, "properties": {"repobilityId": "9ea0a75bc0166dca", "scanner": "scanner-primary", "fingerprint": "5ef6daa4730c7113", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c00f13fc3c5a1ca1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminQuoteDetail.tsx:1390"}, "properties": {"repobilityId": "8060372e13bc2d69", "scanner": "scanner-primary", "fingerprint": "c00f13fc3c5a1ca1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3995001b536ca314", "level": "none", "message": {"text": "Commented-code block (7 lines) in client/pages/admin/PdfToWordPage.tsx:3"}, "properties": {"repobilityId": "832d3ddb6fde9430", "scanner": "scanner-primary", "fingerprint": "3995001b536ca314", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4364bbe144574c09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/AdminMessages.tsx:540"}, "properties": {"repobilityId": "a197914b42cf3ecb", "scanner": "scanner-primary", "fingerprint": "4364bbe144574c09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-70b32d91bb214b82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/OCRWordCountPage.tsx:660"}, "properties": {"repobilityId": "a467a277165f6e9e", "scanner": "scanner-primary", "fingerprint": "70b32d91bb214b82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c337a552586eb702", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/admin/AdminOrdersList.tsx:117"}, "properties": {"repobilityId": "f8cac9971fa6ecb5", "scanner": "scanner-primary", "fingerprint": "c337a552586eb702", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02ff4b99c60a78b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/RecruitmentRegradeBackfill.tsx:24"}, "properties": {"repobilityId": "bcd8092692968c2d", "scanner": "scanner-primary", "fingerprint": "02ff4b99c60a78b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0eb009ab996854bc", "level": "none", "message": {"text": "Commented-code block (12 lines) in client/pages/admin/RecruitmentDetail.tsx:1320"}, "properties": {"repobilityId": "49d22e1f8ca370a1", "scanner": "scanner-primary", "fingerprint": "0eb009ab996854bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba93b65f484fadd3", "level": "note", "message": {"text": "Legacy-named symbol `automated_pipeline_v1` in client/pages/admin/AdminQmsQueue.tsx:8"}, "properties": {"repobilityId": "1c4e9efc144420bd", "scanner": "scanner-primary", "fingerprint": "ba93b65f484fadd3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c8b6423b7855d50d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/PreprocessOCRPage.tsx:704"}, "properties": {"repobilityId": "d5bc745894029904", "scanner": "scanner-primary", "fingerprint": "c8b6423b7855d50d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae48c03ed2a92e7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/settings/WorkflowTemplatesSettings.tsx:386"}, "properties": {"repobilityId": "4d726cb406c92ddf", "scanner": "scanner-primary", "fingerprint": "ae48c03ed2a92e7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f480618ced39596c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/settings/CallRecordingSettings.tsx:230"}, "properties": {"repobilityId": "968393436ab9f84b", "scanner": "scanner-primary", "fingerprint": "f480618ced39596c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51674a7938c63a90", "level": "none", "message": {"text": "Commented-code block (9 lines) in client/pages/admin/transcription/TranscriptionJobDetail.tsx:268"}, "properties": {"repobilityId": "41cbc30bfdad7595", "scanner": "scanner-primary", "fingerprint": "51674a7938c63a90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b385ad6a33f9ee73", "level": "none", "message": {"text": "Commented-code block (7 lines) in client/pages/admin/transcription/TranscriptionDashboard.tsx:118"}, "properties": {"repobilityId": "c71ed88920d56b24", "scanner": "scanner-primary", "fingerprint": "b385ad6a33f9ee73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4aa7c0e804996632", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/transcription/TranscriptionDashboard.tsx:156"}, "properties": {"repobilityId": "24fdb0f1c149d576", "scanner": "scanner-primary", "fingerprint": "4aa7c0e804996632", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf662eca874ef453", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/admin/vendor-detail/VendorDetailHeader.tsx:77"}, "properties": {"repobilityId": "77ca00f850f12851", "scanner": "scanner-primary", "fingerprint": "bf662eca874ef453", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-554667a984d6de3b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/vendor-detail/VendorAuthTab.tsx:80"}, "properties": {"repobilityId": "35a5bd88c37083e9", "scanner": "scanner-primary", "fingerprint": "554667a984d6de3b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a229be88d2626d43", "level": "note", "message": {"text": "Legacy-named symbol `20260602_qms_public_lookup_views_v2` in client/pages/admin/vendor-detail/VendorQmsTab.tsx:102"}, "properties": {"repobilityId": "492f06911c8dcb97", "scanner": "scanner-primary", "fingerprint": "a229be88d2626d43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1ca511cbc9932549", "level": "none", "message": {"text": "Commented-code block (7 lines) in client/pages/admin/vendor-detail/VendorQmsTab.tsx:1"}, "properties": {"repobilityId": "f4054bef1de777d2", "scanner": "scanner-primary", "fingerprint": "1ca511cbc9932549", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4f6a2674ca34c16", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/vendor-detail/VendorRatesTab.tsx:284"}, "properties": {"repobilityId": "745fa7bde5527fd6", "scanner": "scanner-primary", "fingerprint": "b4f6a2674ca34c16", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-adf8c0c3194bd44d", "level": "note", "message": {"text": "Legacy-named symbol `translation_quality_v1` in client/pages/admin/tr/AdminReviewJobNew.tsx:78"}, "properties": {"repobilityId": "ab7fea1560d696ea", "scanner": "scanner-primary", "fingerprint": "adf8c0c3194bd44d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-66c9972cbb9c4d7f", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/pages/admin/tr/AdminReviewJobNew.tsx:1"}, "properties": {"repobilityId": "e4ca347be832dad4", "scanner": "scanner-primary", "fingerprint": "66c9972cbb9c4d7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0a0dccbc5969814", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/pages/admin/invoices/CreateInvoice.tsx:357"}, "properties": {"repobilityId": "75259e56378147a6", "scanner": "scanner-primary", "fingerprint": "d0a0dccbc5969814", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1de8aa96fa4dfb9a", "level": "none", "message": {"text": "Commented-code block (5 lines) in client/hooks/useDropdownOptions.ts:50"}, "properties": {"repobilityId": "975cfb92087e4839", "scanner": "scanner-primary", "fingerprint": "1de8aa96fa4dfb9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b032ea57b7f59e78", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/hooks/useAdminAuth.ts:87"}, "properties": {"repobilityId": "c2e14b4ae6baa28c", "scanner": "scanner-primary", "fingerprint": "b032ea57b7f59e78", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19137fa375ff7e3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in client/context/CustomerAuthContext.tsx:153"}, "properties": {"repobilityId": "aba34e6434e1dafd", "scanner": "scanner-primary", "fingerprint": "19137fa375ff7e3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c230419fa895375", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/CustomerAuthContext.tsx:66"}, "properties": {"repobilityId": "dac851447586d8c4", "scanner": "scanner-primary", "fingerprint": "5c230419fa895375", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-329064d19cf3d918", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/BrandingContext.tsx:48"}, "properties": {"repobilityId": "d6bd3f2bd455639c", "scanner": "scanner-primary", "fingerprint": "329064d19cf3d918", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17fc38bf10126f30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 client/context/UploadContext.tsx:405"}, "properties": {"repobilityId": "3366ff34b42a3482", "scanner": "scanner-primary", "fingerprint": "17fc38bf10126f30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc079f4f228e454c", "level": "note", "message": {"text": "Legacy-named symbol `cethos_app_figma_design_v1` in docs/training/_build_guidde_guide.cjs:2"}, "properties": {"repobilityId": "7d307a51d912a51b", "scanner": "scanner-primary", "fingerprint": "cc079f4f228e454c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-431b7ac7bd3f54e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/render-affidavit-fixture.mjs:3"}, "properties": {"repobilityId": "5420146bdf1081ae", "scanner": "scanner-primary", "fingerprint": "431b7ac7bd3f54e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9e2c54ac466ba3d", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/staff-deliver-step/index.ts:1"}, "properties": {"repobilityId": "81bdbde20fdbe07e", "scanner": "scanner-primary", "fingerprint": "f9e2c54ac466ba3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40858003a6fc4b8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/rc-sync-sms/index.ts:8"}, "properties": {"repobilityId": "459056235ce354cd", "scanner": "scanner-primary", "fingerprint": "40858003a6fc4b8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-107ce74041819897", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-step-draft-to-customer/index.ts:6"}, "properties": {"repobilityId": "9ab7dedfcda5d927", "scanner": "scanner-primary", "fingerprint": "107ce74041819897", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11db222d0d9352b4", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/send-final-deliverable/index.ts:1"}, "properties": {"repobilityId": "eef4f4b0d0b7532b", "scanner": "scanner-primary", "fingerprint": "11db222d0d9352b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97756f7f0a67b19f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-exchange-rates/index.ts:38"}, "properties": {"repobilityId": "dab60e0f228a2b9d", "scanner": "scanner-primary", "fingerprint": "97756f7f0a67b19f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6845cc75da54d3d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/get-customer-quote-detail/index.ts:1"}, "properties": {"repobilityId": "c35de829ade9ca42", "scanner": "scanner-primary", "fingerprint": "6845cc75da54d3d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb0f025a21ecd42c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cancel-order/index.ts:395"}, "properties": {"repobilityId": "0d1665db77eb4fdc", "scanner": "scanner-primary", "fingerprint": "fb0f025a21ecd42c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-459ac422113c58d3", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/ocr-process-mistral/index.ts:7"}, "properties": {"repobilityId": "121313023b4e2c5b", "scanner": "scanner-primary", "fingerprint": "459ac422113c58d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df1250e92ac1918c", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/rc-make-call/index.ts:11"}, "properties": {"repobilityId": "c6741ef930492a35", "scanner": "scanner-primary", "fingerprint": "df1250e92ac1918c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9977b079706dfc0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/update-workflow-step/index.ts:6"}, "properties": {"repobilityId": "7b62eceff1c88131", "scanner": "scanner-primary", "fingerprint": "9977b079706dfc0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51a1a5c9c5febaef", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/customer-resolve-impersonation/index.ts:1"}, "properties": {"repobilityId": "dbc0de0873e60733", "scanner": "scanner-primary", "fingerprint": "51a1a5c9c5febaef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40028894cbde5e83", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/customer-quote-finalize-files/index.ts:1"}, "properties": {"repobilityId": "1b496ec73ef0bca7", "scanner": "scanner-primary", "fingerprint": "40028894cbde5e83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e20719530192d47", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-preflight/index.ts:6"}, "properties": {"repobilityId": "3d4bdb21697d6e3d", "scanner": "scanner-primary", "fingerprint": "1e20719530192d47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd81629b1be8d81b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-oauth/index.ts:67"}, "properties": {"repobilityId": "c603f324b1ea73a1", "scanner": "scanner-primary", "fingerprint": "bd81629b1be8d81b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0f7e0446fccbae6", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/admin-record-qualification/index.ts:8"}, "properties": {"repobilityId": "9a4b6e3b1e2741c8", "scanner": "scanner-primary", "fingerprint": "b0f7e0446fccbae6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4631081ad76962eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-vendor-share-create/index.ts:1"}, "properties": {"repobilityId": "4449cc0550a74fde", "scanner": "scanner-primary", "fingerprint": "4631081ad76962eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e9354a6bde4ec57", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/get-customer-orders/index.ts:4"}, "properties": {"repobilityId": "94cd4fd060164e78", "scanner": "scanner-primary", "fingerprint": "4e9354a6bde4ec57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e95da7945cda8b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-approve-job-plan/index.ts:36"}, "properties": {"repobilityId": "d0c27b3bdbe1d254", "scanner": "scanner-primary", "fingerprint": "3e95da7945cda8b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a3f57a78b1bb4b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/vendor-negotiate-counter/index.ts:16"}, "properties": {"repobilityId": "627dec352434cf2b", "scanner": "scanner-primary", "fingerprint": "0a3f57a78b1bb4b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7737f206f034e181", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-negotiate-counter/index.ts:315"}, "properties": {"repobilityId": "c46a6d1ebbc21681", "scanner": "scanner-primary", "fingerprint": "7737f206f034e181", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-602705d36505571e", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/manage-vendor-payables/index.ts:1"}, "properties": {"repobilityId": "1d4e19dc7cac51af", "scanner": "scanner-primary", "fingerprint": "602705d36505571e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e0229b87417745e", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/upload-staff-quote-file/index.ts:1"}, "properties": {"repobilityId": "178981ac52c05a31", "scanner": "scanner-primary", "fingerprint": "7e0229b87417745e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51dff5a1136a45cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/vendor-activation-email-cron/index.ts:4"}, "properties": {"repobilityId": "b783651e1626f033", "scanner": "scanner-primary", "fingerprint": "51dff5a1136a45cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4fad3995fad632b", "level": "note", "message": {"text": "Legacy-named symbol `pmLegacy` in supabase/functions/manage-vendor-payments/index.ts:322"}, "properties": {"repobilityId": "b3ca50ea22dccea3", "scanner": "scanner-primary", "fingerprint": "e4fad3995fad632b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ba996abe8b4eddbe", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/manage-vendor-payments/index.ts:5"}, "properties": {"repobilityId": "b7750b155c4b1cb3", "scanner": "scanner-primary", "fingerprint": "ba996abe8b4eddbe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-468856d80c81c219", "level": "note", "message": {"text": "Legacy-named symbol `create_folder_v2` in supabase/functions/dropbox-files/index.ts:117"}, "properties": {"repobilityId": "84fb21c59397c0a8", "scanner": "scanner-primary", "fingerprint": "468856d80c81c219", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-210073d0e67bd0e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-files/index.ts:83"}, "properties": {"repobilityId": "d8c041f0157af1a6", "scanner": "scanner-primary", "fingerprint": "210073d0e67bd0e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-200221ba6e34b2a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-ai-check/index.ts:60"}, "properties": {"repobilityId": "0b96dd84d5e7c4ca", "scanner": "scanner-primary", "fingerprint": "200221ba6e34b2a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7f7c8372555894b", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/ocr-batch-results/index.ts:1"}, "properties": {"repobilityId": "933cf59bfe9d5a83", "scanner": "scanner-primary", "fingerprint": "f7f7c8372555894b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9ab4d8bd1dd74c1", "level": "none", "message": {"text": "Commented-code block (11 lines) in supabase/functions/tr-create-job/index.ts:4"}, "properties": {"repobilityId": "bdd96601132ad833", "scanner": "scanner-primary", "fingerprint": "a9ab4d8bd1dd74c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6211a7d0d2f70c1", "level": "note", "message": {"text": "Legacy-named symbol `scribe_v1` in supabase/functions/rc-call-recording/index.ts:166"}, "properties": {"repobilityId": "1a42f5d1c5b6d767", "scanner": "scanner-primary", "fingerprint": "e6211a7d0d2f70c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ca61ce629a5830dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/rc-call-recording/index.ts:12"}, "properties": {"repobilityId": "0538f6a5a59eb4a7", "scanner": "scanner-primary", "fingerprint": "ca61ce629a5830dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f30e4593bed154d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-call-recording/index.ts:105"}, "properties": {"repobilityId": "5776f885e397d5d7", "scanner": "scanner-primary", "fingerprint": "2f30e4593bed154d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a4bb7f0a1a073f5", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/cal-integrations/index.ts:9"}, "properties": {"repobilityId": "d9740e6894267110", "scanner": "scanner-primary", "fingerprint": "7a4bb7f0a1a073f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2494b16a2df87fd0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/cal-integrations/index.ts:244"}, "properties": {"repobilityId": "b394a60400b1f1df", "scanner": "scanner-primary", "fingerprint": "2494b16a2df87fd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2f24be8c36bd458", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/notify-customer-order-confirmed/index.ts:1"}, "properties": {"repobilityId": "dbf4658826fced6b", "scanner": "scanner-primary", "fingerprint": "c2f24be8c36bd458", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd866cdfca9f9d88", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/update-quote-from-analysis/index.ts:1"}, "properties": {"repobilityId": "f0a1f79064898f1d", "scanner": "scanner-primary", "fingerprint": "bd866cdfca9f9d88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-099d5df75b1f416f", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/notify-vendor-instructions-changed/index.ts:1"}, "properties": {"repobilityId": "f72712f79a39af19", "scanner": "scanner-primary", "fingerprint": "099d5df75b1f416f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e366a8b9c781d92b", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/recalculate-quote-pricing/index.ts:5"}, "properties": {"repobilityId": "4fd92a8e95f14de0", "scanner": "scanner-primary", "fingerprint": "e366a8b9c781d92b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4eb56c2068195dc", "level": "none", "message": {"text": "Commented-code block (12 lines) in supabase/functions/admin-impersonate-vendor/index.ts:1"}, "properties": {"repobilityId": "5424c1581bda4bbb", "scanner": "scanner-primary", "fingerprint": "e4eb56c2068195dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62e863066f6463fa", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/transcription-poll-google-batch/index.ts:3"}, "properties": {"repobilityId": "e2fb1c910be61038", "scanner": "scanner-primary", "fingerprint": "62e863066f6463fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-260f794185abaed4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-poll-google-batch/index.ts:103"}, "properties": {"repobilityId": "4558d1b26ef53eed", "scanner": "scanner-primary", "fingerprint": "260f794185abaed4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b75b50d993cb7af2", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/admin-impersonate-customer/index.ts:10"}, "properties": {"repobilityId": "3fbda7a79c9f778f", "scanner": "scanner-primary", "fingerprint": "b75b50d993cb7af2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a651790c5a4c924", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/send-customer-message/index.ts:1"}, "properties": {"repobilityId": "a6ce0a573841a976", "scanner": "scanner-primary", "fingerprint": "8a651790c5a4c924", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6183d91010882108", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-customer-message/index.ts:480"}, "properties": {"repobilityId": "5e6cb270c40ee361", "scanner": "scanner-primary", "fingerprint": "6183d91010882108", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5894f39bfed03a6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/get-staff-tasks/index.ts:11"}, "properties": {"repobilityId": "cd950781d0306584", "scanner": "scanner-primary", "fingerprint": "5894f39bfed03a6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38896c0a6c29c5e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/get-order-workflow/index.ts:1"}, "properties": {"repobilityId": "55ac316f4b789b33", "scanner": "scanner-primary", "fingerprint": "38896c0a6c29c5e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-596bb0522f7ab14b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/get-order-workflow/index.ts:517"}, "properties": {"repobilityId": "149ef413612a4606", "scanner": "scanner-primary", "fingerprint": "596bb0522f7ab14b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5fe3d16dc587de1f", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/delete-staff-quote-file/index.ts:21"}, "properties": {"repobilityId": "40e8cf58113e2a05", "scanner": "scanner-primary", "fingerprint": "5fe3d16dc587de1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6783b35958349908", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/delete-staff-quote-file/index.ts:13"}, "properties": {"repobilityId": "844ea5968288ac89", "scanner": "scanner-primary", "fingerprint": "6783b35958349908", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2ddeb08b93e6a97", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/generate-quote-pdf/index.ts:10"}, "properties": {"repobilityId": "0b7119b2d6107244", "scanner": "scanner-primary", "fingerprint": "d2ddeb08b93e6a97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89b4b304f08f7e36", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-quote-pdf/index.ts:386"}, "properties": {"repobilityId": "1a1bb7e0586123ba", "scanner": "scanner-primary", "fingerprint": "89b4b304f08f7e36", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ff311b68686d6eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/assign-order-workflow/index.ts:1"}, "properties": {"repobilityId": "b0d6a20572f75b3a", "scanner": "scanner-primary", "fingerprint": "1ff311b68686d6eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d4189a54e29b312", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/validate-partner-code/index.ts:1"}, "properties": {"repobilityId": "f50a6049e067cc1d", "scanner": "scanner-primary", "fingerprint": "5d4189a54e29b312", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dc8125a9e855f44", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/secure-upload-otp-send/index.ts:9"}, "properties": {"repobilityId": "35eb1cfc56b770b4", "scanner": "scanner-primary", "fingerprint": "1dc8125a9e855f44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fac36ad896677b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/secure-upload-otp-send/index.ts:237"}, "properties": {"repobilityId": "b71b71fd9e805435", "scanner": "scanner-primary", "fingerprint": "1fac36ad896677b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e1f9c43729c9dfb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/process-invoice-queue/index.ts:59"}, "properties": {"repobilityId": "9c48b69a28a622aa", "scanner": "scanner-primary", "fingerprint": "9e1f9c43729c9dfb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aff1c876283bbcaf", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/void-vendor-payable/index.ts:3"}, "properties": {"repobilityId": "ad687d252d677f3c", "scanner": "scanner-primary", "fingerprint": "aff1c876283bbcaf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec2c0f666fd90654", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-ai-compare/index.ts:1"}, "properties": {"repobilityId": "3b2bd77596f882af", "scanner": "scanner-primary", "fingerprint": "ec2c0f666fd90654", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cba9166c4fb00b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-ai-compare/index.ts:157"}, "properties": {"repobilityId": "f68ac773343740b8", "scanner": "scanner-primary", "fingerprint": "6cba9166c4fb00b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-689ae2d76c210c3b", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/apply-affidavit-and-finalize/index.ts:22"}, "properties": {"repobilityId": "74e0cd6f28a23391", "scanner": "scanner-primary", "fingerprint": "689ae2d76c210c3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c2b6a0cb374f675", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-upload/index.ts:315"}, "properties": {"repobilityId": "b5d9f20f7a99dfcd", "scanner": "scanner-primary", "fingerprint": "3c2b6a0cb374f675", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb0aead7ce1d04f2", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/analyse-ocr-next/index.ts:1"}, "properties": {"repobilityId": "17f8996b571fc76f", "scanner": "scanner-primary", "fingerprint": "eb0aead7ce1d04f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ce266e71276716f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/analyse-ocr-next/index.ts:233"}, "properties": {"repobilityId": "45b831e9ec2b6751", "scanner": "scanner-primary", "fingerprint": "4ce266e71276716f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e69a0f64b45e90d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-search-project-files/index.ts:1"}, "properties": {"repobilityId": "c163ed614c869039", "scanner": "scanner-primary", "fingerprint": "e69a0f64b45e90d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50eb96455ff711f0", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/vendor-acceptance-reminders/index.ts:5"}, "properties": {"repobilityId": "a67f6a03585048ba", "scanner": "scanner-primary", "fingerprint": "50eb96455ff711f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a4e28001cb19398", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/vendor-doc-request-status-sweep/index.ts:4"}, "properties": {"repobilityId": "523d0d3cac38b7e3", "scanner": "scanner-primary", "fingerprint": "1a4e28001cb19398", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd8ce169b7b8820f", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-link-existing-file/index.ts:91"}, "properties": {"repobilityId": "05c32bcf806c2aaf", "scanner": "scanner-primary", "fingerprint": "fd8ce169b7b8820f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-988b7cc0a100e8da", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/get-customer-quotes/index.ts:4"}, "properties": {"repobilityId": "cb87dee96b11c4ef", "scanner": "scanner-primary", "fingerprint": "988b7cc0a100e8da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15b4bf76b660afd8", "level": "none", "message": {"text": "Commented-code block (14 lines) in supabase/functions/send-invoice-email/index.ts:1"}, "properties": {"repobilityId": "23c048405a8da758", "scanner": "scanner-primary", "fingerprint": "15b4bf76b660afd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ac58f40a215837d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-invoice-email/index.ts:349"}, "properties": {"repobilityId": "8883c6c1d68a878c", "scanner": "scanner-primary", "fingerprint": "8ac58f40a215837d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4931dce0c4fb4f8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-email/index.ts:1"}, "properties": {"repobilityId": "3ac2de153934899d", "scanner": "scanner-primary", "fingerprint": "4931dce0c4fb4f8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2aed7e5c90253064", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-email/index.ts:64"}, "properties": {"repobilityId": "1c8a0c1646e25d17", "scanner": "scanner-primary", "fingerprint": "2aed7e5c90253064", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-88e8ef838c62a00e", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/cvp-suggest-vendor-rate/index.ts:8"}, "properties": {"repobilityId": "af897f5444fdf793", "scanner": "scanner-primary", "fingerprint": "88e8ef838c62a00e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3067be04047e496", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/pdf-to-word-mistral/index.ts:237"}, "properties": {"repobilityId": "6a74ca74e37a896d", "scanner": "scanner-primary", "fingerprint": "d3067be04047e496", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7287ee3fe22732cf", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/vendor-doc-request-reminder/index.ts:9"}, "properties": {"repobilityId": "d8ae81509c5e96b6", "scanner": "scanner-primary", "fingerprint": "7287ee3fe22732cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-710c335881d3e76f", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-payment-reminders/index.ts:1"}, "properties": {"repobilityId": "230499ab5d3b40f4", "scanner": "scanner-primary", "fingerprint": "710c335881d3e76f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46b5cb4a6061353f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/provision-tm-job/index.ts:126"}, "properties": {"repobilityId": "b7ea0f9c26de7d43", "scanner": "scanner-primary", "fingerprint": "46b5cb4a6061353f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d7302082cfe2295", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/analyse-ocr-batch/index.ts:20"}, "properties": {"repobilityId": "fe9a7f803c1a1da2", "scanner": "scanner-primary", "fingerprint": "9d7302082cfe2295", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b94edf034d4f3929", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/index.ts:338"}, "properties": {"repobilityId": "e3473cc3415e34f3", "scanner": "scanner-primary", "fingerprint": "b94edf034d4f3929", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2715dd41fe05fa0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/stripe-webhook/index.ts:64"}, "properties": {"repobilityId": "70898cdbc14dc3cd", "scanner": "scanner-primary", "fingerprint": "e2715dd41fe05fa0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-efef5c806a7ccaca", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/scan-public-submission/index.ts:5"}, "properties": {"repobilityId": "ba2fa59b96f99d6d", "scanner": "scanner-primary", "fingerprint": "efef5c806a7ccaca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ea40b02eaa01f42", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/scan-public-submission/index.ts:205"}, "properties": {"repobilityId": "9b1072650bf35a84", "scanner": "scanner-primary", "fingerprint": "5ea40b02eaa01f42", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b6ce23ef546f499", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/process-quote-documents/index.ts:121"}, "properties": {"repobilityId": "b36c272761003fff", "scanner": "scanner-primary", "fingerprint": "2b6ce23ef546f499", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d35819d2e3cbca7", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/crm-create-order/index.ts:1"}, "properties": {"repobilityId": "f36ba405787a73af", "scanner": "scanner-primary", "fingerprint": "1d35819d2e3cbca7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37e3be4fab998c07", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/apostille-consult-sms-reminders/index.ts:6"}, "properties": {"repobilityId": "4e01d6089cfa4943", "scanner": "scanner-primary", "fingerprint": "37e3be4fab998c07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04cac07c0b419b91", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/vendor-auth-otp-send/index.ts:1"}, "properties": {"repobilityId": "060dc6cdc9e9a86a", "scanner": "scanner-primary", "fingerprint": "04cac07c0b419b91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6aabbdfd9d67d74", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-auth-otp-send/index.ts:220"}, "properties": {"repobilityId": "cf957da138d456f3", "scanner": "scanner-primary", "fingerprint": "a6aabbdfd9d67d74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff753acb0f172269", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/get-brevo-email-events/index.ts:1"}, "properties": {"repobilityId": "80837ae277f3d3de", "scanner": "scanner-primary", "fingerprint": "ff753acb0f172269", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58915298c933d7fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/get-brevo-email-events/index.ts:54"}, "properties": {"repobilityId": "9f3ff4eb26737c57", "scanner": "scanner-primary", "fingerprint": "58915298c933d7fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c1e1132cc3c10fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/qms-auto-qualify/index.ts:3"}, "properties": {"repobilityId": "ed370cbc3277f3a1", "scanner": "scanner-primary", "fingerprint": "6c1e1132cc3c10fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ede85ff9ada623b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qms-auto-qualify/index.ts:107"}, "properties": {"repobilityId": "1c7c0492ac16bb5a", "scanner": "scanner-primary", "fingerprint": "ede85ff9ada623b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-21a744ad4b810fd6", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/create-vendor/index.ts:88"}, "properties": {"repobilityId": "1d22170d5db16891", "scanner": "scanner-primary", "fingerprint": "21a744ad4b810fd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb158948765a6cdf", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/review-draft-file/index.ts:1"}, "properties": {"repobilityId": "f1cc1cfdbc2bd7ad", "scanner": "scanner-primary", "fingerprint": "fb158948765a6cdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d6b1a3901733366", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/review-draft-file/index.ts:1034"}, "properties": {"repobilityId": "b7af2c6673105f25", "scanner": "scanner-primary", "fingerprint": "0d6b1a3901733366", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62a7d8c4319686c0", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/ocr-batch-create/index.ts:11"}, "properties": {"repobilityId": "672880abe7ada615", "scanner": "scanner-primary", "fingerprint": "62a7d8c4319686c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ce05813299f76b1", "level": "none", "message": {"text": "Commented-code block (11 lines) in supabase/functions/admin-create-order/index.ts:1"}, "properties": {"repobilityId": "73c9321aa8c51338", "scanner": "scanner-primary", "fingerprint": "8ce05813299f76b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60e75ddcb98098b9", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/find-matching-vendors/index.ts:1"}, "properties": {"repobilityId": "477c6f90971d3212", "scanner": "scanner-primary", "fingerprint": "60e75ddcb98098b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7e32df6103a8f79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/upload-complete/index.ts:549"}, "properties": {"repobilityId": "8eb97d4f7e4bb726", "scanner": "scanner-primary", "fingerprint": "f7e32df6103a8f79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9d742b77fee3490", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-deliver/index.ts:803"}, "properties": {"repobilityId": "0c322cdc05e80054", "scanner": "scanner-primary", "fingerprint": "e9d742b77fee3490", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-909d2fa13b537cad", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/vendor-invitation-reminder/index.ts:1"}, "properties": {"repobilityId": "1d12a81f3951def0", "scanner": "scanner-primary", "fingerprint": "909d2fa13b537cad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2530f1f190236a4", "level": "note", "message": {"text": "Legacy-named symbol `scribe_v2` in supabase/functions/transcription-process/index.ts:1084"}, "properties": {"repobilityId": "101160ee778295b6", "scanner": "scanner-primary", "fingerprint": "f2530f1f190236a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-759029b739e70363", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-process/index.ts:1"}, "properties": {"repobilityId": "8bd0ef2d638b7bd8", "scanner": "scanner-primary", "fingerprint": "759029b739e70363", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-341b72ad633373b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/transcription-process/index.ts:863"}, "properties": {"repobilityId": "51963671d2c4be74", "scanner": "scanner-primary", "fingerprint": "341b72ad633373b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-52e72343e35d83fb", "level": "note", "message": {"text": "Legacy-named symbol `pmLegacy` in supabase/functions/manage-customer-payments/index.ts:342"}, "properties": {"repobilityId": "b61794532583ba82", "scanner": "scanner-primary", "fingerprint": "52e72343e35d83fb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-89c605de96dd18d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/manage-customer-payments/index.ts:437"}, "properties": {"repobilityId": "faaac15f39c65adf", "scanner": "scanner-primary", "fingerprint": "89c605de96dd18d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77c0a15432ef73bf", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/manage-receivables/index.ts:1"}, "properties": {"repobilityId": "4f517323dbebffba", "scanner": "scanner-primary", "fingerprint": "77c0a15432ef73bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19a0b5613d49859b", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/get-customer-dashboard/index.ts:14"}, "properties": {"repobilityId": "0eec5a2a5079d124", "scanner": "scanner-primary", "fingerprint": "19a0b5613d49859b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03106e9a2c794b94", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/notify-customer-quote-ack/index.ts:1"}, "properties": {"repobilityId": "8b849ff7621d765d", "scanner": "scanner-primary", "fingerprint": "03106e9a2c794b94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84a0f92a4b5d14da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/pdf-to-word-convert/index.ts:120"}, "properties": {"repobilityId": "9089100a6bb7c3a8", "scanner": "scanner-primary", "fingerprint": "84a0f92a4b5d14da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01c2ae9f8a74ea6e", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/tr-vendor-finding-respond/index.ts:6"}, "properties": {"repobilityId": "df980fb3e6f1bbeb", "scanner": "scanner-primary", "fingerprint": "01c2ae9f8a74ea6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d440c7ffae3d647", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/generate-invoice-pdf/index.ts:1"}, "properties": {"repobilityId": "7a5897c75f0c2ed2", "scanner": "scanner-primary", "fingerprint": "5d440c7ffae3d647", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d74c99bf19447f9", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/verify-customer-login-otp/index.ts:1"}, "properties": {"repobilityId": "c7b0a311fb8d4578", "scanner": "scanner-primary", "fingerprint": "7d74c99bf19447f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3989f56c932ba36a", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/vendor-send-cv-nda-reminder/index.ts:4"}, "properties": {"repobilityId": "fb89bae87832ef22", "scanner": "scanner-primary", "fingerprint": "3989f56c932ba36a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-547b82f2aa691838", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-send-cv-nda-reminder/index.ts:228"}, "properties": {"repobilityId": "eced93c09ef35e10", "scanner": "scanner-primary", "fingerprint": "547b82f2aa691838", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-37b57e8ee491e429", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-sync-calls/index.ts:148"}, "properties": {"repobilityId": "1259044fa7fcd3c7", "scanner": "scanner-primary", "fingerprint": "37b57e8ee491e429", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6cb34c7f19d6ecd8", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/generate-tax-report/index.ts:5"}, "properties": {"repobilityId": "1db1bf42237bf378", "scanner": "scanner-primary", "fingerprint": "6cb34c7f19d6ecd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-237c19689b12f6fd", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/send-deposit-reminder/index.ts:1"}, "properties": {"repobilityId": "7c7026e90e4c0cad", "scanner": "scanner-primary", "fingerprint": "237c19689b12f6fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-230d91ba6b16a79f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-deposit-reminder/index.ts:238"}, "properties": {"repobilityId": "219f19c31b2a7a34", "scanner": "scanner-primary", "fingerprint": "230d91ba6b16a79f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5fcc7a3893282a78", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/list-vendor-qms/index.ts:4"}, "properties": {"repobilityId": "7d882cebe8ae3f7a", "scanner": "scanner-primary", "fingerprint": "5fcc7a3893282a78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fac9ee02a6ccd7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-stripe-webhook/index.ts:1"}, "properties": {"repobilityId": "be960593b2279f35", "scanner": "scanner-primary", "fingerprint": "5fac9ee02a6ccd7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87c21a4ec1d9f0de", "level": "none", "message": {"text": "Commented-code block (21 lines) in supabase/functions/admin-manage-customer/index.ts:7"}, "properties": {"repobilityId": "100c9fc783a9bb8f", "scanner": "scanner-primary", "fingerprint": "87c21a4ec1d9f0de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ebb4e60031ca3dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-call-intelligence-report/index.ts:221"}, "properties": {"repobilityId": "ecdef4a2caa49343", "scanner": "scanner-primary", "fingerprint": "5ebb4e60031ca3dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4b0f11796f93fe1", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/generate-order-instructions/index.ts:1"}, "properties": {"repobilityId": "621c18e11523cb58", "scanner": "scanner-primary", "fingerprint": "c4b0f11796f93fe1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-179797b7da58c7e6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/generate-order-instructions/index.ts:283"}, "properties": {"repobilityId": "35e31b9ee4616c81", "scanner": "scanner-primary", "fingerprint": "179797b7da58c7e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b129224adc905923", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/void-customer-invoice/index.ts:3"}, "properties": {"repobilityId": "6a889d5e3d644bee", "scanner": "scanner-primary", "fingerprint": "b129224adc905923", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43af2cdeea8cb681", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/staff-submit-bug-report/index.ts:140"}, "properties": {"repobilityId": "9fd3dd2a96926ce7", "scanner": "scanner-primary", "fingerprint": "43af2cdeea8cb681", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8603d5c7cd20b0ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/manage-sops/index.ts:3"}, "properties": {"repobilityId": "e6248e71cadab7b4", "scanner": "scanner-primary", "fingerprint": "8603d5c7cd20b0ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa135b0e9fc03b2b", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/rc-send-sms/index.ts:6"}, "properties": {"repobilityId": "c5724e71cbda348f", "scanner": "scanner-primary", "fingerprint": "aa135b0e9fc03b2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60742e6509b4b6fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/qms-request-documents-bulk/index.ts:6"}, "properties": {"repobilityId": "7b95070a25237e19", "scanner": "scanner-primary", "fingerprint": "60742e6509b4b6fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d1f8208d1a58e54", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qms-request-documents-bulk/index.ts:230"}, "properties": {"repobilityId": "e403f5aaf918c0cd", "scanner": "scanner-primary", "fingerprint": "4d1f8208d1a58e54", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3906368146d6ddfe", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/negotiation-hitl-reminder/index.ts:1"}, "properties": {"repobilityId": "8c94c24b50977572", "scanner": "scanner-primary", "fingerprint": "3906368146d6ddfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecba1c41e63e061a", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/notify-staff-new-lead/index.ts:1"}, "properties": {"repobilityId": "1601cec8ad4bd881", "scanner": "scanner-primary", "fingerprint": "ecba1c41e63e061a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-332394297409ffce", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/upload-start/index.ts:28"}, "properties": {"repobilityId": "5c37a673d7a3ec40", "scanner": "scanner-primary", "fingerprint": "332394297409ffce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-557b6ff0b49ba93a", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/send-customer-login-otp/index.ts:1"}, "properties": {"repobilityId": "6c97738e5dcdeec0", "scanner": "scanner-primary", "fingerprint": "557b6ff0b49ba93a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-571ddc9573c3567e", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-quote-link-email/index.ts:13"}, "properties": {"repobilityId": "d02694aab1516483", "scanner": "scanner-primary", "fingerprint": "571ddc9573c3567e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-759f24175b07734e", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/create-checkout-session/index.ts:7"}, "properties": {"repobilityId": "c55dd746c732238c", "scanner": "scanner-primary", "fingerprint": "759f24175b07734e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0666950555d78a0", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/customer-approve-quote-ar/index.ts:10"}, "properties": {"repobilityId": "64de298d5c8e4a8f", "scanner": "scanner-primary", "fingerprint": "f0666950555d78a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fefb3cf2ae2792e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/customer-approve-quote-ar/index.ts:55"}, "properties": {"repobilityId": "ec216114822a0fc2", "scanner": "scanner-primary", "fingerprint": "7fefb3cf2ae2792e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30ff6d1a3e01baec", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/get-customer-files/index.ts:15"}, "properties": {"repobilityId": "ebcf61e19cbeff0e", "scanner": "scanner-primary", "fingerprint": "30ff6d1a3e01baec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f411beadd63b3557", "level": "note", "message": {"text": "Legacy-named symbol `create_folder_v2` in supabase/functions/dropbox-sync/index.ts:615"}, "properties": {"repobilityId": "bae0105e72494599", "scanner": "scanner-primary", "fingerprint": "f411beadd63b3557", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9a5c2528b63e53ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/dropbox-sync/index.ts:220"}, "properties": {"repobilityId": "cc61e03ed1402224", "scanner": "scanner-primary", "fingerprint": "9a5c2528b63e53ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66cb04d7f668b0c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dropbox-sync/index.ts:225"}, "properties": {"repobilityId": "746a2a4790a4b169", "scanner": "scanner-primary", "fingerprint": "66cb04d7f668b0c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e6778b34798c1e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-vendor-upload-new-version/index.ts:1"}, "properties": {"repobilityId": "436ab9cc183c7e2e", "scanner": "scanner-primary", "fingerprint": "0e6778b34798c1e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a0d57f0947d6893", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/rc-webhook-manage/index.ts:5"}, "properties": {"repobilityId": "7967fa7a8265fbee", "scanner": "scanner-primary", "fingerprint": "9a0d57f0947d6893", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f50d2df280a16032", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/promote-step-delivery-to-draft/index.ts:1"}, "properties": {"repobilityId": "a90465a8fb16725c", "scanner": "scanner-primary", "fingerprint": "f50d2df280a16032", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca0d7e4fca98891d", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/manage-staff-competence/index.ts:6"}, "properties": {"repobilityId": "f0926f8b9ce11242", "scanner": "scanner-primary", "fingerprint": "ca0d7e4fca98891d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a85816834b25203d", "level": "note", "message": {"text": "Legacy-named symbol `scribe_v1` in supabase/functions/rc-auto-transcribe/index.ts:182"}, "properties": {"repobilityId": "2b78a2f9428c15d4", "scanner": "scanner-primary", "fingerprint": "a85816834b25203d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9825c7d4963cd33d", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/rc-auto-transcribe/index.ts:4"}, "properties": {"repobilityId": "5f4c4ccfd3efc526", "scanner": "scanner-primary", "fingerprint": "9825c7d4963cd33d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed7f12c95c1fdbd8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rc-auto-transcribe/index.ts:166"}, "properties": {"repobilityId": "07495e9b355bac4b", "scanner": "scanner-primary", "fingerprint": "ed7f12c95c1fdbd8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-47c0f77b9326b2dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/validate-quote-token/index.ts:55"}, "properties": {"repobilityId": "0d5ebebab4e09c6c", "scanner": "scanner-primary", "fingerprint": "47c0f77b9326b2dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89f22476d4d3acc3", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/send-staff-message/index.ts:1"}, "properties": {"repobilityId": "a26f8f3bd2da60cd", "scanner": "scanner-primary", "fingerprint": "89f22476d4d3acc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e26a4469465cb448", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-staff-message/index.ts:405"}, "properties": {"repobilityId": "fc61950410ab002c", "scanner": "scanner-primary", "fingerprint": "e26a4469465cb448", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e5827926e6b4fd0", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/manage-staff-notes/index.ts:3"}, "properties": {"repobilityId": "7a4d5a4d785ce938", "scanner": "scanner-primary", "fingerprint": "0e5827926e6b4fd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6e910dce46b1c78", "level": "none", "message": {"text": "Commented-code block (13 lines) in supabase/functions/split-step/index.ts:6"}, "properties": {"repobilityId": "c7fad0998998115d", "scanner": "scanner-primary", "fingerprint": "a6e910dce46b1c78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdb519d407c0b91d", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/convert-submission-to-quote/index.ts:4"}, "properties": {"repobilityId": "bf67710b1ec98ab3", "scanner": "scanner-primary", "fingerprint": "bdb519d407c0b91d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9be8ed917121e3b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-close-job/index.ts:64"}, "properties": {"repobilityId": "ddc6c93877d01ff4", "scanner": "scanner-primary", "fingerprint": "9be8ed917121e3b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed3b59b78c303ad1", "level": "none", "message": {"text": "Commented-code block (13 lines) in supabase/functions/ocr-process-next/index.ts:1"}, "properties": {"repobilityId": "8276637cedc41ab1", "scanner": "scanner-primary", "fingerprint": "ed3b59b78c303ad1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-700f53287120a0f0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/ocr-process-next/index.ts:444"}, "properties": {"repobilityId": "9ff9a685ea8fd311", "scanner": "scanner-primary", "fingerprint": "700f53287120a0f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e68df1c485d4db24", "level": "none", "message": {"text": "Commented-code block (11 lines) in supabase/functions/expire-stale-offers/index.ts:8"}, "properties": {"repobilityId": "e02b9abba95d1377", "scanner": "scanner-primary", "fingerprint": "e68df1c485d4db24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f863aa4fb573054", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/kiosk-send-quote-email/index.ts:123"}, "properties": {"repobilityId": "b0610ecf68539e5e", "scanner": "scanner-primary", "fingerprint": "1f863aa4fb573054", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7775dd4c61d2a6a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/transcription-segment-edit/index.ts:1"}, "properties": {"repobilityId": "26504269106b73fb", "scanner": "scanner-primary", "fingerprint": "7775dd4c61d2a6a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d715493a2030cbd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/parse-cat-analysis/index.ts:4"}, "properties": {"repobilityId": "0ee5bfc247a88f07", "scanner": "scanner-primary", "fingerprint": "d715493a2030cbd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ecba3c34a64d53a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/parse-cat-analysis/index.ts:259"}, "properties": {"repobilityId": "c95d82fc0e2b49f0", "scanner": "scanner-primary", "fingerprint": "6ecba3c34a64d53a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-030755b97f9c8c1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/tr-review/index.ts:40"}, "properties": {"repobilityId": "6f07fee78d11d46f", "scanner": "scanner-primary", "fingerprint": "030755b97f9c8c1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6ed8af3340a00fa", "level": "note", "message": {"text": "Legacy-named symbol `backfill_v2` in supabase/functions/transcription-backfill-segments/index.ts:220"}, "properties": {"repobilityId": "0584db57891a94dd", "scanner": "scanner-primary", "fingerprint": "e6ed8af3340a00fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ad12b0f3c83d7256", "level": "none", "message": {"text": "Commented-code block (16 lines) in supabase/functions/vendor-request-documents/index.ts:9"}, "properties": {"repobilityId": "dd918e27e830a426", "scanner": "scanner-primary", "fingerprint": "ad12b0f3c83d7256", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc00e419475c2c5f", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/manage-order-workflow-steps/index.ts:1"}, "properties": {"repobilityId": "c5f635d2517c7e31", "scanner": "scanner-primary", "fingerprint": "fc00e419475c2c5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16dfbbbd0cd1a36b", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/ai-paystub-allocate/index.ts:4"}, "properties": {"repobilityId": "8f35c0716892ff9c", "scanner": "scanner-primary", "fingerprint": "16dfbbbd0cd1a36b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9adee3fde6065439", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/admin-respond-counter-offer/index.ts:1"}, "properties": {"repobilityId": "6e84af76fd6aad91", "scanner": "scanner-primary", "fingerprint": "9adee3fde6065439", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57d0678a89b4ddc9", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/create-deposit-payment-link/index.ts:1"}, "properties": {"repobilityId": "78a6e0e79f214610", "scanner": "scanner-primary", "fingerprint": "57d0678a89b4ddc9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e884f57c4981ceb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-deposit-payment-link/index.ts:297"}, "properties": {"repobilityId": "188eed01759f63c9", "scanner": "scanner-primary", "fingerprint": "1e884f57c4981ceb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a6e9f713eb2f14c", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/ai-allocate-payment/index.ts:1"}, "properties": {"repobilityId": "42b4ec7934de8d2a", "scanner": "scanner-primary", "fingerprint": "7a6e9f713eb2f14c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74ff7f177e2cc654", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/vendor-iso17100-assess/index.ts:1"}, "properties": {"repobilityId": "03cf4b54c446e18a", "scanner": "scanner-primary", "fingerprint": "74ff7f177e2cc654", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee7af4640ba4ed2a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vendor-iso17100-assess/index.ts:226"}, "properties": {"repobilityId": "7a859b528bcff1e4", "scanner": "scanner-primary", "fingerprint": "ee7af4640ba4ed2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e61482cd9c12d09c", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/process-inbound-email/index.ts:1"}, "properties": {"repobilityId": "d419be05dad843ea", "scanner": "scanner-primary", "fingerprint": "e61482cd9c12d09c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51d88cc740c5fd57", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/_shared/rush-pricing.ts:1"}, "properties": {"repobilityId": "7da2b5ef7d5712c1", "scanner": "scanner-primary", "fingerprint": "51d88cc740c5fd57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5697803b27db1614", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/kiosk-auth.ts:3"}, "properties": {"repobilityId": "118650e53f7333b2", "scanner": "scanner-primary", "fingerprint": "5697803b27db1614", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b80a38fd2f1acc2", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/notify-counter.ts:1"}, "properties": {"repobilityId": "6ad99fb72cf4ba27", "scanner": "scanner-primary", "fingerprint": "7b80a38fd2f1acc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b94d6342e2ecba4", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/ringcentral.ts:4"}, "properties": {"repobilityId": "0617c9ea5b8099cf", "scanner": "scanner-primary", "fingerprint": "7b94d6342e2ecba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67e763af293ff639", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/ringcentral.ts:89"}, "properties": {"repobilityId": "5d882569e3e45e0d", "scanner": "scanner-primary", "fingerprint": "67e763af293ff639", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-40bfd69038328246", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/word-to-pdf.ts:42"}, "properties": {"repobilityId": "2699160553eef8c9", "scanner": "scanner-primary", "fingerprint": "40bfd69038328246", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1486bc36de12ef60", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/notify-vendor-assignment.ts:1"}, "properties": {"repobilityId": "b3d92234cb86bdbd", "scanner": "scanner-primary", "fingerprint": "1486bc36de12ef60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67ae650d12428633", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/tr-claude.ts:76"}, "properties": {"repobilityId": "d4e1201203026e68", "scanner": "scanner-primary", "fingerprint": "67ae650d12428633", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-afee2391b9053d6d", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/multi-page-discount.ts:7"}, "properties": {"repobilityId": "f149c8c00ad0152d", "scanner": "scanner-primary", "fingerprint": "afee2391b9053d6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06c079814b0aeef4", "level": "none", "message": {"text": "Commented-code block (11 lines) in supabase/functions/_shared/notify-step-lifecycle.ts:1"}, "properties": {"repobilityId": "b4bb0ea36e864c0c", "scanner": "scanner-primary", "fingerprint": "06c079814b0aeef4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-905c529ed15a53a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/affidavit-docx.ts:4"}, "properties": {"repobilityId": "18c7c2055b9252a0", "scanner": "scanner-primary", "fingerprint": "905c529ed15a53a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bc2f8d0414528ce", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/email-subject.ts:19"}, "properties": {"repobilityId": "44b87dd228910460", "scanner": "scanner-primary", "fingerprint": "9bc2f8d0414528ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a34d4fb3ea216f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/google-auth.ts:69"}, "properties": {"repobilityId": "3daeb2c2cea321a7", "scanner": "scanner-primary", "fingerprint": "1a34d4fb3ea216f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54aef200508d7bf8", "level": "none", "message": {"text": "Commented-code block (12 lines) in supabase/functions/_shared/email-shell.ts:1"}, "properties": {"repobilityId": "8a8d5d085da30be2", "scanner": "scanner-primary", "fingerprint": "54aef200508d7bf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bad3e3feb134598", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/_shared/customer-quote.ts:3"}, "properties": {"repobilityId": "ec8b4da35d2a60f7", "scanner": "scanner-primary", "fingerprint": "4bad3e3feb134598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f8991c027af3e26", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/iso-recheck.ts:1"}, "properties": {"repobilityId": "653e50d3595ca30e", "scanner": "scanner-primary", "fingerprint": "4f8991c027af3e26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8c8b8c5a899b353", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/google-storage.ts:4"}, "properties": {"repobilityId": "65700304f09d0cad", "scanner": "scanner-primary", "fingerprint": "f8c8b8c5a899b353", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ff3035d75eef71e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/google-storage.ts:48"}, "properties": {"repobilityId": "1aca843ee605aaf5", "scanner": "scanner-primary", "fingerprint": "4ff3035d75eef71e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff653107d53dbbed", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/audio-extractor/index.js:3"}, "properties": {"repobilityId": "625501ff5cb8af75", "scanner": "scanner-primary", "fingerprint": "ff653107d53dbbed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f57efbc2bc78929c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/audio-extractor/index.js:137"}, "properties": {"repobilityId": "3175536ac9b35787", "scanner": "scanner-primary", "fingerprint": "f57efbc2bc78929c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f580fe35be20d1ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in video/src/fonts.ts:1"}, "properties": {"repobilityId": "18f49d5464578451", "scanner": "scanner-primary", "fingerprint": "f580fe35be20d1ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-030da566069872e9", "level": "note", "message": {"text": "15 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "0519c1c0e8c1f8e4", "scanner": "scanner-primary", "fingerprint": "030da566069872e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-8cf7c4f0073c433a", "level": "warning", "message": {"text": "Frontend route `/login/verify` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "08075940d511d79d", "scanner": "scanner-primary", "fingerprint": "8cf7c4f0073c433a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2bcc3a4b98db8594", "level": "warning", "message": {"text": "Frontend route `/success` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "1e20eef044ad1714", "scanner": "scanner-primary", "fingerprint": "2bcc3a4b98db8594", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-29ce03c14ad66cd5", "level": "warning", "message": {"text": "Frontend route `/quote/:quoteId/checkout` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "a9a684d274253884", "scanner": "scanner-primary", "fingerprint": "29ce03c14ad66cd5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2ef159696d1a67c6", "level": "warning", "message": {"text": "Frontend route `/quote/:quoteId/review` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "21883302064962dc", "scanner": "scanner-primary", "fingerprint": "2ef159696d1a67c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-985a8b529109fcae", "level": "warning", "message": {"text": "Frontend route `/quote/:quoteId/revision` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "20920a36bddc1fd0", "scanner": "scanner-primary", "fingerprint": "985a8b529109fcae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-19591ec9f97b7b3d", "level": "warning", "message": {"text": "Frontend route `/quote/confirmation` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "574d70b7385cac6c", "scanner": "scanner-primary", "fingerprint": "19591ec9f97b7b3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-be737aa51d43bbbc", "level": "warning", "message": {"text": "Frontend route `/quote/saved` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "d5533f9da083d5bf", "scanner": "scanner-primary", "fingerprint": "be737aa51d43bbbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-af705a82c025fd22", "level": "warning", "message": {"text": "Frontend route `/quote/:quoteId/continue` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "533c22a762f91c1c", "scanner": "scanner-primary", "fingerprint": "af705a82c025fd22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4eabbf8dcb13a76d", "level": "warning", "message": {"text": "Frontend route `/order/success` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "1d0902ff8b746ef7", "scanner": "scanner-primary", "fingerprint": "4eabbf8dcb13a76d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-53e42169e0dffee2", "level": "warning", "message": {"text": "Frontend route `/order/confirmation/:quoteId` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "b851012bef3b1fdd", "scanner": "scanner-primary", "fingerprint": "53e42169e0dffee2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-edb64d54044d35f7", "level": "warning", "message": {"text": "Frontend route `/payment/cancel` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "4c09b19f344e341a", "scanner": "scanner-primary", "fingerprint": "edb64d54044d35f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1497a043c19c782e", "level": "warning", "message": {"text": "Frontend route `/etransfer/confirm` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "c9f5e43d1510da98", "scanner": "scanner-primary", "fingerprint": "1497a043c19c782e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-eba85bdb7626773d", "level": "warning", "message": {"text": "Frontend route `/etransfer/success` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "3a038e3ff1324f28", "scanner": "scanner-primary", "fingerprint": "eba85bdb7626773d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6bcb41e46058b1e2", "level": "warning", "message": {"text": "Frontend route `/deposit-success` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "64618a22a0bb4733", "scanner": "scanner-primary", "fingerprint": "6bcb41e46058b1e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9e235bc0976af757", "level": "warning", "message": {"text": "Frontend route `/customer/invoices` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "1a50d6434d0e57ba", "scanner": "scanner-primary", "fingerprint": "9e235bc0976af757", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0c7246d8667da98e", "level": "warning", "message": {"text": "Frontend route `/upload/confirmation` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "b97015b11683d342", "scanner": "scanner-primary", "fingerprint": "0c7246d8667da98e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-80c317121f51aa4b", "level": "warning", "message": {"text": "Frontend route `/p/:code` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "81fca6b9bc209d54", "scanner": "scanner-primary", "fingerprint": "80c317121f51aa4b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f49add12a021f84d", "level": "warning", "message": {"text": "Frontend route `/tr/share/:token` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "3aae334295a37eee", "scanner": "scanner-primary", "fingerprint": "f49add12a021f84d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-151f8dceb50630a7", "level": "warning", "message": {"text": "Frontend route `/dashboard/quotes/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "3ec27db10f104cc6", "scanner": "scanner-primary", "fingerprint": "151f8dceb50630a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-81a55ca8794caf4f", "level": "warning", "message": {"text": "Frontend route `/dashboard/orders/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "cc8ce6ccf2e41e7f", "scanner": "scanner-primary", "fingerprint": "81a55ca8794caf4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-015f404febcabdb2", "level": "warning", "message": {"text": "Frontend route `/dashboard/upload` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "ce3359446b247eae", "scanner": "scanner-primary", "fingerprint": "015f404febcabdb2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ddb8833a980b0493", "level": "warning", "message": {"text": "Frontend route `/admin/reset-password` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "25f13f11c01ed50c", "scanner": "scanner-primary", "fingerprint": "ddb8833a980b0493", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-af5770299befad0d", "level": "warning", "message": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "f21d6cb4caa399d7", "scanner": "scanner-primary", "fingerprint": "af5770299befad0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2d40b8ebd2ce4274", "level": "warning", "message": {"text": "Frontend route `quotes` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "07deca7ad81c661e", "scanner": "scanner-primary", "fingerprint": "2d40b8ebd2ce4274", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0364b081e3105d15", "level": "warning", "message": {"text": "Frontend route `quotes/fast-create` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "022c9b5548ed58d1", "scanner": "scanner-primary", "fingerprint": "0364b081e3105d15", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-41bc705c5f194dc0", "level": "warning", "message": {"text": "Frontend route `quotes/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "1da9b8c001c598f6", "scanner": "scanner-primary", "fingerprint": "41bc705c5f194dc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-861121006c6f0e93", "level": "warning", "message": {"text": "Frontend route `messages` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "cb97f4451833eb24", "scanner": "scanner-primary", "fingerprint": "861121006c6f0e93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5b18267580468f5e", "level": "warning", "message": {"text": "Frontend route `calls` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "54d02614c4965851", "scanner": "scanner-primary", "fingerprint": "5b18267580468f5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2555b1180189d79b", "level": "warning", "message": {"text": "Frontend route `call-intelligence` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "6802f0c278c96eb5", "scanner": "scanner-primary", "fingerprint": "2555b1180189d79b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cd5a5a0ee770d583", "level": "warning", "message": {"text": "Frontend route `tasks` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "0b0b6ae47f86283f", "scanner": "scanner-primary", "fingerprint": "cd5a5a0ee770d583", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b06fd6440f35b2d3", "level": "warning", "message": {"text": "Frontend route `orders` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "c44797f0835dcf15", "scanner": "scanner-primary", "fingerprint": "b06fd6440f35b2d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d209b43f6a25c19a", "level": "warning", "message": {"text": "Frontend route `orders/new` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "8f2594d985eea2ce", "scanner": "scanner-primary", "fingerprint": "d209b43f6a25c19a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fece12edf7e84a9f", "level": "warning", "message": {"text": "Frontend route `orders/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "4da861137c16a690", "scanner": "scanner-primary", "fingerprint": "fece12edf7e84a9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f80034708ecca639", "level": "warning", "message": {"text": "Frontend route `projects` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "76f62c2e8234032a", "scanner": "scanner-primary", "fingerprint": "f80034708ecca639", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e43d72d325e6551f", "level": "warning", "message": {"text": "Frontend route `projects/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "971f65630489a62f", "scanner": "scanner-primary", "fingerprint": "e43d72d325e6551f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a1540eca99c54952", "level": "warning", "message": {"text": "Frontend route `tr/jobs` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "6dfe7716c15391dd", "scanner": "scanner-primary", "fingerprint": "a1540eca99c54952", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3383e673cc0b5a79", "level": "warning", "message": {"text": "Frontend route `tr/jobs/new` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "2ac143ed77498015", "scanner": "scanner-primary", "fingerprint": "3383e673cc0b5a79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c92680600020527c", "level": "warning", "message": {"text": "Frontend route `tr/jobs/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "a7bb1fc8c6c7fc59", "scanner": "scanner-primary", "fingerprint": "c92680600020527c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f04183e0de67926f", "level": "warning", "message": {"text": "Frontend route `partners` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "1d905c69454dce6d", "scanner": "scanner-primary", "fingerprint": "f04183e0de67926f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-03d599aec531e9ff", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "96f3516bbb508a59", "scanner": "scanner-primary", "fingerprint": "03d599aec531e9ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d4363be6d75653db", "level": "warning", "message": {"text": "Frontend route `settings/purge-quotes` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "3241dc9c47441eaf", "scanner": "scanner-primary", "fingerprint": "d4363be6d75653db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c07b1de095448a59", "level": "warning", "message": {"text": "Frontend route `settings/sms-templates` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "bee6768cbd8aed2a", "scanner": "scanner-primary", "fingerprint": "c07b1de095448a59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-304f59ec75734457", "level": "warning", "message": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "703c01a9b48277a3", "scanner": "scanner-primary", "fingerprint": "304f59ec75734457", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7190b38a47a940cf", "level": "warning", "message": {"text": "Frontend route `ai/analytics` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "242b66063d1d83d2", "scanner": "scanner-primary", "fingerprint": "7190b38a47a940cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-74265a4ee4e132e2", "level": "warning", "message": {"text": "Frontend route `patterns` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "a3c681abcf0240e4", "scanner": "scanner-primary", "fingerprint": "74265a4ee4e132e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0a38e427aae96e8d", "level": "warning", "message": {"text": "Frontend route `learning` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "542495d7e72167b4", "scanner": "scanner-primary", "fingerprint": "0a38e427aae96e8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ead786b35ea7b9fe", "level": "warning", "message": {"text": "Frontend route `thresholds` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "c52210706b278c85", "scanner": "scanner-primary", "fingerprint": "ead786b35ea7b9fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bce516053c6d777c", "level": "warning", "message": {"text": "Frontend route `ai/knowledge` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "38d7a5c79b9c94a1", "scanner": "scanner-primary", "fingerprint": "bce516053c6d777c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cc8509a076874075", "level": "warning", "message": {"text": "Frontend route `staff` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "a60a0ba85ca34f97", "scanner": "scanner-primary", "fingerprint": "cc8509a076874075", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-43395297989648b1", "level": "warning", "message": {"text": "Frontend route `kiosk-devices` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "1d3eef40ca3c3838", "scanner": "scanner-primary", "fingerprint": "43395297989648b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-203d0d6e1fff0bf4", "level": "warning", "message": {"text": "Frontend route `reports` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "0b27588ad2b52830", "scanner": "scanner-primary", "fingerprint": "203d0d6e1fff0bf4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a6715d20e64be26f", "level": "warning", "message": {"text": "Frontend route `ar` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "d58fcaae1d4435b2", "scanner": "scanner-primary", "fingerprint": "a6715d20e64be26f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5952b985d5d58971", "level": "warning", "message": {"text": "Frontend route `customers` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "6328464d90ab878b", "scanner": "scanner-primary", "fingerprint": "5952b985d5d58971", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-486752a2e1770fea", "level": "warning", "message": {"text": "Frontend route `customers/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "01d4baf02579c6b5", "scanner": "scanner-primary", "fingerprint": "486752a2e1770fea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5ce9a4205b0290ac", "level": "warning", "message": {"text": "Frontend route `ocr-word-count` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "23325abcfb8e1992", "scanner": "scanner-primary", "fingerprint": "5ce9a4205b0290ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-65f62a7a66c481ee", "level": "warning", "message": {"text": "Frontend route `ocr-word-count/:batchId` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "056cb29dbf2eb8ef", "scanner": "scanner-primary", "fingerprint": "65f62a7a66c481ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-54b63c3a5561a017", "level": "warning", "message": {"text": "Frontend route `preprocess-ocr` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "4bc2ca9852dc13e2", "scanner": "scanner-primary", "fingerprint": "54b63c3a5561a017", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-55d63810aa7f47eb", "level": "warning", "message": {"text": "Frontend route `pdf-to-word` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "578eeed128b94fa2", "scanner": "scanner-primary", "fingerprint": "55d63810aa7f47eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b4baa9b9b5c00f3b", "level": "warning", "message": {"text": "Frontend route `public-submissions` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "29bca046877b18bc", "scanner": "scanner-primary", "fingerprint": "b4baa9b9b5c00f3b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cb35b4cb25971489", "level": "warning", "message": {"text": "Frontend route `pdf-manager` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "0b7769ab8c6a1377", "scanner": "scanner-primary", "fingerprint": "cb35b4cb25971489", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d1fdac02f657d8f0", "level": "warning", "message": {"text": "Frontend route `vendors` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "8d1b87dd50f11e14", "scanner": "scanner-primary", "fingerprint": "d1fdac02f657d8f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-907f6e12f5a91838", "level": "warning", "message": {"text": "Frontend route `vendors/new` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "044ab3729a1cbc04", "scanner": "scanner-primary", "fingerprint": "907f6e12f5a91838", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9f9d03056ab0e673", "level": "warning", "message": {"text": "Frontend route `vendors/:vendorId` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "e6a76c4eb6b27acd", "scanner": "scanner-primary", "fingerprint": "9f9d03056ab0e673", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-28b73e2504a30927", "level": "warning", "message": {"text": "Frontend route `iso-quizzes` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "1a921d32d70d0184", "scanner": "scanner-primary", "fingerprint": "28b73e2504a30927", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-74eff8e254987c33", "level": "warning", "message": {"text": "Frontend route `sops` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "9fda03b1af81d902", "scanner": "scanner-primary", "fingerprint": "74eff8e254987c33", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-90acb594610687a0", "level": "warning", "message": {"text": "Frontend route `sops/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "9a4ccefaee5c7fef", "scanner": "scanner-primary", "fingerprint": "90acb594610687a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-734c2d3c9a2f285a", "level": "warning", "message": {"text": "Frontend route `qms/queue` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "be7758093d44164c", "scanner": "scanner-primary", "fingerprint": "734c2d3c9a2f285a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4d29b8171e77eba5", "level": "warning", "message": {"text": "Frontend route `qms/staff` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "eb584fa25c1c7110", "scanner": "scanner-primary", "fingerprint": "4d29b8171e77eba5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-46bbf52011f9c160", "level": "warning", "message": {"text": "Frontend route `recruitment` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "8b0a4250b8fb09ce", "scanner": "scanner-primary", "fingerprint": "46bbf52011f9c160", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4037e433ff631736", "level": "warning", "message": {"text": "Frontend route `recruitment/system/regrade-backfill` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "843c1a00bfb5fa66", "scanner": "scanner-primary", "fingerprint": "4037e433ff631736", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bb67e9fd4232652b", "level": "warning", "message": {"text": "Frontend route `recruitment/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "53f9bb27d29a840a", "scanner": "scanner-primary", "fingerprint": "bb67e9fd4232652b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4b118ab44eab9f1b", "level": "warning", "message": {"text": "Frontend route `trainings` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "3253d4ebd9c97cca", "scanner": "scanner-primary", "fingerprint": "4b118ab44eab9f1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-984eb5c78a94b5a3", "level": "warning", "message": {"text": "Frontend route `trainings/:slug` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "93ec78dd1809fc75", "scanner": "scanner-primary", "fingerprint": "984eb5c78a94b5a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-57dceea03c6aac23", "level": "warning", "message": {"text": "Frontend route `trainings/:slug/assign` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "4e2f670d28b48dce", "scanner": "scanner-primary", "fingerprint": "57dceea03c6aac23", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b74a80030d1f1072", "level": "warning", "message": {"text": "Frontend route `trainings/:slug/:lessonSlug` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "5c045a0e93a89b8f", "scanner": "scanner-primary", "fingerprint": "b74a80030d1f1072", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-daa6d645324092b3", "level": "warning", "message": {"text": "Frontend route `quick-payment` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "cd450c8fb830312b", "scanner": "scanner-primary", "fingerprint": "daa6d645324092b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5c42a295de3e3457", "level": "warning", "message": {"text": "Frontend route `quick-payment/history` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "0eb970caf5a67ba1", "scanner": "scanner-primary", "fingerprint": "5c42a295de3e3457", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ecb153fef219fa93", "level": "warning", "message": {"text": "Frontend route `payments` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "0ae86fd385abc24e", "scanner": "scanner-primary", "fingerprint": "ecb153fef219fa93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a1d44a84d1b180f8", "level": "warning", "message": {"text": "Frontend route `vendor-payments` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "cc58c97880aa67ef", "scanner": "scanner-primary", "fingerprint": "a1d44a84d1b180f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-32a38d4d75a92bbd", "level": "warning", "message": {"text": "Frontend route `ap` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "a8c598e3f48e4911", "scanner": "scanner-primary", "fingerprint": "32a38d4d75a92bbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d0bde9830d69a4aa", "level": "warning", "message": {"text": "Frontend route `payments/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "5386e82a804dd0bf", "scanner": "scanner-primary", "fingerprint": "d0bde9830d69a4aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-981d42a8778458d4", "level": "warning", "message": {"text": "Frontend route `exchange-rates` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "13ad747699b66ca8", "scanner": "scanner-primary", "fingerprint": "981d42a8778458d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-164893cd62661c61", "level": "warning", "message": {"text": "Frontend route `reports/aging` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "9d14406a8300be7e", "scanner": "scanner-primary", "fingerprint": "164893cd62661c61", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c9b449bbc3542038", "level": "warning", "message": {"text": "Frontend route `reports/tax` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "fd7143618958bbf1", "scanner": "scanner-primary", "fingerprint": "c9b449bbc3542038", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-283f91fa08208176", "level": "warning", "message": {"text": "Frontend route `invoices/vendor` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "a49a4160f20f8567", "scanner": "scanner-primary", "fingerprint": "283f91fa08208176", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-55dc26d44309db4b", "level": "warning", "message": {"text": "Frontend route `invoices/portal` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "f575b4f6bd88011b", "scanner": "scanner-primary", "fingerprint": "55dc26d44309db4b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-944dcaf39f990a9d", "level": "warning", "message": {"text": "Frontend route `invoices/customer` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "092f30c3d5e5d417", "scanner": "scanner-primary", "fingerprint": "944dcaf39f990a9d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-04a2ef98e4ac5d42", "level": "warning", "message": {"text": "Frontend route `invoices/create` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "ccbe22d4f755b692", "scanner": "scanner-primary", "fingerprint": "04a2ef98e4ac5d42", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4414e0a72d2d9a63", "level": "warning", "message": {"text": "Frontend route `invoices/customer/:invoiceId` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "f865d5a77b767228", "scanner": "scanner-primary", "fingerprint": "4414e0a72d2d9a63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-62c0586082455f8c", "level": "warning", "message": {"text": "Frontend route `transcription` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "f2be1d6250576cc3", "scanner": "scanner-primary", "fingerprint": "62c0586082455f8c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-38357e8c099e47cc", "level": "warning", "message": {"text": "Frontend route `transcription/:id` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "d61a96392198ac9c", "scanner": "scanner-primary", "fingerprint": "38357e8c099e47cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3f680c4e79ccc1b9", "level": "warning", "message": {"text": "Frontend route `transcription/vendors` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "fc59b708f9f13776", "scanner": "scanner-primary", "fingerprint": "3f680c4e79ccc1b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3ed602d66d41a1d6", "level": "warning", "message": {"text": "Frontend route `settings/transcription` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "2928aceca19eef9a", "scanner": "scanner-primary", "fingerprint": "3ed602d66d41a1d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-24a9b1654a8834ca", "level": "warning", "message": {"text": "Frontend route `settings/pricing` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "77ccec07b9e3ef2b", "scanner": "scanner-primary", "fingerprint": "24a9b1654a8834ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d358b7184163c764", "level": "warning", "message": {"text": "Frontend route `settings/negotiation-automation` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "6a1e5742d0e3e21e", "scanner": "scanner-primary", "fingerprint": "d358b7184163c764", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-06227ad17d60de98", "level": "warning", "message": {"text": "Frontend route `settings/complexity` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "5e7df625f605c532", "scanner": "scanner-primary", "fingerprint": "06227ad17d60de98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c5d9441512ccaed8", "level": "warning", "message": {"text": "Frontend route `settings/turnaround` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "16e2f2930e30ce58", "scanner": "scanner-primary", "fingerprint": "c5d9441512ccaed8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6561690dff8bb248", "level": "warning", "message": {"text": "Frontend route `settings/document-types` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "b2153bf03c42e54d", "scanner": "scanner-primary", "fingerprint": "6561690dff8bb248", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-91f384522726ae03", "level": "warning", "message": {"text": "Frontend route `settings/certifications` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "6621d4a1ffa47446", "scanner": "scanner-primary", "fingerprint": "91f384522726ae03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6c5df97db49c055f", "level": "warning", "message": {"text": "Frontend route `settings/delivery` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "fc12a6e4d0b3f92f", "scanner": "scanner-primary", "fingerprint": "6c5df97db49c055f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-be6167d33107b80d", "level": "warning", "message": {"text": "Frontend route `settings/tax` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "b119f725bc077dde", "scanner": "scanner-primary", "fingerprint": "be6167d33107b80d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b61355deacd229cf", "level": "warning", "message": {"text": "Frontend route `settings/hours` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "23de12a9f4fdbac0", "scanner": "scanner-primary", "fingerprint": "b61355deacd229cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7bbbb9e8428c5b83", "level": "warning", "message": {"text": "Frontend route `settings/holidays` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "4208dd08ce713a90", "scanner": "scanner-primary", "fingerprint": "7bbbb9e8428c5b83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ab1bcc7f93ede27f", "level": "warning", "message": {"text": "Frontend route `settings/ai-prompts` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "e9ee6470ee4b17f1", "scanner": "scanner-primary", "fingerprint": "ab1bcc7f93ede27f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2e08e2a2787834ed", "level": "warning", "message": {"text": "Frontend route `settings/ocr` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "74f0497642d6b183", "scanner": "scanner-primary", "fingerprint": "2e08e2a2787834ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-09a1b05d4575be39", "level": "warning", "message": {"text": "Frontend route `settings/intended-uses` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "6d9c633ea02c385a", "scanner": "scanner-primary", "fingerprint": "09a1b05d4575be39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5f5859a98f04466f", "level": "warning", "message": {"text": "Frontend route `settings/pickup-locations` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "27cd1fdd3c9c463a", "scanner": "scanner-primary", "fingerprint": "5f5859a98f04466f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2a0c6dc4364da71b", "level": "warning", "message": {"text": "Frontend route `settings/payment-methods` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "be73e082a266e7e5", "scanner": "scanner-primary", "fingerprint": "2a0c6dc4364da71b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1bea73f0fbd082fb", "level": "warning", "message": {"text": "Frontend route `settings/same-day` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "0741a66aa87aeffb", "scanner": "scanner-primary", "fingerprint": "1bea73f0fbd082fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-98c216793cd27577", "level": "warning", "message": {"text": "Frontend route `settings/language-tiers` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "b05ecc5a8803cfe0", "scanner": "scanner-primary", "fingerprint": "98c216793cd27577", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-81b334366493adbb", "level": "warning", "message": {"text": "Frontend route `settings/languages` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "a2f7c1c2178be817", "scanner": "scanner-primary", "fingerprint": "81b334366493adbb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d99f97e80b0c8e80", "level": "warning", "message": {"text": "Frontend route `settings/file-categories` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "13bb608debcd012b", "scanner": "scanner-primary", "fingerprint": "d99f97e80b0c8e80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-62083bdca9417e94", "level": "warning", "message": {"text": "Frontend route `settings/tracking` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "f47342871a772be5", "scanner": "scanner-primary", "fingerprint": "62083bdca9417e94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d491b2e406393bb6", "level": "warning", "message": {"text": "Frontend route `settings/services` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "cfa49c8fc6c9f340", "scanner": "scanner-primary", "fingerprint": "d491b2e406393bb6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-abeef1209f184019", "level": "warning", "message": {"text": "Frontend route `settings/workflows` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "4aa4bf0127e58652", "scanner": "scanner-primary", "fingerprint": "abeef1209f184019", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-729c4bb0a19dd422", "level": "warning", "message": {"text": "Frontend route `settings/branches` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "c1a9f5c8ae3a3918", "scanner": "scanner-primary", "fingerprint": "729c4bb0a19dd422", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6d666eb7a79239e3", "level": "warning", "message": {"text": "Frontend route `settings/dropbox` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "143f4fb8670c8332", "scanner": "scanner-primary", "fingerprint": "6d666eb7a79239e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7f3cd946bb7ffdb5", "level": "warning", "message": {"text": "Frontend route `settings/call-recording` has no Link/navigate to it \u2014 client/App.tsx"}, "properties": {"repobilityId": "e50234e3700dad1e", "scanner": "scanner-primary", "fingerprint": "7f3cd946bb7ffdb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-93f33082fca64dbe", "level": "error", "message": {"text": "Dangling fetch: GET https://ipapi.co/json/ (client/components/quote/Step4ReviewCheckout.tsx:1163)"}, "properties": {"repobilityId": "5fd4cdd87c470a29", "scanner": "scanner-primary", "fingerprint": "93f33082fca64dbe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-130067d961cd36f1", "level": "error", "message": {"text": "Dangling fetch: POST https://lmzoyezvsjgsxveoakdr.supabase.co/functions/v1/handle-stripe-invoice-payment (client/pages/customer/CustomerInvoicePayment.tsx:28)"}, "properties": {"repobilityId": "778305fd5f1878a0", "scanner": "scanner-primary", "fingerprint": "130067d961cd36f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2a669d5ea03d624", "level": "error", "message": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (client/pages/admin/ExchangeRates.tsx:119)"}, "properties": {"repobilityId": "67046338b30697a6", "scanner": "scanner-primary", "fingerprint": "f2a669d5ea03d624", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d1245163c70a9a1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-step-draft-to-customer/index.ts:181)"}, "properties": {"repobilityId": "bd510bbb3246ef4e", "scanner": "scanner-primary", "fingerprint": "8d1245163c70a9a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-368f7eaa11f0b100", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-final-deliverable/index.ts:362)"}, "properties": {"repobilityId": "4ba2b3c3bb5b9a74", "scanner": "scanner-primary", "fingerprint": "368f7eaa11f0b100", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9fa4c79ed96884d7", "level": "error", "message": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (supabase/functions/fetch-exchange-rates/index.ts:37)"}, "properties": {"repobilityId": "d9ff436763dc400d", "scanner": "scanner-primary", "fingerprint": "9fa4c79ed96884d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fff3ee7a84ca9c0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-payment-email/index.ts:235)"}, "properties": {"repobilityId": "ab87fc8e03567340", "scanner": "scanner-primary", "fingerprint": "7fff3ee7a84ca9c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d415a4cc246139f0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-proofread/index.ts:206)"}, "properties": {"repobilityId": "27957e80c7a2adc4", "scanner": "scanner-primary", "fingerprint": "d415a4cc246139f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b54ff92945fa1b31", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/cancel-order/index.ts:395)"}, "properties": {"repobilityId": "ab762f92cf841014", "scanner": "scanner-primary", "fingerprint": "b54ff92945fa1b31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75d068da952e9e97", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/oauth2/token (supabase/functions/dropbox-oauth/index.ts:67)"}, "properties": {"repobilityId": "bf17e2c9e015b62e", "scanner": "scanner-primary", "fingerprint": "75d068da952e9e97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6731a6dd765827e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/users/get_current_account (supabase/functions/dropbox-oauth/index.ts:100)"}, "properties": {"repobilityId": "79bd4ce8054b0960", "scanner": "scanner-primary", "fingerprint": "d6731a6dd765827e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60d935379c9b2b99", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/auth/token/revoke (supabase/functions/dropbox-oauth/index.ts:187)"}, "properties": {"repobilityId": "e25e79005a20a1ac", "scanner": "scanner-primary", "fingerprint": "60d935379c9b2b99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-763c4b18da17e306", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/tr-vendor-share-create/index.ts:141)"}, "properties": {"repobilityId": "9105d6517af38213", "scanner": "scanner-primary", "fingerprint": "763c4b18da17e306", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-722eb9b981c8961d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/vendor-negotiate-counter/index.ts:481)"}, "properties": {"repobilityId": "282936a351c91727", "scanner": "scanner-primary", "fingerprint": "722eb9b981c8961d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b88ad0920fe932f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/oauth2/token (supabase/functions/dropbox-files/index.ts:83)"}, "properties": {"repobilityId": "85f5d85e1ae75202", "scanner": "scanner-primary", "fingerprint": "9b88ad0920fe932f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3007beeb47ee1d77", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/create_folder_v2 (supabase/functions/dropbox-files/index.ts:117)"}, "properties": {"repobilityId": "b326c09c46743505", "scanner": "scanner-primary", "fingerprint": "3007beeb47ee1d77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c79465fd422007e3", "level": "error", "message": {"text": "Dangling fetch: POST https://content.dropboxapi.com/2/files/upload (supabase/functions/dropbox-files/index.ts:145)"}, "properties": {"repobilityId": "cdb56d0b7e7152e6", "scanner": "scanner-primary", "fingerprint": "c79465fd422007e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38011bba47a831ef", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/list_folder (supabase/functions/dropbox-files/index.ts:171)"}, "properties": {"repobilityId": "5c17e02d854943c0", "scanner": "scanner-primary", "fingerprint": "38011bba47a831ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a54cf6b5839a39d6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings (supabase/functions/dropbox-files/index.ts:202)"}, "properties": {"repobilityId": "d75fc24d387bb00b", "scanner": "scanner-primary", "fingerprint": "a54cf6b5839a39d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c1faf9859927553", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/list_shared_links (supabase/functions/dropbox-files/index.ts:221)"}, "properties": {"repobilityId": "ba2e9c44df4081ce", "scanner": "scanner-primary", "fingerprint": "5c1faf9859927553", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2d39556c0cfdb6a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/get_metadata (supabase/functions/dropbox-files/index.ts:249)"}, "properties": {"repobilityId": "afd23926500c82f2", "scanner": "scanner-primary", "fingerprint": "d2d39556c0cfdb6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f40404661d56e17", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-check/index.ts:60)"}, "properties": {"repobilityId": "7c097334a4054e86", "scanner": "scanner-primary", "fingerprint": "4f40404661d56e17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15814da770fb956d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/rc-call-recording/index.ts:168)"}, "properties": {"repobilityId": "0e9164da44947a57", "scanner": "scanner-primary", "fingerprint": "15814da770fb956d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-febf16ef26505ac2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-call-recording/index.ts:221)"}, "properties": {"repobilityId": "4c0794fbda8d7a82", "scanner": "scanner-primary", "fingerprint": "febf16ef26505ac2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6b0a04c4d3e8949", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/cal-integrations/index.ts:244)"}, "properties": {"repobilityId": "b3411c76e50320a5", "scanner": "scanner-primary", "fingerprint": "c6b0a04c4d3e8949", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-152356a37aded057", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-customer-order-confirmed/index.ts:315)"}, "properties": {"repobilityId": "e8988a435e1d5785", "scanner": "scanner-primary", "fingerprint": "152356a37aded057", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22a18665b134d00e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-vendor-instructions-changed/index.ts:150)"}, "properties": {"repobilityId": "90d395291f283e9a", "scanner": "scanner-primary", "fingerprint": "22a18665b134d00e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8def41daac81d401", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-activation-emails/index.ts:183)"}, "properties": {"repobilityId": "0ba1ffeb2b659d06", "scanner": "scanner-primary", "fingerprint": "8def41daac81d401", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2ef83bab834910b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-activation-emails/index.ts:315)"}, "properties": {"repobilityId": "86397f8e61669bb6", "scanner": "scanner-primary", "fingerprint": "c2ef83bab834910b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78a46d1d313b799c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-customer-message/index.ts:480)"}, "properties": {"repobilityId": "0683c445879e028d", "scanner": "scanner-primary", "fingerprint": "78a46d1d313b799c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12f3a81b0db91f2a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/payment_links (supabase/functions/generate-quote-pdf/index.ts:386)"}, "properties": {"repobilityId": "0bb2667a6b74f2a3", "scanner": "scanner-primary", "fingerprint": "12f3a81b0db91f2a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e6746947cb81c89", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/secure-upload-otp-send/index.ts:237)"}, "properties": {"repobilityId": "cdd19316a94dc47e", "scanner": "scanner-primary", "fingerprint": "9e6746947cb81c89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51502e03b85c476a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-compare/index.ts:157)"}, "properties": {"repobilityId": "5fd168c573de70ac", "scanner": "scanner-primary", "fingerprint": "51502e03b85c476a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-946f212842739cd4", "level": "error", "message": {"text": "Dangling fetch: POST https://api.stripe.com/v1/checkout/sessions (supabase/functions/transcription-upload/index.ts:315)"}, "properties": {"repobilityId": "c2646b34cfe553ca", "scanner": "scanner-primary", "fingerprint": "946f212842739cd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43dde4ad041c192d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-ai-translate/index.ts:129)"}, "properties": {"repobilityId": "e743ee1ee6de645d", "scanner": "scanner-primary", "fingerprint": "43dde4ad041c192d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cb62881819f6115", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/analyse-ocr-next/index.ts:233)"}, "properties": {"repobilityId": "265b32af6c9ac406", "scanner": "scanner-primary", "fingerprint": "1cb62881819f6115", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c49c3de03a296c9", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/analyse-ocr-next/index.ts:532)"}, "properties": {"repobilityId": "58aa59cea3520787", "scanner": "scanner-primary", "fingerprint": "3c49c3de03a296c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41d05b17db666e85", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-acceptance-reminders/index.ts:221)"}, "properties": {"repobilityId": "cb4d40f562dfac2a", "scanner": "scanner-primary", "fingerprint": "41d05b17db666e85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bf60464efea679c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-invoice-email/index.ts:349)"}, "properties": {"repobilityId": "cadd593786ab3e4e", "scanner": "scanner-primary", "fingerprint": "3bf60464efea679c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35313c4b57400941", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-email/index.ts:64)"}, "properties": {"repobilityId": "33a7fab09495a6fb", "scanner": "scanner-primary", "fingerprint": "35313c4b57400941", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd36d446e1054adb", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/cvp-suggest-vendor-rate/index.ts:187)"}, "properties": {"repobilityId": "720b5bc7f6cffecb", "scanner": "scanner-primary", "fingerprint": "fd36d446e1054adb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-841b10004784c611", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-doc-request-reminder/index.ts:297)"}, "properties": {"repobilityId": "2c7a68ec9eeb45c0", "scanner": "scanner-primary", "fingerprint": "841b10004784c611", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b668c3c77c333419", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/analyse-ocr-batch/index.ts:623)"}, "properties": {"repobilityId": "75464b7b81e1b609", "scanner": "scanner-primary", "fingerprint": "b668c3c77c333419", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-307f263f3724ba4d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/stripe-webhook/index.ts:64)"}, "properties": {"repobilityId": "24c9f412c256aa5b", "scanner": "scanner-primary", "fingerprint": "307f263f3724ba4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11da7f5e2914943d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-auth-otp-send/index.ts:220)"}, "properties": {"repobilityId": "3975ab1129cc8fcc", "scanner": "scanner-primary", "fingerprint": "11da7f5e2914943d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d349fed9f594387d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-auth-otp-send/index.ts:306)"}, "properties": {"repobilityId": "63f3bb5b8d0941c6", "scanner": "scanner-primary", "fingerprint": "d349fed9f594387d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc864f73eb715fca", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/qms-auto-qualify/index.ts:107)"}, "properties": {"repobilityId": "b3d6b55bff89ba70", "scanner": "scanner-primary", "fingerprint": "fc864f73eb715fca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eca09764bb04bc30", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1034)"}, "properties": {"repobilityId": "a19348ed2392dd59", "scanner": "scanner-primary", "fingerprint": "eca09764bb04bc30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0554dc20b775719", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1096)"}, "properties": {"repobilityId": "ee76f537351f1994", "scanner": "scanner-primary", "fingerprint": "f0554dc20b775719", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02386beb4b65ff85", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1160)"}, "properties": {"repobilityId": "64d2964d7a0a5901", "scanner": "scanner-primary", "fingerprint": "02386beb4b65ff85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a869783e892c2560", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/review-draft-file/index.ts:1266)"}, "properties": {"repobilityId": "16881ba8c363fbe9", "scanner": "scanner-primary", "fingerprint": "a869783e892c2560", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd12df65aef1278d", "level": "error", "message": {"text": "Dangling fetch: GET https://us.sentry.io/api/0/projects/${SENTRY_ORG}/${project}/issues/?query=is:unresolved&sort=date&limit=25 (supabase/functions/check-open-issues/index.ts:54)"}, "properties": {"repobilityId": "273f00aaf0ed61ef", "scanner": "scanner-primary", "fingerprint": "fd12df65aef1278d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d61a7d70d52607f3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/upload-complete/index.ts:549)"}, "properties": {"repobilityId": "9894e2fcc28dbef2", "scanner": "scanner-primary", "fingerprint": "d61a7d70d52607f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7477c5210e6f6c2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.assemblyai.com/v2/transcript (supabase/functions/transcription-process/index.ts:956)"}, "properties": {"repobilityId": "8f99ad22c9387dd7", "scanner": "scanner-primary", "fingerprint": "b7477c5210e6f6c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96baebe7f46ffad1", "level": "error", "message": {"text": "Dangling fetch: GET https://api.assemblyai.com/v2/transcript/${transcriptId} (supabase/functions/transcription-process/index.ts:980)"}, "properties": {"repobilityId": "ac69cab647bf7ba0", "scanner": "scanner-primary", "fingerprint": "96baebe7f46ffad1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5242e1c5c7b0c8ef", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (supabase/functions/transcription-process/index.ts:1041)"}, "properties": {"repobilityId": "6d3587ee8af432f2", "scanner": "scanner-primary", "fingerprint": "5242e1c5c7b0c8ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-387936bda374d1de", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/transcription-process/index.ts:1105)"}, "properties": {"repobilityId": "8173e351a45edc7d", "scanner": "scanner-primary", "fingerprint": "387936bda374d1de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e6e39f5d3e298cf", "level": "error", "message": {"text": "Dangling fetch: POST https://api.deepgram.com/v1/listen?${params.toString()} (supabase/functions/transcription-process/index.ts:1161)"}, "properties": {"repobilityId": "43af3e6411273deb", "scanner": "scanner-primary", "fingerprint": "2e6e39f5d3e298cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71a97209c250e974", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-process/index.ts:1728)"}, "properties": {"repobilityId": "16b1ef76f8c5740f", "scanner": "scanner-primary", "fingerprint": "71a97209c250e974", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b24b5553220b0dec", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/transcription-process/index.ts:1811)"}, "properties": {"repobilityId": "8ea35923308bae15", "scanner": "scanner-primary", "fingerprint": "b24b5553220b0dec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c019db9d263eefe", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-customer-quote-ack/index.ts:276)"}, "properties": {"repobilityId": "29ec0a4c38535499", "scanner": "scanner-primary", "fingerprint": "1c019db9d263eefe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abddd1d9c7e81833", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-deadline-reminders/index.ts:192)"}, "properties": {"repobilityId": "cbdad33cfc397964", "scanner": "scanner-primary", "fingerprint": "abddd1d9c7e81833", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43eb54734298a1e6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-cv-nda-reminder/index.ts:228)"}, "properties": {"repobilityId": "6d27a00de18926fc", "scanner": "scanner-primary", "fingerprint": "43eb54734298a1e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2732ca3f97cf9e32", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-send-cv-nda-reminder/index.ts:410)"}, "properties": {"repobilityId": "0726178ef0fc4b72", "scanner": "scanner-primary", "fingerprint": "2732ca3f97cf9e32", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c884b750a1cf3053", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-deposit-reminder/index.ts:238)"}, "properties": {"repobilityId": "c22d2bd22d873e79", "scanner": "scanner-primary", "fingerprint": "c884b750a1cf3053", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-633724f4b036c7cc", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-call-intelligence-report/index.ts:221)"}, "properties": {"repobilityId": "9498c37e0f3dcf66", "scanner": "scanner-primary", "fingerprint": "633724f4b036c7cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cde24150772a024b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/rc-call-intelligence-report/index.ts:287)"}, "properties": {"repobilityId": "1bc5ae0481da7e77", "scanner": "scanner-primary", "fingerprint": "cde24150772a024b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c10c4dd9bb207561", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/generate-order-instructions/index.ts:283)"}, "properties": {"repobilityId": "895171569737f232", "scanner": "scanner-primary", "fingerprint": "c10c4dd9bb207561", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-382cac78ba8b7a2e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/generate-order-instructions/index.ts:314)"}, "properties": {"repobilityId": "ed82336f72f88657", "scanner": "scanner-primary", "fingerprint": "382cac78ba8b7a2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80d96c76cbb1ba83", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/staff-submit-bug-report/index.ts:140)"}, "properties": {"repobilityId": "7991b8bb6a96dd85", "scanner": "scanner-primary", "fingerprint": "80d96c76cbb1ba83", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dae0011359181e8e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/qms-request-documents-bulk/index.ts:97)"}, "properties": {"repobilityId": "f531c7eb127ca873", "scanner": "scanner-primary", "fingerprint": "dae0011359181e8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29b3eedb65986409", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/negotiation-hitl-reminder/index.ts:174)"}, "properties": {"repobilityId": "4b22786c339219da", "scanner": "scanner-primary", "fingerprint": "29b3eedb65986409", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7e5e03f58c8b7f3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/notify-staff-new-lead/index.ts:292)"}, "properties": {"repobilityId": "e349d636313ed6d0", "scanner": "scanner-primary", "fingerprint": "d7e5e03f58c8b7f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fbcf5ecd7bf5a42", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-customer-login-otp/index.ts:212)"}, "properties": {"repobilityId": "7f3d8900df04bb67", "scanner": "scanner-primary", "fingerprint": "1fbcf5ecd7bf5a42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af54bde987b65317", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-quote-link-email/index.ts:403)"}, "properties": {"repobilityId": "81b62fc7179d18d1", "scanner": "scanner-primary", "fingerprint": "af54bde987b65317", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ffa2feb6d1f319c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/customer-approve-quote-ar/index.ts:55)"}, "properties": {"repobilityId": "522f2964bf217842", "scanner": "scanner-primary", "fingerprint": "6ffa2feb6d1f319c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbfb40ff691b6a62", "level": "error", "message": {"text": "Dangling fetch: POST https://content.dropboxapi.com/2/files/upload (supabase/functions/dropbox-sync/index.ts:225)"}, "properties": {"repobilityId": "b3a47967eb5901c2", "scanner": "scanner-primary", "fingerprint": "cbfb40ff691b6a62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be3e3de9d9148ca7", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings (supabase/functions/dropbox-sync/index.ts:345)"}, "properties": {"repobilityId": "fddfcb5df962f25e", "scanner": "scanner-primary", "fingerprint": "be3e3de9d9148ca7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8efa537ceeaa4bc3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/sharing/list_shared_links (supabase/functions/dropbox-sync/index.ts:368)"}, "properties": {"repobilityId": "1c42be363aed3e93", "scanner": "scanner-primary", "fingerprint": "8efa537ceeaa4bc3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c82c1e1347972e77", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/2/files/create_folder_v2 (supabase/functions/dropbox-sync/index.ts:615)"}, "properties": {"repobilityId": "bbd3ab49cb627ec3", "scanner": "scanner-primary", "fingerprint": "c82c1e1347972e77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-963933d27b7fafd3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.dropboxapi.com/oauth2/token (supabase/functions/dropbox-sync/index.ts:759)"}, "properties": {"repobilityId": "9b8be4deeab5d0cc", "scanner": "scanner-primary", "fingerprint": "963933d27b7fafd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2748c7e3601ceb0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/speech-to-text (supabase/functions/rc-auto-transcribe/index.ts:184)"}, "properties": {"repobilityId": "82b3a44083c96e3f", "scanner": "scanner-primary", "fingerprint": "a2748c7e3601ceb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42914ce4f7f78162", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/rc-auto-transcribe/index.ts:219)"}, "properties": {"repobilityId": "cfe7ec3e8bb15a48", "scanner": "scanner-primary", "fingerprint": "42914ce4f7f78162", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce9039837b57b0b6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/send-staff-message/index.ts:405)"}, "properties": {"repobilityId": "71391f4dd5bd7ac9", "scanner": "scanner-primary", "fingerprint": "ce9039837b57b0b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f12709eca525308", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/ocr-process-next/index.ts:444)"}, "properties": {"repobilityId": "28378cd6ce92369a", "scanner": "scanner-primary", "fingerprint": "0f12709eca525308", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f975ef01a829874", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/ocr-process-next/index.ts:546)"}, "properties": {"repobilityId": "aa404bd9799a3c90", "scanner": "scanner-primary", "fingerprint": "7f975ef01a829874", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e811ed599b23e74d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/kiosk-send-quote-email/index.ts:123)"}, "properties": {"repobilityId": "6ed65a79b407be54", "scanner": "scanner-primary", "fingerprint": "e811ed599b23e74d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1367fea6ed719147", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/parse-cat-analysis/index.ts:259)"}, "properties": {"repobilityId": "3ee6a2b874393f3b", "scanner": "scanner-primary", "fingerprint": "1367fea6ed719147", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74972bfe67f32e8f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/vendor-request-documents/index.ts:291)"}, "properties": {"repobilityId": "03cfd3f9f366e591", "scanner": "scanner-primary", "fingerprint": "74972bfe67f32e8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-455b1436b898cd3b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/create-deposit-payment-link/index.ts:297)"}, "properties": {"repobilityId": "e15e94a215e215db", "scanner": "scanner-primary", "fingerprint": "455b1436b898cd3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-777be23c01973247", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (supabase/functions/vendor-iso17100-assess/index.ts:226)"}, "properties": {"repobilityId": "f3a71d2d16a05818", "scanner": "scanner-primary", "fingerprint": "777be23c01973247", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9059fd6b32534d4b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-staff-assignment.ts:170)"}, "properties": {"repobilityId": "6d6e06d0ab3464e7", "scanner": "scanner-primary", "fingerprint": "9059fd6b32534d4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-54e9e13718f6ae8d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-counter.ts:102)"}, "properties": {"repobilityId": "f3b302d8216cf51f", "scanner": "scanner-primary", "fingerprint": "54e9e13718f6ae8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37a87a6b62998fe3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-vendor-assignment.ts:335)"}, "properties": {"repobilityId": "bc203330b4318625", "scanner": "scanner-primary", "fingerprint": "37a87a6b62998fe3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3107288b8fce8791", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-vendor-assignment.ts:587)"}, "properties": {"repobilityId": "d3aab8aaebad65a0", "scanner": "scanner-primary", "fingerprint": "3107288b8fce8791", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a9f3524ac99adeb", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/notify-step-lifecycle.ts:165)"}, "properties": {"repobilityId": "949253029c0c61a9", "scanner": "scanner-primary", "fingerprint": "3a9f3524ac99adeb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94e958793d6d9baf", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/_shared/google-auth.ts:69)"}, "properties": {"repobilityId": "8f6fb65c8f0f3e1b", "scanner": "scanner-primary", "fingerprint": "94e958793d6d9baf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47a5aa94f081140b", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (supabase/functions/_shared/google-auth.ts:166)"}, "properties": {"repobilityId": "001ba32a76a416bd", "scanner": "scanner-primary", "fingerprint": "47a5aa94f081140b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-670849995b517221", "level": "error", "message": {"text": "Dangling fetch: POST https://api.brevo.com/v3/smtp/email (supabase/functions/_shared/transcription.ts:185)"}, "properties": {"repobilityId": "12e9949d98899cbd", "scanner": "scanner-primary", "fingerprint": "670849995b517221", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-430bc25028626fd6", "level": "error", "message": {"text": "Dangling fetch: POST https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(name)} (supabase/functions/_shared/google-storage.ts:48)"}, "properties": {"repobilityId": "56f4d4cf45ab28f8", "scanner": "scanner-primary", "fingerprint": "430bc25028626fd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ad31ca02edfad72", "level": "error", "message": {"text": "Dangling fetch: DELETE https://storage.googleapis.com/storage/v1/b/${encodeURIComponent(bucket)}/o/${encodeURIComponent(objectName)} (supabase/functions/_shared/google-storage.ts:114)"}, "properties": {"repobilityId": "e789421b6f363b5e", "scanner": "scanner-primary", "fingerprint": "4ad31ca02edfad72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af4de720f651079e", "level": "note", "message": {"text": "Unused endpoint: POST /extract"}, "properties": {"repobilityId": "d082ebbc6388b02d", "scanner": "scanner-primary", "fingerprint": "af4de720f651079e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-684f0e83ba7e1558", "level": "note", "message": {"text": "Unused endpoint: GET "}, "properties": {"repobilityId": "6782850d59160a4f", "scanner": "scanner-primary", "fingerprint": "684f0e83ba7e1558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3c93b82c283e36ca", "level": "note", "message": {"text": "Unused endpoint: GET /api/ping"}, "properties": {"repobilityId": "c89e46769f0f5351", "scanner": "scanner-primary", "fingerprint": "3c93b82c283e36ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aa64b09a918e9a24", "level": "note", "message": {"text": "Unused endpoint: GET /api/demo"}, "properties": {"repobilityId": "fd387d64600b96f4", "scanner": "scanner-primary", "fingerprint": "aa64b09a918e9a24", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}