{"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-4286bff33037a22c", "name": "Stray `console.log` in TS/JS \u2014 scripts/preview-email.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-email.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df86b77942634005", "name": "Stray `console.log` in TS/JS \u2014 scripts/preview-day-sheet-pdf.ts:205", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-day-sheet-pdf.ts:205"}, "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-824db01765bd4921", "name": "Stray `console.log` in TS/JS \u2014 scripts/resolve-guide-slots.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resolve-guide-slots.ts:96"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0fdea3b49a181a2d", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-supabase.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-supabase.js:43"}, "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-54665220f47a8472", "name": "Stray `console.log` in TS/JS \u2014 scripts/preview-set-list-pdf.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-set-list-pdf.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72c8a21e161fce77", "name": "Stray `console.log` in TS/JS \u2014 scripts/enrich-venues.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-venues.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-752e254403f77f75", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/slack-oauth-callback/index.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/slack-oauth-callback/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-9f3d093c8057ed6c", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-auth-email/index.ts:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-auth-email/index.ts:184"}, "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-8b9aa50ffeacb11d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/InboundAddressRow.tsx:50", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/InboundAddressRow.tsx:50"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4d9fd9a49000c35", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/GuestListEditor.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/GuestListEditor.tsx:332"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84418257ceab9348", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/InboundCreateReviewDialog.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/InboundCreateReviewDialog.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a57ae4baf74bded", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/EmailBandDialog.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/EmailBandDialog.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c5702e503b12421", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PasteSetListDialog.tsx:287", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PasteSetListDialog.tsx:287"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a0c16ca1ca13437", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/FeaturedShowCard.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FeaturedShowCard.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e2d1473a751d719", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/VenuePicker.tsx:417", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/VenuePicker.tsx:417"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-095a50d7431c060b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SetListEditor.tsx:297", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SetListEditor.tsx:297"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a8828c6164fac51", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ArtistSwitcher.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ArtistSwitcher.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0eeb839e79e6dbbf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ContactsEditor.tsx:277", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ContactsEditor.tsx:277"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fd65b9732bfc231", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ImportPreviewCard.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ImportPreviewCard.tsx:113"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30d18c596f1e715e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ImportSetListDialog.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ImportSetListDialog.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf211a9e0b20e9ad", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowAttachments.tsx:205", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowAttachments.tsx:205"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1abe5d65c68f321", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/TourMapView.tsx:280", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TourMapView.tsx:280"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-257e47e5f5fac892", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AddressAutocomplete.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AddressAutocomplete.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d10ab8ab43aac3dc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/TourPicker.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TourPicker.tsx:176"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb062e9eebae3a35", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PendingEmailsModal.tsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PendingEmailsModal.tsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e11860e6b013ad43", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/BulkUploadDialog.tsx:712", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/BulkUploadDialog.tsx:712"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e1a3494d8179460", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowsScopeSwitcher.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowsScopeSwitcher.tsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f994e18c934acd7f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowCard.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowCard.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-b209c77e83b119fd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70"}, "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-9ca787141688360f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/tour-map/MobileTourMapLayout.tsx:334", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tour-map/MobileTourMapLayout.tsx:334"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-baa1ff249232ce74", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/DayOfShow/ScheduleList.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DayOfShow/ScheduleList.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2aae52afea89b517", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/DayOfShow/PhasePreLoadIn.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DayOfShow/PhasePreLoadIn.tsx:92"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfb5a2f24c3ce901", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/guest/DaysheetGuestView.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guest/DaysheetGuestView.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a5de2bc504390ce", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/components/guest/DaysheetGuestView.tsx:9", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/components/guest/DaysheetGuestView.tsx:92"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8078867dd5fabf67", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/parseAdvanceDiff.ts:312", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/parseAdvanceDiff.ts:312"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ddd79c74037a76f9", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/scheduleTimeline.ts:38", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/scheduleTimeline.ts:38"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31158fa99167e51e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/InvitePage.tsx:855", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/InvitePage.tsx:855"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c119e14df34eb1c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TourFinancialsPage.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TourFinancialsPage.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd73d873358a9cae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DashboardPage.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DashboardPage.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-546a980973aa54d3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ShowDetailPage.tsx:1530", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ShowDetailPage.tsx:1530"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0062b354d621da9b", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/pages/ShowDetailPage.tsx:2002", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/pages/ShowDetailPage.tsx:2002"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcffe3589b1b504d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/IntegrationsTab.tsx:574", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/IntegrationsTab.tsx:574"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67c12d9000c12427", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/SongsTab.tsx:346", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/SongsTab.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-a4499758fe38fb2e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/DocumentsTab.tsx:361", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/DocumentsTab.tsx:361"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46fab5d6b7c85412", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/GeneralTab.tsx:304", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/GeneralTab.tsx:304"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-883bb7026bb3eb84", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/TeamTab.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/TeamTab.tsx:255"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3323a01d5c467982", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/TouringPartyTab.tsx:313", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/TouringPartyTab.tsx:313"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa33af2df669b357", "name": "Insecure pattern 'direct_innerhtml_assignment' in index.html:65", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:65"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1a3af674eb73e1f", "name": "Possible secret in scripts/preview-email.ts", "shortDescription": {"text": "Possible secret in scripts/preview-email.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f5befcab847e69a8", "name": "Possible secret in scripts/preview-day-sheet-pdf.ts", "shortDescription": {"text": "Possible secret in scripts/preview-day-sheet-pdf.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5e786b286088af8e", "name": "Possible secret in scripts/guide-slots.config.ts", "shortDescription": {"text": "Possible secret in scripts/guide-slots.config.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-449a3ca3d0775f61", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/run-onboarding-emails/index.ts:32", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/run-onboarding-emails/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-8c569fee563a7c90", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/lookup-venue-address/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/lookup-venue-address/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-56dbdef712b33125", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/list-my-team-invites/index.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-my-team-invites/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-60ec54af592d329a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-hubspot/index.ts:261", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-hubspot/index.ts:261"}, "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-7b32eec33a2e7f1a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/guest-calendar-feed/index.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/guest-calendar-feed/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-977d85d28cf9ba3e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-advance/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-advance/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-fd06bc0f5a071196", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/slack-oauth-initiate/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/slack-oauth-initiate/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-629ff91c698d6e99", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/guest-attachment-url/index.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/guest-attachment-url/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-540b4383f38ca0f0", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-team-invite-email/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-team-invite-email/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-ad48d187a4fc966a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/run-scheduled-slack-pushes/index.ts:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/run-scheduled-slack-pushes/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-980598a93f30eee2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-guest-list/index.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-guest-list/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-50622a8875ed6bfc", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-account/index.ts:40", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-account/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-acd395424e33492c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/autocomplete-place/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/autocomplete-place/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-744f5d01f9b49814", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/accept-team-invite/index.ts:32", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/accept-team-invite/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-828d25f322831f12", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/run-scheduled-email-pushes/index.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/run-scheduled-email-pushes/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-133fd79db881e890", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/push-slack-daysheet/index.ts:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/push-slack-daysheet/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-911fe1a1869cbcd3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/log-activation/index.ts:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/log-activation/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-66fffcd85a33f6e2", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/decline-team-invite/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/decline-team-invite/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-e29b41c5ad79b2dc", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-billing/index.ts:30", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-billing/index.ts:30"}, "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-712a78372874bef7", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/inbound-email/index.ts:28", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/inbound-email/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-f752325f55ce57bb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-daysheet-email/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-daysheet-email/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-759453f48e9dfc2a", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/calculate-drive-time/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/calculate-drive-time/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-cdd0409a272d27be", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-daily-stats/index.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-daily-stats/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-d1640507754e0d8d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/resolve-team-invite/index.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/resolve-team-invite/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-fb0a605dfeadea73", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/resolve-timezone/index.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/resolve-timezone/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-e4f27a6a20a725b8", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-set-list/index.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-set-list/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-4ba9ce268bf8b774", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-auth-email/index.ts:21", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-auth-email/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-93d0283845aa2c2d", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70"}, "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-d10e207cf74073c2", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/tour-map/TourMapMarkers.tsx:223", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/tour-map/TourMapMarkers.tsx:223"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f83654741987470", "name": "Possible secret in src/lib/parseAdvanceDiff.ts", "shortDescription": {"text": "Possible secret in src/lib/parseAdvanceDiff.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3b47ecb59115b400", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e4eeed53b0b9b73", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f33513c2e15e281", "name": "Very large file: src/pages/ShowDetailPage.tsx (3256 lines)", "shortDescription": {"text": "Very large file: src/pages/ShowDetailPage.tsx (3256 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "76 tests / 328 src (ratio 0.23)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 31 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 173 placeholder/mock markers across 57 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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. 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-f42e78e32c58910f", "name": "Agent authority lacks a verifier contract: .claude/skills/pr/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/pr/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c23f93c3d4984ff0", "name": "Commented-code block (8 lines) in vite.config.ts:63", "shortDescription": {"text": "Commented-code block (8 lines) in vite.config.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cb23f45dff57b8b", "name": "Commented-code block (7 lines) in tests/mobile-dialog-bottom-sheet.spec.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in tests/mobile-dialog-bottom-sheet.spec.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-0f0493d534d1b9bf", "name": "Commented-code block (5 lines) in tests/calendar-feed.spec.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in tests/calendar-feed.spec.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-1871cd9bd7229dcc", "name": "Commented-code block (8 lines) in tests/schedule-entry-time-picker.spec.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in tests/schedule-entry-time-picker.spec.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-3fdc13d03144f135", "name": "Commented-code block (10 lines) in tests/schedule-time-picker.spec.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in tests/schedule-time-picker.spec.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-f2ef0c6656afef62", "name": "Commented-code block (9 lines) in tests/departure-time-picker.spec.ts:7", "shortDescription": {"text": "Commented-code block (9 lines) in tests/departure-time-picker.spec.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-c629388682bb4fd4", "name": "Commented-code block (6 lines) in tests/show-edit-inline.spec.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in tests/show-edit-inline.spec.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-f539ca0270d628b0", "name": "Commented-code block (5 lines) in tests/settings-tabs.spec.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in tests/settings-tabs.spec.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-5e457c09794f96e8", "name": "Commented-code block (7 lines) in tests/show-edit-unify.spec.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in tests/show-edit-unify.spec.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-34f347fde41d0e24", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/og-image.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/og-image.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e58e8084e64fda27", "name": "Commented-code block (5 lines) in scripts/preview-email.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/preview-email.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-cafe42c2940b4f57", "name": "Commented-code block (9 lines) in scripts/resolve-guide-slots.ts:219", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/resolve-guide-slots.ts:219"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cdcad580806b2a6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-supabase.js:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-supabase.js:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a1e242ed7bb74520", "name": "Commented-code block (9 lines) in supabase/functions/run-onboarding-emails/index.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/run-onboarding-emails/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-6aa8e5f235b81bd5", "name": "Commented-code block (6 lines) in supabase/functions/run-onboarding-emails/select.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/run-onboarding-emails/select.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-52c39b66db31fc37", "name": "Commented-code block (5 lines) in supabase/functions/lookup-venue-address/index.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/lookup-venue-address/index.ts:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bee6f7ccc7421db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/lookup-venue-address/index.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/lookup-venue-address/index.ts:94"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9bacaa023b755582", "name": "Commented-code block (6 lines) in supabase/functions/list-my-team-invites/index.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/list-my-team-invites/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-3c80cd93d99384c2", "name": "Commented-code block (6 lines) in supabase/functions/sync-hubspot/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/sync-hubspot/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-8d09631e89d71044", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-hubspot/index.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-hubspot/index.ts:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cad528c55cc726c9", "name": "Commented-code block (6 lines) in supabase/functions/guest-calendar-feed/index.ts:51", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/guest-calendar-feed/index.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67f8f9e8cb6a3166", "name": "Commented-code block (5 lines) in supabase/functions/guest-calendar-feed/buildIcs.ts:68", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/guest-calendar-feed/buildIcs.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47e9a53b3a3d3b42", "name": "Commented-code block (8 lines) in supabase/functions/slack-oauth-initiate/index.ts:54", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/slack-oauth-initiate/index.ts:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09d80da6fce5ea47", "name": "Commented-code block (5 lines) in supabase/functions/send-team-invite-email/index.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-team-invite-email/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-48aefe519c5b04f0", "name": "Commented-code block (5 lines) in supabase/functions/run-scheduled-slack-pushes/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/run-scheduled-slack-pushes/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-911ed0014555940e", "name": "Commented-code block (10 lines) in supabase/functions/delete-account/index.ts:11", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/delete-account/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-2bd3d861241cecb5", "name": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/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-1d743163559e3f79", "name": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/mapping.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/mapping.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-0e406019d6e3cd67", "name": "Commented-code block (6 lines) in supabase/functions/autocomplete-place/index.ts:84", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/autocomplete-place/index.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28f75b5af184f665", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/autocomplete-place/index.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/autocomplete-place/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-0fe3b56f70ea5541", "name": "Commented-code block (6 lines) in supabase/functions/accept-team-invite/index.ts:15", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/accept-team-invite/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-06cf01d03c577d4f", "name": "Commented-code block (5 lines) in supabase/functions/run-scheduled-email-pushes/index.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/run-scheduled-email-pushes/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-26300ead4c6a21eb", "name": "Commented-code block (5 lines) in supabase/functions/push-slack-daysheet/index.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/push-slack-daysheet/index.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44592d696b13519e", "name": "Commented-code block (6 lines) in supabase/functions/log-activation/index.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/log-activation/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-f331e8889ec6de66", "name": "Commented-code block (5 lines) in supabase/functions/decline-team-invite/index.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/decline-team-invite/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-58aab5de19120ed9", "name": "Commented-code block (5 lines) in supabase/functions/stripe-billing/index.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-billing/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-343ae5f973ba6a51", "name": "Commented-code block (5 lines) in supabase/functions/inbound-email/adapters.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/inbound-email/adapters.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-69d2b82e81df8d13", "name": "Commented-code block (5 lines) in supabase/functions/inbound-email/index.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/inbound-email/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-2b4860fd5c24b42f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/inbound-email/index.ts:741", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/inbound-email/index.ts:741"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-684232ba4273656e", "name": "Commented-code block (8 lines) in supabase/functions/send-daysheet-email/index.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/send-daysheet-email/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-f4b542e493f44606", "name": "Commented-code block (5 lines) in supabase/functions/calculate-drive-time/index.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/calculate-drive-time/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-288dbd4f84502a0e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/calculate-drive-time/index.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/calculate-drive-time/index.ts:93"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f15daf35d04cc553", "name": "Commented-code block (5 lines) in supabase/functions/get-daily-stats/index.ts:102", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/get-daily-stats/index.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e3eb2928d7ceaf7", "name": "Commented-code block (9 lines) in supabase/functions/unsubscribe-onboarding/index.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/unsubscribe-onboarding/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-b1be2f9cb6faaa83", "name": "Commented-code block (5 lines) in supabase/functions/resolve-team-invite/index.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/resolve-team-invite/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-ae07acebc465a613", "name": "Commented-code block (12 lines) in supabase/functions/send-sample-advance/template.ts:5", "shortDescription": {"text": "Commented-code block (12 lines) in supabase/functions/send-sample-advance/template.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-1ffe1c5c6fd3b06a", "name": "Commented-code block (6 lines) in supabase/functions/send-sample-advance/index.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/send-sample-advance/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-bb09ca1aa24d7116", "name": "Commented-code block (5 lines) in supabase/functions/send-auth-email/index.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-auth-email/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-b559eaf09c94518e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/timezone.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/timezone.ts:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5834ec8f6c456198", "name": "Commented-code block (5 lines) in supabase/functions/_shared/internal-accounts.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/internal-accounts.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-0051aa270d7dc981", "name": "Commented-code block (6 lines) in supabase/functions/_shared/svix.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/svix.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-d2cf3da67f4b6a7f", "name": "Commented-code block (6 lines) in supabase/functions/_shared/resend.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/resend.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-29a9423eed4857e6", "name": "Commented-code block (6 lines) in src/main.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/main.tsx: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-208039cee9d4830b", "name": "Commented-code block (5 lines) in src/components/TeamProvider.tsx:373", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/TeamProvider.tsx:373"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab5921260598fb9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/TeamProvider.tsx:437", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/TeamProvider.tsx: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-2c0a46f0e88c705e", "name": "Commented-code block (7 lines) in src/components/CreateShowDialog.tsx:265", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/CreateShowDialog.tsx:265"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52d99700fb60b03d", "name": "Commented-code block (7 lines) in src/components/PasteGuestListDialog.tsx:178", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/PasteGuestListDialog.tsx:178"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28a8cff39dd033cf", "name": "Commented-code block (8 lines) in src/components/ScheduleEditor.tsx:43", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/ScheduleEditor.tsx:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-966af3fac3831730", "name": "Commented-code block (6 lines) in src/components/EmailBandDialog.tsx:95", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/EmailBandDialog.tsx:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bfbe351091ede7d", "name": "Commented-code block (5 lines) in src/components/VenuePicker.tsx:175", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/VenuePicker.tsx:175"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-565502d286aba142", "name": "Commented-code block (7 lines) in src/components/ParseAdvanceForShowDialog.tsx:234", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/ParseAdvanceForShowDialog.tsx:234"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-390bfcea79c06223", "name": "Commented-code block (5 lines) in src/components/PendingEmailsProvider.tsx:140", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/PendingEmailsProvider.tsx:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23a0648cae35ff59", "name": "Commented-code block (10 lines) in src/components/FieldGroup.tsx:45", "shortDescription": {"text": "Commented-code block (10 lines) in src/components/FieldGroup.tsx:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f7a5c8fec1c2264", "name": "Commented-code block (5 lines) in src/components/ArtistSwitcher.tsx:114", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ArtistSwitcher.tsx:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b7591da8c6bd6f2", "name": "Commented-code block (6 lines) in src/components/ContactsEditor.tsx:238", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ContactsEditor.tsx:238"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19557a9f5ff5cc04", "name": "Commented-code block (5 lines) in src/components/SetListEditorAuth.tsx:130", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/SetListEditorAuth.tsx:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ff94665b8b6c29d", "name": "Commented-code block (5 lines) in src/components/NewArtistDialog.tsx:32", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/NewArtistDialog.tsx:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02a036527659dc22", "name": "Commented-code block (5 lines) in src/components/EmailSentInterstitial.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/EmailSentInterstitial.tsx: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-bb69c85252ff341c", "name": "Commented-code block (6 lines) in src/components/ShowAttachments.tsx:112", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ShowAttachments.tsx:112"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4f40a3af0b6e899", "name": "Commented-code block (11 lines) in src/components/TourMapView.tsx:38", "shortDescription": {"text": "Commented-code block (11 lines) in src/components/TourMapView.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f4fd389bfe46c35", "name": "Commented-code block (6 lines) in src/components/ThemeColorMeta.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ThemeColorMeta.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-a7dc503b2a7839b3", "name": "Commented-code block (6 lines) in src/components/ScheduleTimeline.tsx:49", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ScheduleTimeline.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41100e67865e22b4", "name": "Commented-code block (5 lines) in src/components/UpgradeDialog.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/UpgradeDialog.tsx: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-f9f308eb9bb6314f", "name": "Commented-code block (5 lines) in src/components/TimeInput.tsx:404", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/TimeInput.tsx:404"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c316a8d460329d8", "name": "Commented-code block (5 lines) in src/components/BulkUploadDialog.tsx:532", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/BulkUploadDialog.tsx:532"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18d2edd20e4e565e", "name": "Commented-code block (6 lines) in src/components/AuthProvider.tsx:19", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/AuthProvider.tsx: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-2cdc4e5c432a35b6", "name": "Commented-code block (5 lines) in src/components/ui/dialog.tsx:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ui/dialog.tsx: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-77e46f774e05fab4", "name": "Commented-code block (5 lines) in src/components/tour-map/TourMapMarkers.tsx:93", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/tour-map/TourMapMarkers.tsx:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-194fa7a5686c62af", "name": "Commented-code block (5 lines) in src/components/tour-map/tourStopVariant.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/tour-map/tourStopVariant.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-1d13cc06c722671a", "name": "Commented-code block (7 lines) in src/components/tour-map/MapCanvas.tsx:161", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/tour-map/MapCanvas.tsx:161"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d274c1c22997d4a2", "name": "Commented-code block (5 lines) in src/components/tour-map/MobileTourMapLayout.tsx:72", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/tour-map/MobileTourMapLayout.tsx:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1488f5ab696d6d67", "name": "Commented-code block (5 lines) in src/components/DayOfShow/DayOfShowMode.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/DayOfShow/DayOfShowMode.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b84b798a0f5180e", "name": "Commented-code block (7 lines) in src/components/DayOfShow/DayOfShowFloatingButton.tsx:44", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/DayOfShow/DayOfShowFloatingButton.tsx:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-168b62f4a26173e8", "name": "Commented-code block (6 lines) in src/lib/setListShuffle.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/setListShuffle.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-09284d5057ba2523", "name": "Commented-code block (6 lines) in src/lib/daySheetPdf.ts:60", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/daySheetPdf.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-496dca3f429481e7", "name": "Commented-code block (7 lines) in src/lib/billing.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/billing.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-44f093c3810de59f", "name": "Commented-code block (5 lines) in src/lib/saveParsedShow.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/saveParsedShow.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a351a415ad5ac0b", "name": "Commented-code block (5 lines) in src/lib/nativeAuth.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/nativeAuth.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-956f34cd77b364d3", "name": "Commented-code block (6 lines) in src/lib/authSession.ts:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/authSession.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-e39bca0433c0a93c", "name": "Commented-code block (7 lines) in src/lib/routeRestoration.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/routeRestoration.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-4f713c10461b2d6f", "name": "Commented-code block (5 lines) in src/lib/sharePdf.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/sharePdf.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-6bd669e9823ec7b3", "name": "Commented-code block (5 lines) in src/lib/dealMath.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/dealMath.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-3f116b0c06ccfd9e", "name": "Commented-code block (8 lines) in src/lib/nativeFiles.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/nativeFiles.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-9126e1e72ae6e779", "name": "Commented-code block (16 lines) in src/lib/bulkUpload.ts:4", "shortDescription": {"text": "Commented-code block (16 lines) in src/lib/bulkUpload.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-d2dcd846fff22371", "name": "Commented-code block (5 lines) in src/lib/buildIcsCalendar.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/buildIcsCalendar.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-5ed0a764fde239c2", "name": "Commented-code block (5 lines) in src/lib/activationEvents.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/activationEvents.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-7a66d824c040bdbd", "name": "Commented-code block (8 lines) in src/lib/setListPdf.ts:81", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/setListPdf.ts:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b5118605e99f822", "name": "Commented-code block (6 lines) in src/lib/contactRoles.ts:65", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/contactRoles.ts:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9429a86beabce155", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pdfFonts.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pdfFonts.ts:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3c73b59853f05d2", "name": "Commented-code block (7 lines) in src/lib/activeTeam.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/activeTeam.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-01e26a21a6039d54", "name": "Commented-code block (5 lines) in src/pages/InvitePage.tsx:248", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/InvitePage.tsx:248"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05b2ff7c7d937a05", "name": "Commented-code block (5 lines) in src/pages/TourFinancialsPage.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/TourFinancialsPage.tsx: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-0fde9a6fdb6f317a", "name": "Commented-code block (5 lines) in src/pages/DashboardPage.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/DashboardPage.tsx:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-690f98ced11c595b", "name": "Commented-code block (5 lines) in src/pages/ResetPasswordPage.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/ResetPasswordPage.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-f55f43af96bff672", "name": "Commented-code block (6 lines) in src/pages/ShowDetailPage.tsx:150", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/ShowDetailPage.tsx:150"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b5dc932d3ec4803", "name": "Commented-code block (5 lines) in src/pages/settings/BillingTab.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/settings/BillingTab.tsx: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-3cda86d28acab805", "name": "Commented-code block (8 lines) in src/pages/settings/IntegrationsTab.tsx:232", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/settings/IntegrationsTab.tsx:232"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d2a8c5b59b1742e", "name": "Commented-code block (6 lines) in src/pages/settings/SongsTab.tsx:161", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/settings/SongsTab.tsx:161"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa551b05d4a5f760", "name": "Commented-code block (7 lines) in src/pages/settings/GeneralTab.tsx:38", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/settings/GeneralTab.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e59dd077848912b", "name": "Commented-code block (5 lines) in src/pages/settings/TeamTab.tsx:138", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/settings/TeamTab.tsx:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17f4eccefbb714cf", "name": "Commented-code block (6 lines) in src/pages/show-detail/useInlineEditor.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/show-detail/useInlineEditor.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21d44f5a07f418f2", "name": "Commented-code block (5 lines) in src/hooks/useDaySheetExport.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useDaySheetExport.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c9c63434f581167", "name": "Commented-code block (5 lines) in src/hooks/use-mobile.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/use-mobile.tsx: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-2d8117f7db6e8fa2", "name": "Commented-code block (6 lines) in src/hooks/useDayOfShowPhase.ts:50", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useDayOfShowPhase.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-8215150102117cfc", "name": "Commented-code block (5 lines) in src/hooks/useGuestLink.ts:48", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useGuestLink.ts:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-980ddad07c97625d", "name": "Commented-code block (7 lines) in src/hooks/useCapacitorDeepLinks.ts:90", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useCapacitorDeepLinks.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75cfe0da157c95cf", "name": "Commented-code block (6 lines) in src/hooks/useTourGeocoding.ts:53", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useTourGeocoding.ts:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b334d875f2339fa1", "name": "5 env vars used in code but missing from .env.example", "shortDescription": {"text": "5 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `ENRICH_EMAIL`, `ENRICH_PASSWORD`, `MARKETING_REPO_PATH`, `VERCEL_URL`. 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-9bed496ad2a8633d", "name": "Frontend route `/shows/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/shows/:id` has no Link/navigate to it \u2014 src/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-46efeed32975cc79", "name": "Frontend route `/tours` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/tours` has no Link/navigate to it \u2014 src/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-b3800e2b035c828b", "name": "Frontend route `/tours/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/tours/:id` has no Link/navigate to it \u2014 src/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-811c18745b79eaff", "name": "Frontend route `/tours/:id/financials` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/tours/:id/financials` has no Link/navigate to it \u2014 src/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-2d26bc0dd2b8e7af", "name": "Frontend route `/guest/:token` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/guest/:token` has no Link/navigate to it \u2014 src/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-70506d14ae643b2c", "name": "Frontend route `/invite/:token` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/invite/:token` has no Link/navigate to it \u2014 src/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-7064cd9925eeb9c6", "name": "Frontend route `/*` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 src/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}}]}}, "automationDetails": {"id": "repobility/17796"}, "properties": {"repository": "ramielabidin/show-advance-pro", "repoUrl": "https://github.com/ramielabidin/show-advance-pro", "branch": "main"}, "results": [{"ruleId": "scanner-4286bff33037a22c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-email.ts:78"}, "properties": {"repobilityId": "a60e30c16f8f7604", "scanner": "scanner-primary", "fingerprint": "4286bff33037a22c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df86b77942634005", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-day-sheet-pdf.ts:205"}, "properties": {"repobilityId": "c0fb9d81b450df3f", "scanner": "scanner-primary", "fingerprint": "df86b77942634005", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-824db01765bd4921", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resolve-guide-slots.ts:96"}, "properties": {"repobilityId": "cdf06f842391177d", "scanner": "scanner-primary", "fingerprint": "824db01765bd4921", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0fdea3b49a181a2d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-supabase.js:43"}, "properties": {"repobilityId": "1e549c59b90dc443", "scanner": "scanner-primary", "fingerprint": "0fdea3b49a181a2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-54665220f47a8472", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/preview-set-list-pdf.ts:78"}, "properties": {"repobilityId": "503c0fbaf4fa6a01", "scanner": "scanner-primary", "fingerprint": "54665220f47a8472", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72c8a21e161fce77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-venues.ts:65"}, "properties": {"repobilityId": "c5ea5c478fe8c0c6", "scanner": "scanner-primary", "fingerprint": "72c8a21e161fce77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-752e254403f77f75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/slack-oauth-callback/index.ts:59"}, "properties": {"repobilityId": "98e806574c92b41d", "scanner": "scanner-primary", "fingerprint": "752e254403f77f75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f3d093c8057ed6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/send-auth-email/index.ts:184"}, "properties": {"repobilityId": "7dca5fc25cab8e1e", "scanner": "scanner-primary", "fingerprint": "9f3d093c8057ed6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b9aa50ffeacb11d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/InboundAddressRow.tsx:50"}, "properties": {"repobilityId": "9d30aa3f629f424e", "scanner": "scanner-primary", "fingerprint": "8b9aa50ffeacb11d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4d9fd9a49000c35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/GuestListEditor.tsx:332"}, "properties": {"repobilityId": "bdbeb3fa17ab614c", "scanner": "scanner-primary", "fingerprint": "b4d9fd9a49000c35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84418257ceab9348", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/InboundCreateReviewDialog.tsx:147"}, "properties": {"repobilityId": "9efc73a8e40ab80c", "scanner": "scanner-primary", "fingerprint": "84418257ceab9348", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a57ae4baf74bded", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/EmailBandDialog.tsx:262"}, "properties": {"repobilityId": "5478d245d6ff3257", "scanner": "scanner-primary", "fingerprint": "0a57ae4baf74bded", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c5702e503b12421", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PasteSetListDialog.tsx:287"}, "properties": {"repobilityId": "a3ee1f64e2add11e", "scanner": "scanner-primary", "fingerprint": "0c5702e503b12421", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a0c16ca1ca13437", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FeaturedShowCard.tsx:61"}, "properties": {"repobilityId": "67833aa1ba4a5b1b", "scanner": "scanner-primary", "fingerprint": "5a0c16ca1ca13437", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e2d1473a751d719", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/VenuePicker.tsx:417"}, "properties": {"repobilityId": "5d82060903b617cb", "scanner": "scanner-primary", "fingerprint": "7e2d1473a751d719", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-095a50d7431c060b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SetListEditor.tsx:297"}, "properties": {"repobilityId": "1d0676c1bf104840", "scanner": "scanner-primary", "fingerprint": "095a50d7431c060b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a8828c6164fac51", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ArtistSwitcher.tsx:81"}, "properties": {"repobilityId": "39676ea420a5af24", "scanner": "scanner-primary", "fingerprint": "7a8828c6164fac51", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0eeb839e79e6dbbf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ContactsEditor.tsx:277"}, "properties": {"repobilityId": "1e2ab5a5ccb183ac", "scanner": "scanner-primary", "fingerprint": "0eeb839e79e6dbbf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9fd65b9732bfc231", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ImportPreviewCard.tsx:113"}, "properties": {"repobilityId": "07068d6af3b62ba2", "scanner": "scanner-primary", "fingerprint": "9fd65b9732bfc231", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30d18c596f1e715e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ImportSetListDialog.tsx:147"}, "properties": {"repobilityId": "2016af4d79fec5f9", "scanner": "scanner-primary", "fingerprint": "30d18c596f1e715e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf211a9e0b20e9ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowAttachments.tsx:205"}, "properties": {"repobilityId": "dba4e10d33390e8e", "scanner": "scanner-primary", "fingerprint": "bf211a9e0b20e9ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e1abe5d65c68f321", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TourMapView.tsx:280"}, "properties": {"repobilityId": "9f0335bf7019f500", "scanner": "scanner-primary", "fingerprint": "e1abe5d65c68f321", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-257e47e5f5fac892", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AddressAutocomplete.tsx:166"}, "properties": {"repobilityId": "de6b33c197fa2762", "scanner": "scanner-primary", "fingerprint": "257e47e5f5fac892", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d10ab8ab43aac3dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TourPicker.tsx:176"}, "properties": {"repobilityId": "6ba15020721c6bf2", "scanner": "scanner-primary", "fingerprint": "d10ab8ab43aac3dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb062e9eebae3a35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PendingEmailsModal.tsx:132"}, "properties": {"repobilityId": "b3bae2434f9caf6b", "scanner": "scanner-primary", "fingerprint": "fb062e9eebae3a35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e11860e6b013ad43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/BulkUploadDialog.tsx:712"}, "properties": {"repobilityId": "59968011fe79dbf1", "scanner": "scanner-primary", "fingerprint": "e11860e6b013ad43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3e1a3494d8179460", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowsScopeSwitcher.tsx:183"}, "properties": {"repobilityId": "e460afc882195b3f", "scanner": "scanner-primary", "fingerprint": "3e1a3494d8179460", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f994e18c934acd7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ShowCard.tsx:59"}, "properties": {"repobilityId": "80610a4db34be161", "scanner": "scanner-primary", "fingerprint": "f994e18c934acd7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b209c77e83b119fd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70"}, "properties": {"repobilityId": "b8c68f17a4018107", "scanner": "scanner-primary", "fingerprint": "b209c77e83b119fd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9ca787141688360f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tour-map/MobileTourMapLayout.tsx:334"}, "properties": {"repobilityId": "04a2298cb9d42d96", "scanner": "scanner-primary", "fingerprint": "9ca787141688360f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-baa1ff249232ce74", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DayOfShow/ScheduleList.tsx:75"}, "properties": {"repobilityId": "960f5ce6f18b9ced", "scanner": "scanner-primary", "fingerprint": "baa1ff249232ce74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2aae52afea89b517", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DayOfShow/PhasePreLoadIn.tsx:92"}, "properties": {"repobilityId": "3fe73437cdef26a9", "scanner": "scanner-primary", "fingerprint": "2aae52afea89b517", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cfb5a2f24c3ce901", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guest/DaysheetGuestView.tsx:61"}, "properties": {"repobilityId": "5b0572b90ae5df22", "scanner": "scanner-primary", "fingerprint": "cfb5a2f24c3ce901", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a5de2bc504390ce", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/components/guest/DaysheetGuestView.tsx:92"}, "properties": {"repobilityId": "5be77fcfa7eab995", "scanner": "scanner-primary", "fingerprint": "2a5de2bc504390ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-8078867dd5fabf67", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/parseAdvanceDiff.ts:312"}, "properties": {"repobilityId": "f35161f808da77e3", "scanner": "scanner-primary", "fingerprint": "8078867dd5fabf67", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-ddd79c74037a76f9", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/lib/scheduleTimeline.ts:38"}, "properties": {"repobilityId": "b13109e38b2c33c7", "scanner": "scanner-primary", "fingerprint": "ddd79c74037a76f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-31158fa99167e51e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/InvitePage.tsx:855"}, "properties": {"repobilityId": "f063aff9695845fc", "scanner": "scanner-primary", "fingerprint": "31158fa99167e51e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c119e14df34eb1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TourFinancialsPage.tsx:80"}, "properties": {"repobilityId": "d5a37995f1e6e2d6", "scanner": "scanner-primary", "fingerprint": "4c119e14df34eb1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd73d873358a9cae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DashboardPage.tsx:179"}, "properties": {"repobilityId": "5248edf1e73ab3b6", "scanner": "scanner-primary", "fingerprint": "bd73d873358a9cae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-546a980973aa54d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ShowDetailPage.tsx:1530"}, "properties": {"repobilityId": "8d20a1e01431eee6", "scanner": "scanner-primary", "fingerprint": "546a980973aa54d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0062b354d621da9b", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/pages/ShowDetailPage.tsx:2002"}, "properties": {"repobilityId": "1d7ffba960284562", "scanner": "scanner-primary", "fingerprint": "0062b354d621da9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-fcffe3589b1b504d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/IntegrationsTab.tsx:574"}, "properties": {"repobilityId": "b2fd4b4c46eca575", "scanner": "scanner-primary", "fingerprint": "fcffe3589b1b504d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67c12d9000c12427", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/SongsTab.tsx:346"}, "properties": {"repobilityId": "272a359671c35731", "scanner": "scanner-primary", "fingerprint": "67c12d9000c12427", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4499758fe38fb2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/DocumentsTab.tsx:361"}, "properties": {"repobilityId": "10f2d3c719af6559", "scanner": "scanner-primary", "fingerprint": "a4499758fe38fb2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46fab5d6b7c85412", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/GeneralTab.tsx:304"}, "properties": {"repobilityId": "225b8113b3366fe9", "scanner": "scanner-primary", "fingerprint": "46fab5d6b7c85412", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-883bb7026bb3eb84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/TeamTab.tsx:255"}, "properties": {"repobilityId": "1a5d453d9ca85dac", "scanner": "scanner-primary", "fingerprint": "883bb7026bb3eb84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3323a01d5c467982", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/settings/TouringPartyTab.tsx:313"}, "properties": {"repobilityId": "053cbdac86a26db9", "scanner": "scanner-primary", "fingerprint": "3323a01d5c467982", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa33af2df669b357", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:65"}, "properties": {"repobilityId": "f91708437a3a5445", "scanner": "scanner-primary", "fingerprint": "fa33af2df669b357", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index.html"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-f1a3af674eb73e1f", "level": "error", "message": {"text": "Possible secret in scripts/preview-email.ts"}, "properties": {"repobilityId": "21bcff24cb95128b", "scanner": "scanner-primary", "fingerprint": "f1a3af674eb73e1f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/preview-email.ts"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-f5befcab847e69a8", "level": "error", "message": {"text": "Possible secret in scripts/preview-day-sheet-pdf.ts"}, "properties": {"repobilityId": "5d329c27edac37af", "scanner": "scanner-primary", "fingerprint": "f5befcab847e69a8", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/preview-day-sheet-pdf.ts"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-f5befcab847e69a8", "level": "error", "message": {"text": "Possible secret in scripts/preview-day-sheet-pdf.ts"}, "properties": {"repobilityId": "5d329c27edac37af", "scanner": "scanner-primary", "fingerprint": "f5befcab847e69a8", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/preview-day-sheet-pdf.ts"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-5e786b286088af8e", "level": "error", "message": {"text": "Possible secret in scripts/guide-slots.config.ts"}, "properties": {"repobilityId": "fba70b5ac463b096", "scanner": "scanner-primary", "fingerprint": "5e786b286088af8e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/guide-slots.config.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-5e786b286088af8e", "level": "error", "message": {"text": "Possible secret in scripts/guide-slots.config.ts"}, "properties": {"repobilityId": "fba70b5ac463b096", "scanner": "scanner-primary", "fingerprint": "5e786b286088af8e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/guide-slots.config.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-449a3ca3d0775f61", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/run-onboarding-emails/index.ts:32"}, "properties": {"repobilityId": "f621f58b7a5dfd6e", "scanner": "scanner-primary", "fingerprint": "449a3ca3d0775f61", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/run-onboarding-emails/index.ts"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-8c569fee563a7c90", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/lookup-venue-address/index.ts:5"}, "properties": {"repobilityId": "54f16f36b141dff4", "scanner": "scanner-primary", "fingerprint": "8c569fee563a7c90", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/lookup-venue-address/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-56dbdef712b33125", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-my-team-invites/index.ts:18"}, "properties": {"repobilityId": "432ec6ae2d3c11d3", "scanner": "scanner-primary", "fingerprint": "56dbdef712b33125", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/list-my-team-invites/index.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-60ec54af592d329a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-hubspot/index.ts:261"}, "properties": {"repobilityId": "0707815897323c4c", "scanner": "scanner-primary", "fingerprint": "60ec54af592d329a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/sync-hubspot/index.ts"}, "region": {"startLine": 261}}}]}, {"ruleId": "scanner-7b32eec33a2e7f1a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/guest-calendar-feed/index.ts:6"}, "properties": {"repobilityId": "407bfd365f9ab6c5", "scanner": "scanner-primary", "fingerprint": "7b32eec33a2e7f1a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/guest-calendar-feed/index.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-977d85d28cf9ba3e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-advance/index.ts:5"}, "properties": {"repobilityId": "86689e74446af802", "scanner": "scanner-primary", "fingerprint": "977d85d28cf9ba3e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/parse-advance/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-fd06bc0f5a071196", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/slack-oauth-initiate/index.ts:5"}, "properties": {"repobilityId": "0942e576cff4a5bd", "scanner": "scanner-primary", "fingerprint": "fd06bc0f5a071196", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/slack-oauth-initiate/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-629ff91c698d6e99", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/guest-attachment-url/index.ts:14"}, "properties": {"repobilityId": "b0de53b4c75da7c7", "scanner": "scanner-primary", "fingerprint": "629ff91c698d6e99", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/guest-attachment-url/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-540b4383f38ca0f0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-team-invite-email/index.ts:16"}, "properties": {"repobilityId": "466fa59ee67e84b1", "scanner": "scanner-primary", "fingerprint": "540b4383f38ca0f0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-team-invite-email/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-ad48d187a4fc966a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/run-scheduled-slack-pushes/index.ts:26"}, "properties": {"repobilityId": "295f26cb20cde066", "scanner": "scanner-primary", "fingerprint": "ad48d187a4fc966a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/run-scheduled-slack-pushes/index.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-980598a93f30eee2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-guest-list/index.ts:6"}, "properties": {"repobilityId": "d5c94144c71500fa", "scanner": "scanner-primary", "fingerprint": "980598a93f30eee2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/parse-guest-list/index.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-50622a8875ed6bfc", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-account/index.ts:40"}, "properties": {"repobilityId": "41fe50dcc7df4762", "scanner": "scanner-primary", "fingerprint": "50622a8875ed6bfc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/delete-account/index.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-acd395424e33492c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/autocomplete-place/index.ts:5"}, "properties": {"repobilityId": "72ab10c69220aac8", "scanner": "scanner-primary", "fingerprint": "acd395424e33492c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/autocomplete-place/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-744f5d01f9b49814", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/accept-team-invite/index.ts:32"}, "properties": {"repobilityId": "56a5c07f432e72bb", "scanner": "scanner-primary", "fingerprint": "744f5d01f9b49814", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/accept-team-invite/index.ts"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-828d25f322831f12", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/run-scheduled-email-pushes/index.ts:31"}, "properties": {"repobilityId": "c1d149342d2578de", "scanner": "scanner-primary", "fingerprint": "828d25f322831f12", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/run-scheduled-email-pushes/index.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-133fd79db881e890", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/push-slack-daysheet/index.ts:10"}, "properties": {"repobilityId": "5171ceb1bdca924e", "scanner": "scanner-primary", "fingerprint": "133fd79db881e890", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/push-slack-daysheet/index.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-911fe1a1869cbcd3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/log-activation/index.ts:26"}, "properties": {"repobilityId": "82d32f2168e4d524", "scanner": "scanner-primary", "fingerprint": "911fe1a1869cbcd3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/log-activation/index.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-66fffcd85a33f6e2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/decline-team-invite/index.ts:19"}, "properties": {"repobilityId": "9e2c90e6f220a3d0", "scanner": "scanner-primary", "fingerprint": "66fffcd85a33f6e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/decline-team-invite/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-e29b41c5ad79b2dc", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-billing/index.ts:30"}, "properties": {"repobilityId": "af9bde49e5b8eb81", "scanner": "scanner-primary", "fingerprint": "e29b41c5ad79b2dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/stripe-billing/index.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-712a78372874bef7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/inbound-email/index.ts:28"}, "properties": {"repobilityId": "374d9a301f0ea8d2", "scanner": "scanner-primary", "fingerprint": "712a78372874bef7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/inbound-email/index.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-f752325f55ce57bb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-daysheet-email/index.ts:19"}, "properties": {"repobilityId": "73d0f74a043eabed", "scanner": "scanner-primary", "fingerprint": "f752325f55ce57bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-daysheet-email/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-759453f48e9dfc2a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/calculate-drive-time/index.ts:5"}, "properties": {"repobilityId": "375865dfed790f2f", "scanner": "scanner-primary", "fingerprint": "759453f48e9dfc2a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/calculate-drive-time/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-cdd0409a272d27be", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-daily-stats/index.ts:13"}, "properties": {"repobilityId": "dd3bd973f5d211fa", "scanner": "scanner-primary", "fingerprint": "cdd0409a272d27be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-daily-stats/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-d1640507754e0d8d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/resolve-team-invite/index.ts:12"}, "properties": {"repobilityId": "fe0b8d1959c9a85d", "scanner": "scanner-primary", "fingerprint": "d1640507754e0d8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/resolve-team-invite/index.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-fb0a605dfeadea73", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/resolve-timezone/index.ts:14"}, "properties": {"repobilityId": "2029990646af89db", "scanner": "scanner-primary", "fingerprint": "fb0a605dfeadea73", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/resolve-timezone/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-e4f27a6a20a725b8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/parse-set-list/index.ts:6"}, "properties": {"repobilityId": "ca83f1aaddb893cf", "scanner": "scanner-primary", "fingerprint": "e4f27a6a20a725b8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/parse-set-list/index.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-4ba9ce268bf8b774", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-auth-email/index.ts:21"}, "properties": {"repobilityId": "1033ff78eb210ae8", "scanner": "scanner-primary", "fingerprint": "4ba9ce268bf8b774", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-auth-email/index.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-93d0283845aa2c2d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70"}, "properties": {"repobilityId": "33f10636e53b4298", "scanner": "scanner-primary", "fingerprint": "93d0283845aa2c2d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/chart.tsx"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-d10e207cf74073c2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/tour-map/TourMapMarkers.tsx:223"}, "properties": {"repobilityId": "232dcd7723fe1685", "scanner": "scanner-primary", "fingerprint": "d10e207cf74073c2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/tour-map/TourMapMarkers.tsx"}, "region": {"startLine": 223}}}]}, {"ruleId": "scanner-9f83654741987470", "level": "error", "message": {"text": "Possible secret in src/lib/parseAdvanceDiff.ts"}, "properties": {"repobilityId": "6a8d5b3b4592033e", "scanner": "scanner-primary", "fingerprint": "9f83654741987470", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/parseAdvanceDiff.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-3b47ecb59115b400", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "60eeb1642dfa0fb6", "scanner": "scanner-primary", "fingerprint": "3b47ecb59115b400", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-supabase-functions.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-3b47ecb59115b400", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fefb51fb924df752", "scanner": "scanner-primary", "fingerprint": "3b47ecb59115b400", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-supabase-functions.yml"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-1e4eeed53b0b9b73", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "83f24b818581e0cc", "scanner": "scanner-primary", "fingerprint": "1e4eeed53b0b9b73", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-capgo-bundle.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-1e4eeed53b0b9b73", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "65435546bfa88664", "scanner": "scanner-primary", "fingerprint": "1e4eeed53b0b9b73", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-capgo-bundle.yml"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-5f33513c2e15e281", "level": "note", "message": {"text": "Very large file: src/pages/ShowDetailPage.tsx (3256 lines)"}, "properties": {"repobilityId": "26bb4938d51d273c", "scanner": "scanner-primary", "fingerprint": "5f33513c2e15e281", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d2995ed6a537ca6e", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "a650dd8cdcfef2ca", "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": "0a4ad68017d60b69", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "3dd41b424073878e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "832b3b3f2a2925cb", "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": "0c2f8d4ccd5b16d6", "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": "f4d30fc3d0b46187", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f42e78e32c58910f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/pr/SKILL.md"}, "properties": {"repobilityId": "87073a584a226a8c", "scanner": "scanner-primary", "fingerprint": "f42e78e32c58910f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/pr/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c23f93c3d4984ff0", "level": "none", "message": {"text": "Commented-code block (8 lines) in vite.config.ts:63"}, "properties": {"repobilityId": "c39c206a64e56c35", "scanner": "scanner-primary", "fingerprint": "c23f93c3d4984ff0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cb23f45dff57b8b", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/mobile-dialog-bottom-sheet.spec.ts:7"}, "properties": {"repobilityId": "a17c2799dd171d08", "scanner": "scanner-primary", "fingerprint": "0cb23f45dff57b8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f0493d534d1b9bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/calendar-feed.spec.ts:5"}, "properties": {"repobilityId": "2f82b1010a5d4216", "scanner": "scanner-primary", "fingerprint": "0f0493d534d1b9bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1871cd9bd7229dcc", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/schedule-entry-time-picker.spec.ts:8"}, "properties": {"repobilityId": "e40f3bc3f8431458", "scanner": "scanner-primary", "fingerprint": "1871cd9bd7229dcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fdc13d03144f135", "level": "none", "message": {"text": "Commented-code block (10 lines) in tests/schedule-time-picker.spec.ts:7"}, "properties": {"repobilityId": "3024cca3cf30e155", "scanner": "scanner-primary", "fingerprint": "3fdc13d03144f135", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2ef0c6656afef62", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/departure-time-picker.spec.ts:7"}, "properties": {"repobilityId": "c1b5a961f29dc5dc", "scanner": "scanner-primary", "fingerprint": "f2ef0c6656afef62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c629388682bb4fd4", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/show-edit-inline.spec.ts:5"}, "properties": {"repobilityId": "abdc231c2378b6ba", "scanner": "scanner-primary", "fingerprint": "c629388682bb4fd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f539ca0270d628b0", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/settings-tabs.spec.ts:5"}, "properties": {"repobilityId": "28394cf7a9c422f0", "scanner": "scanner-primary", "fingerprint": "f539ca0270d628b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e457c09794f96e8", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/show-edit-unify.spec.ts:5"}, "properties": {"repobilityId": "dcb090dd590fd895", "scanner": "scanner-primary", "fingerprint": "5e457c09794f96e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34f347fde41d0e24", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/og-image.ts:26"}, "properties": {"repobilityId": "252badb3dcb45ba1", "scanner": "scanner-primary", "fingerprint": "34f347fde41d0e24", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e58e8084e64fda27", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/preview-email.ts:6"}, "properties": {"repobilityId": "d0b6f8f11b45218e", "scanner": "scanner-primary", "fingerprint": "e58e8084e64fda27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cafe42c2940b4f57", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/resolve-guide-slots.ts:219"}, "properties": {"repobilityId": "970d33e570a45c6f", "scanner": "scanner-primary", "fingerprint": "cafe42c2940b4f57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cdcad580806b2a6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-supabase.js:53"}, "properties": {"repobilityId": "e495fdb36590dd4e", "scanner": "scanner-primary", "fingerprint": "1cdcad580806b2a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a1e242ed7bb74520", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/run-onboarding-emails/index.ts:8"}, "properties": {"repobilityId": "6cfe432b76fb0c0b", "scanner": "scanner-primary", "fingerprint": "a1e242ed7bb74520", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aa8e5f235b81bd5", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/run-onboarding-emails/select.ts:3"}, "properties": {"repobilityId": "b659c384a03c968e", "scanner": "scanner-primary", "fingerprint": "6aa8e5f235b81bd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52c39b66db31fc37", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/lookup-venue-address/index.ts:81"}, "properties": {"repobilityId": "bc14b44f38a058d9", "scanner": "scanner-primary", "fingerprint": "52c39b66db31fc37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bee6f7ccc7421db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/lookup-venue-address/index.ts:94"}, "properties": {"repobilityId": "50d4c51e8adf3635", "scanner": "scanner-primary", "fingerprint": "4bee6f7ccc7421db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9bacaa023b755582", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/list-my-team-invites/index.ts:6"}, "properties": {"repobilityId": "bb5be950dee29980", "scanner": "scanner-primary", "fingerprint": "9bacaa023b755582", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c80cd93d99384c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/sync-hubspot/index.ts:1"}, "properties": {"repobilityId": "99931aeadb586268", "scanner": "scanner-primary", "fingerprint": "3c80cd93d99384c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d09631e89d71044", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-hubspot/index.ts:56"}, "properties": {"repobilityId": "b417192921b897bd", "scanner": "scanner-primary", "fingerprint": "8d09631e89d71044", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cad528c55cc726c9", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/guest-calendar-feed/index.ts:51"}, "properties": {"repobilityId": "b5f4a25df3a99e6b", "scanner": "scanner-primary", "fingerprint": "cad528c55cc726c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67f8f9e8cb6a3166", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/guest-calendar-feed/buildIcs.ts:68"}, "properties": {"repobilityId": "af6457b9208df577", "scanner": "scanner-primary", "fingerprint": "67f8f9e8cb6a3166", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47e9a53b3a3d3b42", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/slack-oauth-initiate/index.ts:54"}, "properties": {"repobilityId": "5204a4aab6608203", "scanner": "scanner-primary", "fingerprint": "47e9a53b3a3d3b42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09d80da6fce5ea47", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-team-invite-email/index.ts:9"}, "properties": {"repobilityId": "9d62f575ce7c4dcb", "scanner": "scanner-primary", "fingerprint": "09d80da6fce5ea47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48aefe519c5b04f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/run-scheduled-slack-pushes/index.ts:3"}, "properties": {"repobilityId": "02be6ef570c35712", "scanner": "scanner-primary", "fingerprint": "48aefe519c5b04f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-911ed0014555940e", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/delete-account/index.ts:11"}, "properties": {"repobilityId": "2f66beec8f683e6c", "scanner": "scanner-primary", "fingerprint": "911ed0014555940e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bd3d861241cecb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/index.ts:3"}, "properties": {"repobilityId": "f54b7ae6b7b59546", "scanner": "scanner-primary", "fingerprint": "2bd3d861241cecb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d743163559e3f79", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-webhook/mapping.ts:1"}, "properties": {"repobilityId": "9beef0c899dc9de7", "scanner": "scanner-primary", "fingerprint": "1d743163559e3f79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e406019d6e3cd67", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/autocomplete-place/index.ts:84"}, "properties": {"repobilityId": "c22e69211f6ca21d", "scanner": "scanner-primary", "fingerprint": "0e406019d6e3cd67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28f75b5af184f665", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/autocomplete-place/index.ts:103"}, "properties": {"repobilityId": "55fb0cbdf4f2f90b", "scanner": "scanner-primary", "fingerprint": "28f75b5af184f665", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fe3b56f70ea5541", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/accept-team-invite/index.ts:15"}, "properties": {"repobilityId": "fd29fc302022518d", "scanner": "scanner-primary", "fingerprint": "0fe3b56f70ea5541", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06cf01d03c577d4f", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/run-scheduled-email-pushes/index.ts:3"}, "properties": {"repobilityId": "0948700f856af398", "scanner": "scanner-primary", "fingerprint": "06cf01d03c577d4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26300ead4c6a21eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/push-slack-daysheet/index.ts:18"}, "properties": {"repobilityId": "c778a72b23cf6ab7", "scanner": "scanner-primary", "fingerprint": "26300ead4c6a21eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44592d696b13519e", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/log-activation/index.ts:5"}, "properties": {"repobilityId": "6329a2869525f5e4", "scanner": "scanner-primary", "fingerprint": "44592d696b13519e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f331e8889ec6de66", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/decline-team-invite/index.ts:10"}, "properties": {"repobilityId": "e30dbd5c6b21064a", "scanner": "scanner-primary", "fingerprint": "f331e8889ec6de66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58aab5de19120ed9", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/stripe-billing/index.ts:8"}, "properties": {"repobilityId": "b8faf39415eaffd0", "scanner": "scanner-primary", "fingerprint": "58aab5de19120ed9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-343ae5f973ba6a51", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/inbound-email/adapters.ts:5"}, "properties": {"repobilityId": "c997d463735b7231", "scanner": "scanner-primary", "fingerprint": "343ae5f973ba6a51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69d2b82e81df8d13", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/inbound-email/index.ts:16"}, "properties": {"repobilityId": "a16227134dccd859", "scanner": "scanner-primary", "fingerprint": "69d2b82e81df8d13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b4860fd5c24b42f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/inbound-email/index.ts:741"}, "properties": {"repobilityId": "7e7e2e68f317044f", "scanner": "scanner-primary", "fingerprint": "2b4860fd5c24b42f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-684232ba4273656e", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/send-daysheet-email/index.ts:9"}, "properties": {"repobilityId": "5645510ecdd0b285", "scanner": "scanner-primary", "fingerprint": "684232ba4273656e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4b542e493f44606", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/calculate-drive-time/index.ts:9"}, "properties": {"repobilityId": "e5ff3d6173be703d", "scanner": "scanner-primary", "fingerprint": "f4b542e493f44606", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-288dbd4f84502a0e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/calculate-drive-time/index.ts:93"}, "properties": {"repobilityId": "2f4431102ecc4932", "scanner": "scanner-primary", "fingerprint": "288dbd4f84502a0e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f15daf35d04cc553", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/get-daily-stats/index.ts:102"}, "properties": {"repobilityId": "cbbf0a44a8b8fe10", "scanner": "scanner-primary", "fingerprint": "f15daf35d04cc553", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e3eb2928d7ceaf7", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/unsubscribe-onboarding/index.ts:8"}, "properties": {"repobilityId": "3e8dc30a42e8f639", "scanner": "scanner-primary", "fingerprint": "1e3eb2928d7ceaf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1be2f9cb6faaa83", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/resolve-team-invite/index.ts:5"}, "properties": {"repobilityId": "6ef5a682e8c6f355", "scanner": "scanner-primary", "fingerprint": "b1be2f9cb6faaa83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae07acebc465a613", "level": "none", "message": {"text": "Commented-code block (12 lines) in supabase/functions/send-sample-advance/template.ts:5"}, "properties": {"repobilityId": "c93d5a688a7b50f2", "scanner": "scanner-primary", "fingerprint": "ae07acebc465a613", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ffe1c5c6fd3b06a", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/send-sample-advance/index.ts:7"}, "properties": {"repobilityId": "f2939d345f874a2e", "scanner": "scanner-primary", "fingerprint": "1ffe1c5c6fd3b06a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb09ca1aa24d7116", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-auth-email/index.ts:8"}, "properties": {"repobilityId": "c77bf7197ba0232b", "scanner": "scanner-primary", "fingerprint": "bb09ca1aa24d7116", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b559eaf09c94518e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/timezone.ts:49"}, "properties": {"repobilityId": "ff686e8e5d570f67", "scanner": "scanner-primary", "fingerprint": "b559eaf09c94518e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5834ec8f6c456198", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/internal-accounts.ts:1"}, "properties": {"repobilityId": "9223e7279cc05626", "scanner": "scanner-primary", "fingerprint": "5834ec8f6c456198", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0051aa270d7dc981", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/svix.ts:1"}, "properties": {"repobilityId": "20b7cb1fe13378cb", "scanner": "scanner-primary", "fingerprint": "0051aa270d7dc981", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2cf3da67f4b6a7f", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/resend.ts:5"}, "properties": {"repobilityId": "34e30ef7c383941f", "scanner": "scanner-primary", "fingerprint": "d2cf3da67f4b6a7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29a9423eed4857e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/main.tsx:5"}, "properties": {"repobilityId": "ac48b59d1dedf933", "scanner": "scanner-primary", "fingerprint": "29a9423eed4857e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-208039cee9d4830b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/TeamProvider.tsx:373"}, "properties": {"repobilityId": "53f2d8b1d4c7a4a3", "scanner": "scanner-primary", "fingerprint": "208039cee9d4830b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab5921260598fb9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/TeamProvider.tsx:437"}, "properties": {"repobilityId": "e634e1649ced6851", "scanner": "scanner-primary", "fingerprint": "ab5921260598fb9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c0a46f0e88c705e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/CreateShowDialog.tsx:265"}, "properties": {"repobilityId": "844688929d3ca83c", "scanner": "scanner-primary", "fingerprint": "2c0a46f0e88c705e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52d99700fb60b03d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/PasteGuestListDialog.tsx:178"}, "properties": {"repobilityId": "bb93b1f2b98bc254", "scanner": "scanner-primary", "fingerprint": "52d99700fb60b03d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28a8cff39dd033cf", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/ScheduleEditor.tsx:43"}, "properties": {"repobilityId": "a0b294e80f4fa667", "scanner": "scanner-primary", "fingerprint": "28a8cff39dd033cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-966af3fac3831730", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/EmailBandDialog.tsx:95"}, "properties": {"repobilityId": "d0f56a2e9164db02", "scanner": "scanner-primary", "fingerprint": "966af3fac3831730", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bfbe351091ede7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/VenuePicker.tsx:175"}, "properties": {"repobilityId": "3ff69b55e105c91c", "scanner": "scanner-primary", "fingerprint": "7bfbe351091ede7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-565502d286aba142", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/ParseAdvanceForShowDialog.tsx:234"}, "properties": {"repobilityId": "ae1502ae6ed096e8", "scanner": "scanner-primary", "fingerprint": "565502d286aba142", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-390bfcea79c06223", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/PendingEmailsProvider.tsx:140"}, "properties": {"repobilityId": "22cd71368f418b4e", "scanner": "scanner-primary", "fingerprint": "390bfcea79c06223", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23a0648cae35ff59", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/components/FieldGroup.tsx:45"}, "properties": {"repobilityId": "0caa791b3e114950", "scanner": "scanner-primary", "fingerprint": "23a0648cae35ff59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f7a5c8fec1c2264", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ArtistSwitcher.tsx:114"}, "properties": {"repobilityId": "57d5538641bbd914", "scanner": "scanner-primary", "fingerprint": "7f7a5c8fec1c2264", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b7591da8c6bd6f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ContactsEditor.tsx:238"}, "properties": {"repobilityId": "c2053ec45fba18f5", "scanner": "scanner-primary", "fingerprint": "9b7591da8c6bd6f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19557a9f5ff5cc04", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/SetListEditorAuth.tsx:130"}, "properties": {"repobilityId": "994f34623e227bd5", "scanner": "scanner-primary", "fingerprint": "19557a9f5ff5cc04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ff94665b8b6c29d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/NewArtistDialog.tsx:32"}, "properties": {"repobilityId": "568d2b862ffa492b", "scanner": "scanner-primary", "fingerprint": "3ff94665b8b6c29d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02a036527659dc22", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/EmailSentInterstitial.tsx:4"}, "properties": {"repobilityId": "f4e6fc8b89d6c422", "scanner": "scanner-primary", "fingerprint": "02a036527659dc22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb69c85252ff341c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ShowAttachments.tsx:112"}, "properties": {"repobilityId": "685ecb289a6c7084", "scanner": "scanner-primary", "fingerprint": "bb69c85252ff341c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4f40a3af0b6e899", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/components/TourMapView.tsx:38"}, "properties": {"repobilityId": "31a78f0ec3d3aea7", "scanner": "scanner-primary", "fingerprint": "e4f40a3af0b6e899", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f4fd389bfe46c35", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ThemeColorMeta.tsx:6"}, "properties": {"repobilityId": "ff1536bfb00ba4df", "scanner": "scanner-primary", "fingerprint": "0f4fd389bfe46c35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7dc503b2a7839b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ScheduleTimeline.tsx:49"}, "properties": {"repobilityId": "7a6e8e65ef523e18", "scanner": "scanner-primary", "fingerprint": "a7dc503b2a7839b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41100e67865e22b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/UpgradeDialog.tsx:22"}, "properties": {"repobilityId": "93dc95d24d3b81ad", "scanner": "scanner-primary", "fingerprint": "41100e67865e22b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9f308eb9bb6314f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/TimeInput.tsx:404"}, "properties": {"repobilityId": "bedacc7cd31939a9", "scanner": "scanner-primary", "fingerprint": "f9f308eb9bb6314f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c316a8d460329d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/BulkUploadDialog.tsx:532"}, "properties": {"repobilityId": "12c83132a1c3169c", "scanner": "scanner-primary", "fingerprint": "9c316a8d460329d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18d2edd20e4e565e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/AuthProvider.tsx:19"}, "properties": {"repobilityId": "f41b79af1a9f08be", "scanner": "scanner-primary", "fingerprint": "18d2edd20e4e565e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cdc4e5c432a35b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ui/dialog.tsx:36"}, "properties": {"repobilityId": "a7849a477156650a", "scanner": "scanner-primary", "fingerprint": "2cdc4e5c432a35b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77e46f774e05fab4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/tour-map/TourMapMarkers.tsx:93"}, "properties": {"repobilityId": "a472a51e19241d1c", "scanner": "scanner-primary", "fingerprint": "77e46f774e05fab4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-194fa7a5686c62af", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/tour-map/tourStopVariant.ts:21"}, "properties": {"repobilityId": "316fc7d6c1194112", "scanner": "scanner-primary", "fingerprint": "194fa7a5686c62af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d13cc06c722671a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/tour-map/MapCanvas.tsx:161"}, "properties": {"repobilityId": "e252efa96e8e7c47", "scanner": "scanner-primary", "fingerprint": "1d13cc06c722671a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d274c1c22997d4a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/tour-map/MobileTourMapLayout.tsx:72"}, "properties": {"repobilityId": "d2b95c7c81d484ad", "scanner": "scanner-primary", "fingerprint": "d274c1c22997d4a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1488f5ab696d6d67", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/DayOfShow/DayOfShowMode.tsx:27"}, "properties": {"repobilityId": "d567be2e77b9c43b", "scanner": "scanner-primary", "fingerprint": "1488f5ab696d6d67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b84b798a0f5180e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/DayOfShow/DayOfShowFloatingButton.tsx:44"}, "properties": {"repobilityId": "e20696f10771ff3a", "scanner": "scanner-primary", "fingerprint": "7b84b798a0f5180e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-168b62f4a26173e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/setListShuffle.ts:6"}, "properties": {"repobilityId": "db660de03e20c901", "scanner": "scanner-primary", "fingerprint": "168b62f4a26173e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09284d5057ba2523", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/daySheetPdf.ts:60"}, "properties": {"repobilityId": "0f93663fe402d560", "scanner": "scanner-primary", "fingerprint": "09284d5057ba2523", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-496dca3f429481e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/billing.ts:3"}, "properties": {"repobilityId": "ebd43c19c131b893", "scanner": "scanner-primary", "fingerprint": "496dca3f429481e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44f093c3810de59f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/saveParsedShow.ts:60"}, "properties": {"repobilityId": "59292a9fc6b31aa9", "scanner": "scanner-primary", "fingerprint": "44f093c3810de59f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a351a415ad5ac0b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/nativeAuth.ts:3"}, "properties": {"repobilityId": "ae9f61a374536664", "scanner": "scanner-primary", "fingerprint": "0a351a415ad5ac0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-956f34cd77b364d3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/authSession.ts:21"}, "properties": {"repobilityId": "f6f286ffa7d0f130", "scanner": "scanner-primary", "fingerprint": "956f34cd77b364d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e39bca0433c0a93c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/routeRestoration.ts:8"}, "properties": {"repobilityId": "4162f5d8318094da", "scanner": "scanner-primary", "fingerprint": "e39bca0433c0a93c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f713c10461b2d6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/sharePdf.ts:8"}, "properties": {"repobilityId": "97361c9dd471b347", "scanner": "scanner-primary", "fingerprint": "4f713c10461b2d6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bd669e9823ec7b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/dealMath.ts:12"}, "properties": {"repobilityId": "865ddc22df2b6f68", "scanner": "scanner-primary", "fingerprint": "6bd669e9823ec7b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f116b0c06ccfd9e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/nativeFiles.ts:3"}, "properties": {"repobilityId": "8730d7ba6537d46a", "scanner": "scanner-primary", "fingerprint": "3f116b0c06ccfd9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9126e1e72ae6e779", "level": "none", "message": {"text": "Commented-code block (16 lines) in src/lib/bulkUpload.ts:4"}, "properties": {"repobilityId": "28439589911e96db", "scanner": "scanner-primary", "fingerprint": "9126e1e72ae6e779", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2dcd846fff22371", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/buildIcsCalendar.ts:15"}, "properties": {"repobilityId": "da0bc91ab967a5de", "scanner": "scanner-primary", "fingerprint": "d2dcd846fff22371", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ed0a764fde239c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/activationEvents.ts:3"}, "properties": {"repobilityId": "c7612272cfc0ae54", "scanner": "scanner-primary", "fingerprint": "5ed0a764fde239c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a66d824c040bdbd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/setListPdf.ts:81"}, "properties": {"repobilityId": "b3ab0df87850a502", "scanner": "scanner-primary", "fingerprint": "7a66d824c040bdbd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b5118605e99f822", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/contactRoles.ts:65"}, "properties": {"repobilityId": "b4d3c8a6fea3f7b8", "scanner": "scanner-primary", "fingerprint": "3b5118605e99f822", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9429a86beabce155", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pdfFonts.ts:18"}, "properties": {"repobilityId": "1e543bfb210f57b9", "scanner": "scanner-primary", "fingerprint": "9429a86beabce155", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3c73b59853f05d2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/activeTeam.ts:3"}, "properties": {"repobilityId": "ff306b02cae7db7b", "scanner": "scanner-primary", "fingerprint": "d3c73b59853f05d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01e26a21a6039d54", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/InvitePage.tsx:248"}, "properties": {"repobilityId": "11b05b219aef8f5e", "scanner": "scanner-primary", "fingerprint": "01e26a21a6039d54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05b2ff7c7d937a05", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/TourFinancialsPage.tsx:22"}, "properties": {"repobilityId": "13ccd78c270157ad", "scanner": "scanner-primary", "fingerprint": "05b2ff7c7d937a05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fde9a6fdb6f317a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/DashboardPage.tsx:64"}, "properties": {"repobilityId": "5de62e454b0c001c", "scanner": "scanner-primary", "fingerprint": "0fde9a6fdb6f317a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-690f98ced11c595b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/ResetPasswordPage.tsx:12"}, "properties": {"repobilityId": "d4a1cef50e8cba2b", "scanner": "scanner-primary", "fingerprint": "690f98ced11c595b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f55f43af96bff672", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/ShowDetailPage.tsx:150"}, "properties": {"repobilityId": "4e56341cdd6a14da", "scanner": "scanner-primary", "fingerprint": "f55f43af96bff672", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b5dc932d3ec4803", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/settings/BillingTab.tsx:20"}, "properties": {"repobilityId": "37351e4c539048e6", "scanner": "scanner-primary", "fingerprint": "8b5dc932d3ec4803", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cda86d28acab805", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/settings/IntegrationsTab.tsx:232"}, "properties": {"repobilityId": "7689c28549753413", "scanner": "scanner-primary", "fingerprint": "3cda86d28acab805", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d2a8c5b59b1742e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/settings/SongsTab.tsx:161"}, "properties": {"repobilityId": "62de326ba6fb51f0", "scanner": "scanner-primary", "fingerprint": "7d2a8c5b59b1742e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa551b05d4a5f760", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/settings/GeneralTab.tsx:38"}, "properties": {"repobilityId": "ba48fe1407805dc2", "scanner": "scanner-primary", "fingerprint": "aa551b05d4a5f760", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e59dd077848912b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/settings/TeamTab.tsx:138"}, "properties": {"repobilityId": "aa68a8728f4ea4b0", "scanner": "scanner-primary", "fingerprint": "4e59dd077848912b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17f4eccefbb714cf", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/show-detail/useInlineEditor.ts:23"}, "properties": {"repobilityId": "e9d098a8938e376c", "scanner": "scanner-primary", "fingerprint": "17f4eccefbb714cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21d44f5a07f418f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useDaySheetExport.ts:29"}, "properties": {"repobilityId": "ddfe665559c5249e", "scanner": "scanner-primary", "fingerprint": "21d44f5a07f418f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c9c63434f581167", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/use-mobile.tsx:5"}, "properties": {"repobilityId": "5bce3600c43f0f05", "scanner": "scanner-primary", "fingerprint": "1c9c63434f581167", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d8117f7db6e8fa2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useDayOfShowPhase.ts:50"}, "properties": {"repobilityId": "9718276eb77a5c0e", "scanner": "scanner-primary", "fingerprint": "2d8117f7db6e8fa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8215150102117cfc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useGuestLink.ts:48"}, "properties": {"repobilityId": "758f3ecb748bc5d3", "scanner": "scanner-primary", "fingerprint": "8215150102117cfc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-980ddad07c97625d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useCapacitorDeepLinks.ts:90"}, "properties": {"repobilityId": "adf94d0c682cd3ba", "scanner": "scanner-primary", "fingerprint": "980ddad07c97625d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75cfe0da157c95cf", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useTourGeocoding.ts:53"}, "properties": {"repobilityId": "249dfeda27ca48e3", "scanner": "scanner-primary", "fingerprint": "75cfe0da157c95cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b334d875f2339fa1", "level": "note", "message": {"text": "5 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "faa38682016f5d53", "scanner": "scanner-primary", "fingerprint": "b334d875f2339fa1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-9bed496ad2a8633d", "level": "warning", "message": {"text": "Frontend route `/shows/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "2fac03ebc2c7353b", "scanner": "scanner-primary", "fingerprint": "9bed496ad2a8633d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-46efeed32975cc79", "level": "warning", "message": {"text": "Frontend route `/tours` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f0520d2341fb1186", "scanner": "scanner-primary", "fingerprint": "46efeed32975cc79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b3800e2b035c828b", "level": "warning", "message": {"text": "Frontend route `/tours/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a8db4c33b47d323f", "scanner": "scanner-primary", "fingerprint": "b3800e2b035c828b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-811c18745b79eaff", "level": "warning", "message": {"text": "Frontend route `/tours/:id/financials` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "2fb8fcdf90c5d3a1", "scanner": "scanner-primary", "fingerprint": "811c18745b79eaff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2d26bc0dd2b8e7af", "level": "warning", "message": {"text": "Frontend route `/guest/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "6bab9b85c3ba50c8", "scanner": "scanner-primary", "fingerprint": "2d26bc0dd2b8e7af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-70506d14ae643b2c", "level": "warning", "message": {"text": "Frontend route `/invite/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a14c9d35861a345f", "scanner": "scanner-primary", "fingerprint": "70506d14ae643b2c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7064cd9925eeb9c6", "level": "warning", "message": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "eb928b698e0c5cc3", "scanner": "scanner-primary", "fingerprint": "7064cd9925eeb9c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}