{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b195ad866162aef7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/WeddingTimelineStrip.tsx:239", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/WeddingTimelineStrip.tsx:239"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e692ade3d2cebe44", "name": "`truncate` class without `title=` for hover reveal \u2014 components/OverviewCalendar.tsx:363", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/OverviewCalendar.tsx:363"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd8a5ac5b2584bbe", "name": "`truncate` class without `title=` for hover reveal \u2014 components/VenueMessagesView.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/VenueMessagesView.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40209c93b266a873", "name": "`truncate` class without `title=` for hover reveal \u2014 components/BulkUploader.tsx:800", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BulkUploader.tsx:800"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d21119285039b22", "name": "`truncate` class without `title=` for hover reveal \u2014 components/CalendarSubscribe.tsx:14", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/CalendarSubscribe.tsx:14"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4aad5426485a57a7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/BookingsCalendar.tsx:304", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BookingsCalendar.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-bf044402e147f7d1", "name": "Icon-only button without accessible name \u2014 components/InventoryManager.tsx:863", "shortDescription": {"text": "Icon-only button without accessible name \u2014 components/InventoryManager.tsx:863"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95969aa153c4df31", "name": "`truncate` class without `title=` for hover reveal \u2014 components/InventoryManager.tsx:466", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/InventoryManager.tsx:466"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5dbbd00cf735633", "name": "`truncate` class without `title=` for hover reveal \u2014 components/WeddingDocuments.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/WeddingDocuments.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dae8146cc86d2d75", "name": "`truncate` class without `title=` for hover reveal \u2014 components/PortalDesigner.tsx:463", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/PortalDesigner.tsx:463"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3df8b60449f82d8e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/CalendarOpsCards.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/CalendarOpsCards.tsx:71"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8e1d328fd79627f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/page.tsx:550", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/page.tsx:550"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f48e865d680aba99", "name": "Stray `console.log` in TS/JS \u2014 app/api/venue/uploads/parse/route.ts:178", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/venue/uploads/parse/route.ts:178"}, "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-9055b785af00078d", "name": "Icon-only button without accessible name \u2014 app/venue/seating/page.tsx:64", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/venue/seating/page.tsx:64"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae6899862233ded1", "name": "`truncate` class without `title=` for hover reveal \u2014 app/venue/team/page.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/venue/team/page.tsx:158"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9470aaa0fb185f01", "name": "`truncate` class without `title=` for hover reveal \u2014 app/venue/enquiries/page.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/venue/enquiries/page.tsx:116"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1844cf8c74a9e252", "name": "Icon-only button without accessible name \u2014 app/venue/weddings/[slug]/page.tsx:614", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/venue/weddings/[slug]/page.tsx:614"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d319340ce41d19fd", "name": "`truncate` class without `title=` for hover reveal \u2014 app/venue/weddings/[slug]/page.tsx:734", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/venue/weddings/[slug]/page.tsx:734"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7877b65e6253c063", "name": "`truncate` class without `title=` for hover reveal \u2014 app/booking/[wedding]/accommodation/ConfirmBookings.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/booking/[wedding]/accommodation/ConfirmBookings.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f57a8bd5a413351", "name": "Icon-only button without accessible name \u2014 app/portal/[venue]/[wedding]/checklist/page.tsx:36", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/portal/[venue]/[wedding]/checklist/page.tsx:36"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9386e3eed2dc2ab", "name": "Stray `console.log` in TS/JS \u2014 lib/imports/extract-images.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/imports/extract-images.ts:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92fffe35a0da3e27", "name": "Very large file: components/BulkUploader.tsx (1001 lines)", "shortDescription": {"text": "Very large file: components/BulkUploader.tsx (1001 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-cd594927ced4e92c", "name": "Very large file: components/CouplePortal.tsx (935 lines)", "shortDescription": {"text": "Very large file: components/CouplePortal.tsx (935 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 233 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 19 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 147 placeholder/mock markers across 53 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-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71d85e3bfc1ff97a", "name": "Legacy-named symbol `patbusch_backup` in scripts/patbusch_consolidate.py:134", "shortDescription": {"text": "Legacy-named symbol `patbusch_backup` in scripts/patbusch_consolidate.py:134"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d73694fbbd756e7f", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/brand_auth_emails.py:109", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/brand_auth_emails.py:109"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71fa45af3dbd94d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/SeatingPlanner.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SeatingPlanner.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ae224e9e9233cb6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/SeatingPlan.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SeatingPlan.tsx:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-403be16810efe495", "name": "Commented-code block (6 lines) in components/OverviewCalendar.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in components/OverviewCalendar.tsx: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-b744faf305464993", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/ListManager.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ListManager.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-154e70cac36fbd59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/DocumentManager.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/DocumentManager.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75028287a8e51e5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/RoomAllocator.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/RoomAllocator.tsx:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92c8989ad3ed29c0", "name": "Commented-code block (7 lines) in components/LoadingProvider.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in components/LoadingProvider.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0d75a2ba3bf58db", "name": "Commented-code block (5 lines) in components/VenuelyLoader.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in components/VenuelyLoader.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-413802cca93ba720", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/RsvpForm.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/RsvpForm.tsx:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f33a4091a07f8b96", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/InspirationBoard.tsx:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/InspirationBoard.tsx:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-986b0b835f68a5af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/GuestManager.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/GuestManager.tsx:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e4f440d163a71a75", "name": "Commented-code block (5 lines) in components/SpacesSection.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in components/SpacesSection.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-41521c9d90dc6a09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/SpacesSection.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SpacesSection.tsx:63"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5fb411244ba6dd9c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/TimelineBoard.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/TimelineBoard.tsx:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-963b4bf17ce15999", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/YourVenueManager.tsx:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/YourVenueManager.tsx:132"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5eafa90bb37a5401", "name": "Commented-code block (5 lines) in components/SuppliersManager.tsx:22", "shortDescription": {"text": "Commented-code block (5 lines) in components/SuppliersManager.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-15da67e04ab36d60", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/BudgetBoard.tsx:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/BudgetBoard.tsx:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a1ebad0ac5059b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/WeddingDocuments.tsx:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/WeddingDocuments.tsx:23"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3eef33b7f402769", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/ChecklistBoard.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ChecklistBoard.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49d0f3bc9d84841f", "name": "Commented-code block (5 lines) in components/SetupVenueForm.tsx:302", "shortDescription": {"text": "Commented-code block (5 lines) in components/SetupVenueForm.tsx:302"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15349a7c4b4fabe1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/RemindersManager.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/RemindersManager.tsx:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bd9e7633e3334c39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/GuestInvites.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/GuestInvites.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c478a54d715a5c4b", "name": "Commented-code block (5 lines) in components/FloorPlanner.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in components/FloorPlanner.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4c6d1760afb9de6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/FloorPlanner.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/FloorPlanner.tsx: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-988ed76ceea0042e", "name": "Commented-code block (6 lines) in components/SmartImportOverlay.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in components/SmartImportOverlay.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6adceb224c463759", "name": "Commented-code block (5 lines) in components/CouplePortal.tsx:365", "shortDescription": {"text": "Commented-code block (5 lines) in components/CouplePortal.tsx:365"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3155b8ea856587b9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/CouplePortal.tsx:335", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/CouplePortal.tsx:335"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f95a3ae67fd8726e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/PaymentsManager.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/PaymentsManager.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1cd24e3a4ac245c7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/CoupleMessages.tsx:163", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/CoupleMessages.tsx:163"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f9d9182e8aa3ea7", "name": "Commented-code block (5 lines) in app/rsvp/[token]/page.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in app/rsvp/[token]/page.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-8fac3826f058c31a", "name": "Commented-code block (5 lines) in app/api/enquiry/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/enquiry/route.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-54412090e14e95f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/image-search/route.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/image-search/route.ts:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4b6e302ef644dc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/import/route.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/import/route.ts:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dec8b4af9cf78361", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/image-track-download/route.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/image-track-download/route.ts:21"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02403620614e0f4c", "name": "Commented-code block (5 lines) in app/api/paystack/checkout/route.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/paystack/checkout/route.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-f9cc14d2d0af8e9b", "name": "Commented-code block (5 lines) in app/api/cron/reminders/route.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cron/reminders/route.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03c3c3282c618541", "name": "Commented-code block (5 lines) in app/api/wedding/[slug]/accommodation/route.ts:119", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/wedding/[slug]/accommodation/route.ts:119"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bf075519c2e06b3", "name": "Commented-code block (5 lines) in app/api/yoco/webhook/route.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/yoco/webhook/route.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bcd2a34f9db68f1", "name": "Commented-code block (6 lines) in app/venue/page.tsx:50", "shortDescription": {"text": "Commented-code block (6 lines) in app/venue/page.tsx: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-9f8a9c63eaed809d", "name": "Commented-code block (5 lines) in app/venue/team/actions.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in app/venue/team/actions.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e55340639f5283d", "name": "Commented-code block (5 lines) in app/venue/enquiries/actions.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in app/venue/enquiries/actions.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-2790c51a7eb7270d", "name": "Commented-code block (5 lines) in app/venue/weddings/actions.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in app/venue/weddings/actions.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-c7922f5af89c98d3", "name": "Commented-code block (6 lines) in app/venue/weddings/reminder-actions.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in app/venue/weddings/reminder-actions.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-150d8dad35b121b6", "name": "Commented-code block (5 lines) in app/venue/weddings/[slug]/actions.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in app/venue/weddings/[slug]/actions.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-f10d8c66a40021d9", "name": "Commented-code block (5 lines) in app/venue/your-venue/page.tsx:35", "shortDescription": {"text": "Commented-code block (5 lines) in app/venue/your-venue/page.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31a1228cc4eb3e93", "name": "Commented-code block (5 lines) in app/venue/areas/actions.ts:128", "shortDescription": {"text": "Commented-code block (5 lines) in app/venue/areas/actions.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb7fa8bad4cb2ad8", "name": "Commented-code block (5 lines) in app/venue/calendar/actions.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/venue/calendar/actions.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-cd3a04cd43166064", "name": "Commented-code block (6 lines) in app/venue/calendar/page.tsx:101", "shortDescription": {"text": "Commented-code block (6 lines) in app/venue/calendar/page.tsx:101"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f721ff5dd55f9811", "name": "Commented-code block (6 lines) in app/booking/[wedding]/accommodation/ConfirmBookings.tsx:13", "shortDescription": {"text": "Commented-code block (6 lines) in app/booking/[wedding]/accommodation/ConfirmBookings.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-815ae045543adcad", "name": "Commented-code block (5 lines) in app/admin/billing/actions.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/billing/actions.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-dc67142d757c853d", "name": "Commented-code block (6 lines) in app/onboarding/wizard/WizardClient.tsx:193", "shortDescription": {"text": "Commented-code block (6 lines) in app/onboarding/wizard/WizardClient.tsx:193"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acd0894f166bc6fe", "name": "Commented-code block (8 lines) in app/onboarding/wizard/page.tsx:13", "shortDescription": {"text": "Commented-code block (8 lines) in app/onboarding/wizard/page.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a87d930342d1f4c8", "name": "Commented-code block (8 lines) in app/portal/[venue]/[wedding]/layout.tsx:5", "shortDescription": {"text": "Commented-code block (8 lines) in app/portal/[venue]/[wedding]/layout.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-8fe421b0bd1cb9e4", "name": "Commented-code block (6 lines) in app/v/[slug]/page.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in app/v/[slug]/page.tsx: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-438bb433753d761d", "name": "Commented-code block (5 lines) in lib/security/guards.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/security/guards.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-11b7f3b8604d45ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/security/guards.ts:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/security/guards.ts:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-912d0e0019f8063c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/venue/places-photos.ts:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/venue/places-photos.ts:145"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fec3cf92a6ef5368", "name": "Commented-code block (9 lines) in lib/venue/progress.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in lib/venue/progress.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-f7b0caa531c1218d", "name": "Commented-code block (5 lines) in lib/billing/paystack.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/billing/paystack.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-92115e58603df908", "name": "Commented-code block (7 lines) in lib/billing/charges.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in lib/billing/charges.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-23fbdd0af6b0cb20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/billing/yoco.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/billing/yoco.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d28745442f337fd", "name": "Commented-code block (5 lines) in lib/billing/compute.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in lib/billing/compute.ts:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fae7455117242392", "name": "Commented-code block (6 lines) in lib/invoice/render.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in lib/invoice/render.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-76eb15e9a9665d2f", "name": "Commented-code block (7 lines) in lib/messaging/emailReply.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in lib/messaging/emailReply.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-db08b58f674b0f29", "name": "Commented-code block (5 lines) in lib/messaging/redact.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/messaging/redact.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-29dadb2e7b06ed7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/imports/image-search.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/imports/image-search.ts:14"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c401ee4f230b0330", "name": "Commented-code block (5 lines) in lib/portal/access.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/portal/access.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-3f6019678780a90c", "name": "Commented-code block (5 lines) in lib/portal/templates.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/portal/templates.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}}]}}, "automationDetails": {"id": "repobility/19411"}, "properties": {"repository": "shaunvand/venuely", "repoUrl": "https://github.com/shaunvand/venuely", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-b195ad866162aef7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/WeddingTimelineStrip.tsx:239"}, "properties": {"repobilityId": "253237143b0173cd", "scanner": "scanner-primary", "fingerprint": "b195ad866162aef7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e692ade3d2cebe44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/OverviewCalendar.tsx:363"}, "properties": {"repobilityId": "e57784dbd5c34174", "scanner": "scanner-primary", "fingerprint": "e692ade3d2cebe44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd8a5ac5b2584bbe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/VenueMessagesView.tsx:112"}, "properties": {"repobilityId": "9c88fe1b28e7f32d", "scanner": "scanner-primary", "fingerprint": "bd8a5ac5b2584bbe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40209c93b266a873", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BulkUploader.tsx:800"}, "properties": {"repobilityId": "c2946c8ce951fae6", "scanner": "scanner-primary", "fingerprint": "40209c93b266a873", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d21119285039b22", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/CalendarSubscribe.tsx:14"}, "properties": {"repobilityId": "72c96f5578a78d8a", "scanner": "scanner-primary", "fingerprint": "0d21119285039b22", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4aad5426485a57a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BookingsCalendar.tsx:304"}, "properties": {"repobilityId": "512475f6ba95e885", "scanner": "scanner-primary", "fingerprint": "4aad5426485a57a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf044402e147f7d1", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 components/InventoryManager.tsx:863"}, "properties": {"repobilityId": "f7d82dca9b809cf2", "scanner": "scanner-primary", "fingerprint": "bf044402e147f7d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-95969aa153c4df31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/InventoryManager.tsx:466"}, "properties": {"repobilityId": "7975a4dea3868faf", "scanner": "scanner-primary", "fingerprint": "95969aa153c4df31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5dbbd00cf735633", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/WeddingDocuments.tsx:66"}, "properties": {"repobilityId": "e389aee0f6f646a0", "scanner": "scanner-primary", "fingerprint": "b5dbbd00cf735633", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dae8146cc86d2d75", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/PortalDesigner.tsx:463"}, "properties": {"repobilityId": "3cd96d53d929b735", "scanner": "scanner-primary", "fingerprint": "dae8146cc86d2d75", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3df8b60449f82d8e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/CalendarOpsCards.tsx:71"}, "properties": {"repobilityId": "9b88b3ab555d4e04", "scanner": "scanner-primary", "fingerprint": "3df8b60449f82d8e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8e1d328fd79627f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/page.tsx:550"}, "properties": {"repobilityId": "2a6638282026d4f9", "scanner": "scanner-primary", "fingerprint": "f8e1d328fd79627f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f48e865d680aba99", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/venue/uploads/parse/route.ts:178"}, "properties": {"repobilityId": "8cd77c00b27da1bb", "scanner": "scanner-primary", "fingerprint": "f48e865d680aba99", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9055b785af00078d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/venue/seating/page.tsx:64"}, "properties": {"repobilityId": "837de7b7950f1e48", "scanner": "scanner-primary", "fingerprint": "9055b785af00078d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ae6899862233ded1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/venue/team/page.tsx:158"}, "properties": {"repobilityId": "f5698f5a73cc2785", "scanner": "scanner-primary", "fingerprint": "ae6899862233ded1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9470aaa0fb185f01", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/venue/enquiries/page.tsx:116"}, "properties": {"repobilityId": "3d19fd161e0c251a", "scanner": "scanner-primary", "fingerprint": "9470aaa0fb185f01", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1844cf8c74a9e252", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/venue/weddings/[slug]/page.tsx:614"}, "properties": {"repobilityId": "e2796adc0d9151f6", "scanner": "scanner-primary", "fingerprint": "1844cf8c74a9e252", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d319340ce41d19fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/venue/weddings/[slug]/page.tsx:734"}, "properties": {"repobilityId": "48d1e8957243eefb", "scanner": "scanner-primary", "fingerprint": "d319340ce41d19fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7877b65e6253c063", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/booking/[wedding]/accommodation/ConfirmBookings.tsx:102"}, "properties": {"repobilityId": "59cda3a10ace2afe", "scanner": "scanner-primary", "fingerprint": "7877b65e6253c063", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f57a8bd5a413351", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/portal/[venue]/[wedding]/checklist/page.tsx:36"}, "properties": {"repobilityId": "2b23e26f09e8ecb3", "scanner": "scanner-primary", "fingerprint": "1f57a8bd5a413351", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f9386e3eed2dc2ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/imports/extract-images.ts:102"}, "properties": {"repobilityId": "907fc76ec50b5fc0", "scanner": "scanner-primary", "fingerprint": "f9386e3eed2dc2ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92fffe35a0da3e27", "level": "note", "message": {"text": "Very large file: components/BulkUploader.tsx (1001 lines)"}, "properties": {"repobilityId": "881fee05db578efe", "scanner": "scanner-primary", "fingerprint": "92fffe35a0da3e27", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cd594927ced4e92c", "level": "note", "message": {"text": "Very large file: components/CouplePortal.tsx (935 lines)"}, "properties": {"repobilityId": "7d17c885c8bd7f0d", "scanner": "scanner-primary", "fingerprint": "cd594927ced4e92c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "bc99b6cb63e5b202", "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": "bb3457cb4a13ade1", "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": "2f6b893938e7ff69", "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": "39d5468e9e989845", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "d1f225ceb0d6f75a", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "7f03b3e17961f2a8", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "e12fa2d7240505ff", "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": "c0abe91a5f391857", "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": "79c2c56226fcd3a9", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-71d85e3bfc1ff97a", "level": "note", "message": {"text": "Legacy-named symbol `patbusch_backup` in scripts/patbusch_consolidate.py:134"}, "properties": {"repobilityId": "abc225bfed4cfda9", "scanner": "scanner-primary", "fingerprint": "71d85e3bfc1ff97a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d73694fbbd756e7f", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/brand_auth_emails.py:109"}, "properties": {"repobilityId": "e71860953ede9351", "scanner": "scanner-primary", "fingerprint": "d73694fbbd756e7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-71fa45af3dbd94d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SeatingPlanner.tsx:31"}, "properties": {"repobilityId": "e7ea3f83893afdb2", "scanner": "scanner-primary", "fingerprint": "71fa45af3dbd94d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ae224e9e9233cb6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SeatingPlan.tsx:45"}, "properties": {"repobilityId": "fc49e5bf1c2d4c5e", "scanner": "scanner-primary", "fingerprint": "5ae224e9e9233cb6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-403be16810efe495", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/OverviewCalendar.tsx:10"}, "properties": {"repobilityId": "6e7f5ae075ff655b", "scanner": "scanner-primary", "fingerprint": "403be16810efe495", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b744faf305464993", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ListManager.tsx:41"}, "properties": {"repobilityId": "fd5e76a05af81619", "scanner": "scanner-primary", "fingerprint": "b744faf305464993", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-154e70cac36fbd59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/DocumentManager.tsx:30"}, "properties": {"repobilityId": "08355ceb97470f84", "scanner": "scanner-primary", "fingerprint": "154e70cac36fbd59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75028287a8e51e5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/RoomAllocator.tsx:37"}, "properties": {"repobilityId": "efe176cf55bf7ce7", "scanner": "scanner-primary", "fingerprint": "75028287a8e51e5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92c8989ad3ed29c0", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/LoadingProvider.tsx:3"}, "properties": {"repobilityId": "91d46d84efd58fec", "scanner": "scanner-primary", "fingerprint": "92c8989ad3ed29c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0d75a2ba3bf58db", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/VenuelyLoader.tsx:3"}, "properties": {"repobilityId": "a165318361c6596b", "scanner": "scanner-primary", "fingerprint": "b0d75a2ba3bf58db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-413802cca93ba720", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/RsvpForm.tsx:62"}, "properties": {"repobilityId": "404bb36e40f40547", "scanner": "scanner-primary", "fingerprint": "413802cca93ba720", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f33a4091a07f8b96", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/InspirationBoard.tsx:43"}, "properties": {"repobilityId": "9bf346276c42d465", "scanner": "scanner-primary", "fingerprint": "f33a4091a07f8b96", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-986b0b835f68a5af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/GuestManager.tsx:40"}, "properties": {"repobilityId": "7a94c0bcbb92c632", "scanner": "scanner-primary", "fingerprint": "986b0b835f68a5af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e4f440d163a71a75", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/SpacesSection.tsx:22"}, "properties": {"repobilityId": "caeb041ce1e8a171", "scanner": "scanner-primary", "fingerprint": "e4f440d163a71a75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41521c9d90dc6a09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SpacesSection.tsx:63"}, "properties": {"repobilityId": "74f96ec4b8b97271", "scanner": "scanner-primary", "fingerprint": "41521c9d90dc6a09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5fb411244ba6dd9c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/TimelineBoard.tsx:45"}, "properties": {"repobilityId": "8ade7f547bd87ff6", "scanner": "scanner-primary", "fingerprint": "5fb411244ba6dd9c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-963b4bf17ce15999", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/YourVenueManager.tsx:132"}, "properties": {"repobilityId": "04205809cf413258", "scanner": "scanner-primary", "fingerprint": "963b4bf17ce15999", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5eafa90bb37a5401", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/SuppliersManager.tsx:22"}, "properties": {"repobilityId": "aaaaeb4d87a0bbb4", "scanner": "scanner-primary", "fingerprint": "5eafa90bb37a5401", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15da67e04ab36d60", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/BudgetBoard.tsx:20"}, "properties": {"repobilityId": "ad56547278f28539", "scanner": "scanner-primary", "fingerprint": "15da67e04ab36d60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a1ebad0ac5059b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/WeddingDocuments.tsx:23"}, "properties": {"repobilityId": "15fd29452ba97000", "scanner": "scanner-primary", "fingerprint": "2a1ebad0ac5059b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3eef33b7f402769", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/ChecklistBoard.tsx:31"}, "properties": {"repobilityId": "a918821fa2ecb6b2", "scanner": "scanner-primary", "fingerprint": "a3eef33b7f402769", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49d0f3bc9d84841f", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/SetupVenueForm.tsx:302"}, "properties": {"repobilityId": "351973f2dac6aa87", "scanner": "scanner-primary", "fingerprint": "49d0f3bc9d84841f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15349a7c4b4fabe1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/RemindersManager.tsx:28"}, "properties": {"repobilityId": "91b541c18c4d2797", "scanner": "scanner-primary", "fingerprint": "15349a7c4b4fabe1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd9e7633e3334c39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/GuestInvites.tsx:31"}, "properties": {"repobilityId": "2d1c99eae944c818", "scanner": "scanner-primary", "fingerprint": "bd9e7633e3334c39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c478a54d715a5c4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/FloorPlanner.tsx:21"}, "properties": {"repobilityId": "db957c4669a56b59", "scanner": "scanner-primary", "fingerprint": "c478a54d715a5c4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4c6d1760afb9de6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/FloorPlanner.tsx:49"}, "properties": {"repobilityId": "1199490b94e4e785", "scanner": "scanner-primary", "fingerprint": "e4c6d1760afb9de6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-988ed76ceea0042e", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/SmartImportOverlay.tsx:3"}, "properties": {"repobilityId": "84a27a0b90b3b614", "scanner": "scanner-primary", "fingerprint": "988ed76ceea0042e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6adceb224c463759", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/CouplePortal.tsx:365"}, "properties": {"repobilityId": "dd7db07859d24ab7", "scanner": "scanner-primary", "fingerprint": "6adceb224c463759", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3155b8ea856587b9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/CouplePortal.tsx:335"}, "properties": {"repobilityId": "9ded6f439cfa3e5a", "scanner": "scanner-primary", "fingerprint": "3155b8ea856587b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f95a3ae67fd8726e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/PaymentsManager.tsx:31"}, "properties": {"repobilityId": "4ad2563317e1c835", "scanner": "scanner-primary", "fingerprint": "f95a3ae67fd8726e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1cd24e3a4ac245c7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/CoupleMessages.tsx:163"}, "properties": {"repobilityId": "26d7f09ac2440825", "scanner": "scanner-primary", "fingerprint": "1cd24e3a4ac245c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f9d9182e8aa3ea7", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/rsvp/[token]/page.tsx:6"}, "properties": {"repobilityId": "8e278cf1646727ea", "scanner": "scanner-primary", "fingerprint": "9f9d9182e8aa3ea7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fac3826f058c31a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/enquiry/route.ts:4"}, "properties": {"repobilityId": "eb361994dfd60e82", "scanner": "scanner-primary", "fingerprint": "8fac3826f058c31a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54412090e14e95f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/image-search/route.ts:34"}, "properties": {"repobilityId": "7d865a8a341c078d", "scanner": "scanner-primary", "fingerprint": "54412090e14e95f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b4b6e302ef644dc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/import/route.ts:6"}, "properties": {"repobilityId": "5d1382905ef2ab40", "scanner": "scanner-primary", "fingerprint": "b4b6e302ef644dc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dec8b4af9cf78361", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/venue/image-track-download/route.ts:21"}, "properties": {"repobilityId": "2a496c239d40b80f", "scanner": "scanner-primary", "fingerprint": "dec8b4af9cf78361", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02403620614e0f4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/paystack/checkout/route.ts:9"}, "properties": {"repobilityId": "02de9296b2d3e6b8", "scanner": "scanner-primary", "fingerprint": "02403620614e0f4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9cc14d2d0af8e9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cron/reminders/route.ts:64"}, "properties": {"repobilityId": "722920d23eeffb95", "scanner": "scanner-primary", "fingerprint": "f9cc14d2d0af8e9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03c3c3282c618541", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/wedding/[slug]/accommodation/route.ts:119"}, "properties": {"repobilityId": "608595737c7aade5", "scanner": "scanner-primary", "fingerprint": "03c3c3282c618541", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bf075519c2e06b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/yoco/webhook/route.ts:14"}, "properties": {"repobilityId": "f5760d66a9161617", "scanner": "scanner-primary", "fingerprint": "7bf075519c2e06b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bcd2a34f9db68f1", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/venue/page.tsx:50"}, "properties": {"repobilityId": "96ef08f0b76bf5eb", "scanner": "scanner-primary", "fingerprint": "9bcd2a34f9db68f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f8a9c63eaed809d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/venue/team/actions.ts:31"}, "properties": {"repobilityId": "a0228861c5309922", "scanner": "scanner-primary", "fingerprint": "9f8a9c63eaed809d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e55340639f5283d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/venue/enquiries/actions.ts:29"}, "properties": {"repobilityId": "07aeddae89b3ac39", "scanner": "scanner-primary", "fingerprint": "5e55340639f5283d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2790c51a7eb7270d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/venue/weddings/actions.ts:15"}, "properties": {"repobilityId": "5164475011de45cc", "scanner": "scanner-primary", "fingerprint": "2790c51a7eb7270d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7922f5af89c98d3", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/venue/weddings/reminder-actions.ts:3"}, "properties": {"repobilityId": "dbb22772efaf9607", "scanner": "scanner-primary", "fingerprint": "c7922f5af89c98d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-150d8dad35b121b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/venue/weddings/[slug]/actions.ts:16"}, "properties": {"repobilityId": "c6d8d0377fcefe2f", "scanner": "scanner-primary", "fingerprint": "150d8dad35b121b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f10d8c66a40021d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/venue/your-venue/page.tsx:35"}, "properties": {"repobilityId": "9f3f9167dd0711db", "scanner": "scanner-primary", "fingerprint": "f10d8c66a40021d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31a1228cc4eb3e93", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/venue/areas/actions.ts:128"}, "properties": {"repobilityId": "e82d542c0b34e5c8", "scanner": "scanner-primary", "fingerprint": "31a1228cc4eb3e93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb7fa8bad4cb2ad8", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/venue/calendar/actions.ts:9"}, "properties": {"repobilityId": "8428f024a2143d52", "scanner": "scanner-primary", "fingerprint": "eb7fa8bad4cb2ad8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd3a04cd43166064", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/venue/calendar/page.tsx:101"}, "properties": {"repobilityId": "d71983d24047c2a5", "scanner": "scanner-primary", "fingerprint": "cd3a04cd43166064", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f721ff5dd55f9811", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/booking/[wedding]/accommodation/ConfirmBookings.tsx:13"}, "properties": {"repobilityId": "30f675570e171ab1", "scanner": "scanner-primary", "fingerprint": "f721ff5dd55f9811", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-815ae045543adcad", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/billing/actions.ts:3"}, "properties": {"repobilityId": "6f99cbc2cca299e9", "scanner": "scanner-primary", "fingerprint": "815ae045543adcad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc67142d757c853d", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/onboarding/wizard/WizardClient.tsx:193"}, "properties": {"repobilityId": "45ed6f5880544684", "scanner": "scanner-primary", "fingerprint": "dc67142d757c853d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acd0894f166bc6fe", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/onboarding/wizard/page.tsx:13"}, "properties": {"repobilityId": "b2fadf40cee67154", "scanner": "scanner-primary", "fingerprint": "acd0894f166bc6fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a87d930342d1f4c8", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/portal/[venue]/[wedding]/layout.tsx:5"}, "properties": {"repobilityId": "a5333d29d1288d09", "scanner": "scanner-primary", "fingerprint": "a87d930342d1f4c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fe421b0bd1cb9e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/v/[slug]/page.tsx:11"}, "properties": {"repobilityId": "ba09fa97cfb55547", "scanner": "scanner-primary", "fingerprint": "8fe421b0bd1cb9e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-438bb433753d761d", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/security/guards.ts:1"}, "properties": {"repobilityId": "a5f42dfed92af4de", "scanner": "scanner-primary", "fingerprint": "438bb433753d761d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11b7f3b8604d45ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/security/guards.ts:99"}, "properties": {"repobilityId": "31877b63e549d17a", "scanner": "scanner-primary", "fingerprint": "11b7f3b8604d45ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-912d0e0019f8063c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/venue/places-photos.ts:145"}, "properties": {"repobilityId": "635e853008b4d0ac", "scanner": "scanner-primary", "fingerprint": "912d0e0019f8063c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fec3cf92a6ef5368", "level": "none", "message": {"text": "Commented-code block (9 lines) in lib/venue/progress.ts:3"}, "properties": {"repobilityId": "72e393247c1c7d0e", "scanner": "scanner-primary", "fingerprint": "fec3cf92a6ef5368", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7b0caa531c1218d", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/billing/paystack.ts:1"}, "properties": {"repobilityId": "a25b38de1e874bf7", "scanner": "scanner-primary", "fingerprint": "f7b0caa531c1218d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92115e58603df908", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/billing/charges.ts:1"}, "properties": {"repobilityId": "f2dcf814e83c3171", "scanner": "scanner-primary", "fingerprint": "92115e58603df908", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23fbdd0af6b0cb20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/billing/yoco.ts:28"}, "properties": {"repobilityId": "8c407956630ccd5e", "scanner": "scanner-primary", "fingerprint": "23fbdd0af6b0cb20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d28745442f337fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/billing/compute.ts:24"}, "properties": {"repobilityId": "e010772ae152372e", "scanner": "scanner-primary", "fingerprint": "2d28745442f337fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fae7455117242392", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/invoice/render.ts:1"}, "properties": {"repobilityId": "9dac3a086218152d", "scanner": "scanner-primary", "fingerprint": "fae7455117242392", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76eb15e9a9665d2f", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/messaging/emailReply.ts:3"}, "properties": {"repobilityId": "115941b1ba162850", "scanner": "scanner-primary", "fingerprint": "76eb15e9a9665d2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db08b58f674b0f29", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/messaging/redact.ts:1"}, "properties": {"repobilityId": "25b1dda97bab1eee", "scanner": "scanner-primary", "fingerprint": "db08b58f674b0f29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29dadb2e7b06ed7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/imports/image-search.ts:14"}, "properties": {"repobilityId": "5b1e84d174037533", "scanner": "scanner-primary", "fingerprint": "29dadb2e7b06ed7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c401ee4f230b0330", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/portal/access.ts:1"}, "properties": {"repobilityId": "b9610a814e49a72f", "scanner": "scanner-primary", "fingerprint": "c401ee4f230b0330", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f6019678780a90c", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/portal/templates.ts:1"}, "properties": {"repobilityId": "91486f865c4459de", "scanner": "scanner-primary", "fingerprint": "3f6019678780a90c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}