{"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-93074667378f2204", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AppSwitcher.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AppSwitcher.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5add1d3554e2afc9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/Layout.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Layout.tsx:91"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7f3ee6c3e4168c0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard.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-70628a763c4e0cd6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/History.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/History.tsx:244"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-935db70c6d7cb76a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Inbox.tsx:507", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Inbox.tsx:507"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12bc39be929740bb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Community.tsx:408", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Community.tsx:408"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e089d70f2cf2a52", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Lists.tsx:722", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Lists.tsx:722"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-628711e9403fcae4", "name": "Possible secret in .claude/skills/stake-suite-design/ui_kits/magnify/index.html", "shortDescription": {"text": "Possible secret in .claude/skills/stake-suite-design/ui_kits/magnify/index.html"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-77198786682838fa", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/refresh-twilio-rates/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/refresh-twilio-rates/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5340f031dca27d8f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/dispatch-scheduled-messages/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dispatch-scheduled-messages/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-855e5a0552059c1e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/gather-send-invite-sms/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gather-send-invite-sms/index.ts:19"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c826e0ed887b259f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/import-contacts/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/import-contacts/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-18290d5a2d430fe3", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-message/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-message/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d47dfa5a92bad3b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-create/index.ts:3", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-create/index.ts:3"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8a005e75b4ebddd", "name": "Possible secret in src/pages/Login.tsx", "shortDescription": {"text": "Possible secret in src/pages/Login.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-301b6c576e4d7b12", "name": "Very large file: src/pages/Compose.tsx (1275 lines)", "shortDescription": {"text": "Very large file: src/pages/Compose.tsx (1275 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 59 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 41 placeholder/mock markers across 12 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. 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, ci. 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-da38437d4ab35e23", "name": "Commented-code block (6 lines) in supabase/functions/refresh-twilio-rates/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/refresh-twilio-rates/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d7871d1e00effc7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/refresh-twilio-rates/index.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/refresh-twilio-rates/index.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-682e84e906e6106a", "name": "Commented-code block (6 lines) in supabase/functions/dispatch-scheduled-messages/index.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/dispatch-scheduled-messages/index.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-966dfd0742b2854e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dispatch-scheduled-messages/index.ts:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dispatch-scheduled-messages/index.ts:227"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ae06500ea9d6738", "name": "Commented-code block (5 lines) in supabase/functions/gather-send-invite-sms/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/gather-send-invite-sms/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85d901f949d60da8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gather-send-invite-sms/index.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gather-send-invite-sms/index.ts:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4114d230f7fa0b5c", "name": "Commented-code block (6 lines) in supabase/functions/twilio-inbound/index.ts:19", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/twilio-inbound/index.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83ed4c0b70b085d4", "name": "Commented-code block (5 lines) in supabase/functions/import-contacts/index.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/import-contacts/index.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29824c099656d657", "name": "Commented-code block (5 lines) in supabase/functions/send-message/index.ts:201", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/send-message/index.ts:201"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce196617bd0c1976", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-message/index.ts:347", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-message/index.ts:347"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e95a5cf99093a365", "name": "Commented-code block (6 lines) in supabase/functions/sync-roles-to-shared/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/sync-roles-to-shared/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51e033bf7291747a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-roles-to-shared/index.ts:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-roles-to-shared/index.ts:89"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d288a319eebdff0", "name": "Commented-code block (5 lines) in src/components/SuggestionFAB.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/SuggestionFAB.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-c14d073bc275d577", "name": "Commented-code block (6 lines) in src/components/AppSwitcher.tsx:62", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/AppSwitcher.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37d65c8bd243c711", "name": "Legacy-named symbol `tidings_push_banner_dismissed_v1` in src/components/EnableNotificationsBanner.tsx:5", "shortDescription": {"text": "Legacy-named symbol `tidings_push_banner_dismissed_v1` in src/components/EnableNotificationsBanner.tsx:5"}, "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-1d97f3ec6b8d4769", "name": "Commented-code block (6 lines) in src/contexts/DemoModeContext.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/contexts/DemoModeContext.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fe20271e4bfc3e2", "name": "Commented-code block (6 lines) in src/lib/gatherSharedSupabase.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/gatherSharedSupabase.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-9b729bbf2e64d501", "name": "Commented-code block (6 lines) in src/lib/pdf-parser.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/pdf-parser.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-42f513eeea76a31c", "name": "Commented-code block (8 lines) in src/lib/search.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/search.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-e7b3431e7fa09807", "name": "Commented-code block (5 lines) in src/lib/supabase.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/supabase.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-801c3515451b197e", "name": "Commented-code block (5 lines) in src/pages/Admin.tsx:50", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Admin.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-a95d8bd700279d10", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Compose.tsx:240", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Compose.tsx:240"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bd0c4c0dd7a24795", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/InviteAccept.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/InviteAccept.tsx:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f1bec1fd65c0879", "name": "Frontend route `/reset-password` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-70506d14ae643b2c", "name": "Frontend route `/invite/:token` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/invite/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a8131c69981bf99", "name": "Frontend route `stake` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `stake` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d3460f174ba8cb7", "name": "Frontend route `community` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `community` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d25997c42ea0b08", "name": "Frontend route `lists` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `lists` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb7a84a12f44eb43", "name": "Frontend route `compose` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `compose` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0522f6760df0394", "name": "Frontend route `inbox` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `inbox` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85ae267453984a79", "name": "Frontend route `history` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `history` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c5fb8eea6cbc8ba", "name": "Frontend route `admin` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `admin` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11feb210c2f50b50", "name": "Frontend route `profile` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `profile` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3915b0fcfd0aca54", "name": "Frontend route `guide` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `guide` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0430322844e085f", "name": "Frontend route `release-notes` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `release-notes` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19234"}, "properties": {"repository": "sendscott-del/tidings", "repoUrl": "https://github.com/sendscott-del/tidings", "branch": "main"}, "results": [{"ruleId": "scanner-93074667378f2204", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AppSwitcher.tsx:131"}, "properties": {"repobilityId": "f793c8dd0f5d6185", "scanner": "scanner-primary", "fingerprint": "93074667378f2204", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5add1d3554e2afc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Layout.tsx:91"}, "properties": {"repobilityId": "daab328f104c4d01", "scanner": "scanner-primary", "fingerprint": "5add1d3554e2afc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7f3ee6c3e4168c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard.tsx:102"}, "properties": {"repobilityId": "ef6dffe971709383", "scanner": "scanner-primary", "fingerprint": "e7f3ee6c3e4168c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70628a763c4e0cd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/History.tsx:244"}, "properties": {"repobilityId": "9c78922c86c80895", "scanner": "scanner-primary", "fingerprint": "70628a763c4e0cd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-935db70c6d7cb76a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Inbox.tsx:507"}, "properties": {"repobilityId": "dc115ae1a699bd83", "scanner": "scanner-primary", "fingerprint": "935db70c6d7cb76a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-12bc39be929740bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Community.tsx:408"}, "properties": {"repobilityId": "872974a5ab3271f0", "scanner": "scanner-primary", "fingerprint": "12bc39be929740bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e089d70f2cf2a52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Lists.tsx:722"}, "properties": {"repobilityId": "e2454c4ef0e7ba0f", "scanner": "scanner-primary", "fingerprint": "7e089d70f2cf2a52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-628711e9403fcae4", "level": "error", "message": {"text": "Possible secret in .claude/skills/stake-suite-design/ui_kits/magnify/index.html"}, "properties": {"repobilityId": "30244cd81fa80dcf", "scanner": "scanner-primary", "fingerprint": "628711e9403fcae4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/stake-suite-design/ui_kits/magnify/index.html"}, "region": {"startLine": 379}}}]}, {"ruleId": "scanner-628711e9403fcae4", "level": "error", "message": {"text": "Possible secret in .claude/skills/stake-suite-design/ui_kits/magnify/index.html"}, "properties": {"repobilityId": "30244cd81fa80dcf", "scanner": "scanner-primary", "fingerprint": "628711e9403fcae4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/stake-suite-design/ui_kits/magnify/index.html"}, "region": {"startLine": 400}}}]}, {"ruleId": "scanner-77198786682838fa", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/refresh-twilio-rates/index.ts:16"}, "properties": {"repobilityId": "78c9278f978b4b40", "scanner": "scanner-primary", "fingerprint": "77198786682838fa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/refresh-twilio-rates/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-5340f031dca27d8f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/dispatch-scheduled-messages/index.ts:4"}, "properties": {"repobilityId": "bed1b9db8387cc7d", "scanner": "scanner-primary", "fingerprint": "5340f031dca27d8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/dispatch-scheduled-messages/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-855e5a0552059c1e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gather-send-invite-sms/index.ts:19"}, "properties": {"repobilityId": "ae552de3f34e1882", "scanner": "scanner-primary", "fingerprint": "855e5a0552059c1e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/gather-send-invite-sms/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-c826e0ed887b259f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/import-contacts/index.ts:4"}, "properties": {"repobilityId": "90e116fdf9632718", "scanner": "scanner-primary", "fingerprint": "c826e0ed887b259f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/import-contacts/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-18290d5a2d430fe3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-message/index.ts:4"}, "properties": {"repobilityId": "bbbf6fbf271b00eb", "scanner": "scanner-primary", "fingerprint": "18290d5a2d430fe3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-message/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-8d47dfa5a92bad3b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-create/index.ts:3"}, "properties": {"repobilityId": "004e6d99aebf62ee", "scanner": "scanner-primary", "fingerprint": "8d47dfa5a92bad3b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/invite-create/index.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-d8a005e75b4ebddd", "level": "error", "message": {"text": "Possible secret in src/pages/Login.tsx"}, "properties": {"repobilityId": "1054bef8c5f1d51c", "scanner": "scanner-primary", "fingerprint": "d8a005e75b4ebddd", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/Login.tsx"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-301b6c576e4d7b12", "level": "note", "message": {"text": "Very large file: src/pages/Compose.tsx (1275 lines)"}, "properties": {"repobilityId": "e8a4845a50270341", "scanner": "scanner-primary", "fingerprint": "301b6c576e4d7b12", "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": "2d05fdb617de2336", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "324aaa3025ac06f5", "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": "ca968a853c6dc095", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "aa39f161670ce11d", "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": "dc8d14e8620cc98e", "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": "4bd5c5b117c8544b", "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": "aaa723375e3c99b1", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-da38437d4ab35e23", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/refresh-twilio-rates/index.ts:1"}, "properties": {"repobilityId": "913ad20584a85238", "scanner": "scanner-primary", "fingerprint": "da38437d4ab35e23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d7871d1e00effc7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/refresh-twilio-rates/index.ts:58"}, "properties": {"repobilityId": "e70bdf82e1d5aab4", "scanner": "scanner-primary", "fingerprint": "4d7871d1e00effc7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-682e84e906e6106a", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/dispatch-scheduled-messages/index.ts:12"}, "properties": {"repobilityId": "82ed5db9981dc161", "scanner": "scanner-primary", "fingerprint": "682e84e906e6106a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-966dfd0742b2854e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/dispatch-scheduled-messages/index.ts:227"}, "properties": {"repobilityId": "c1eda15db604db2d", "scanner": "scanner-primary", "fingerprint": "966dfd0742b2854e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ae06500ea9d6738", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/gather-send-invite-sms/index.ts:1"}, "properties": {"repobilityId": "ba2f2ebde987eb33", "scanner": "scanner-primary", "fingerprint": "2ae06500ea9d6738", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85d901f949d60da8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gather-send-invite-sms/index.ts:75"}, "properties": {"repobilityId": "5dfcc055782d7694", "scanner": "scanner-primary", "fingerprint": "85d901f949d60da8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4114d230f7fa0b5c", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/twilio-inbound/index.ts:19"}, "properties": {"repobilityId": "ad9d6a74d5307a56", "scanner": "scanner-primary", "fingerprint": "4114d230f7fa0b5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83ed4c0b70b085d4", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/import-contacts/index.ts:115"}, "properties": {"repobilityId": "bf4effe9cbf52c0f", "scanner": "scanner-primary", "fingerprint": "83ed4c0b70b085d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29824c099656d657", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/send-message/index.ts:201"}, "properties": {"repobilityId": "ea773ebae9a9a3dc", "scanner": "scanner-primary", "fingerprint": "29824c099656d657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce196617bd0c1976", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-message/index.ts:347"}, "properties": {"repobilityId": "e317fece83d82607", "scanner": "scanner-primary", "fingerprint": "ce196617bd0c1976", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e95a5cf99093a365", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/sync-roles-to-shared/index.ts:1"}, "properties": {"repobilityId": "aef699b8d6fafad8", "scanner": "scanner-primary", "fingerprint": "e95a5cf99093a365", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51e033bf7291747a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-roles-to-shared/index.ts:89"}, "properties": {"repobilityId": "cee52f68ceffcf86", "scanner": "scanner-primary", "fingerprint": "51e033bf7291747a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d288a319eebdff0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/SuggestionFAB.tsx:11"}, "properties": {"repobilityId": "155a13d1d0474a80", "scanner": "scanner-primary", "fingerprint": "6d288a319eebdff0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c14d073bc275d577", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/AppSwitcher.tsx:62"}, "properties": {"repobilityId": "a18e2ffc7e78d4bb", "scanner": "scanner-primary", "fingerprint": "c14d073bc275d577", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37d65c8bd243c711", "level": "note", "message": {"text": "Legacy-named symbol `tidings_push_banner_dismissed_v1` in src/components/EnableNotificationsBanner.tsx:5"}, "properties": {"repobilityId": "bcea7c940a9c3bc0", "scanner": "scanner-primary", "fingerprint": "37d65c8bd243c711", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1d97f3ec6b8d4769", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/contexts/DemoModeContext.tsx:4"}, "properties": {"repobilityId": "1a979b4d4443ac56", "scanner": "scanner-primary", "fingerprint": "1d97f3ec6b8d4769", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fe20271e4bfc3e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/gatherSharedSupabase.ts:3"}, "properties": {"repobilityId": "50c41e7cb27fd32b", "scanner": "scanner-primary", "fingerprint": "0fe20271e4bfc3e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b729bbf2e64d501", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/pdf-parser.ts:1"}, "properties": {"repobilityId": "6368dc6cda7ac60b", "scanner": "scanner-primary", "fingerprint": "9b729bbf2e64d501", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42f513eeea76a31c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/search.ts:3"}, "properties": {"repobilityId": "1c4930bc72a2412d", "scanner": "scanner-primary", "fingerprint": "42f513eeea76a31c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7b3431e7fa09807", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/supabase.ts:8"}, "properties": {"repobilityId": "bf58a95280ab49da", "scanner": "scanner-primary", "fingerprint": "e7b3431e7fa09807", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-801c3515451b197e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Admin.tsx:50"}, "properties": {"repobilityId": "9d712278a502219b", "scanner": "scanner-primary", "fingerprint": "801c3515451b197e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a95d8bd700279d10", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Compose.tsx:240"}, "properties": {"repobilityId": "b91eeed7269db8c4", "scanner": "scanner-primary", "fingerprint": "a95d8bd700279d10", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd0c4c0dd7a24795", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/InviteAccept.tsx:75"}, "properties": {"repobilityId": "7e43c731922fe92e", "scanner": "scanner-primary", "fingerprint": "bd0c4c0dd7a24795", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f1bec1fd65c0879", "level": "warning", "message": {"text": "Frontend route `/reset-password` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "934747c714145754", "scanner": "scanner-primary", "fingerprint": "7f1bec1fd65c0879", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-70506d14ae643b2c", "level": "warning", "message": {"text": "Frontend route `/invite/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a14c9d35861a345f", "scanner": "scanner-primary", "fingerprint": "70506d14ae643b2c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4a8131c69981bf99", "level": "warning", "message": {"text": "Frontend route `stake` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "703a9baadd225f34", "scanner": "scanner-primary", "fingerprint": "4a8131c69981bf99", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4d3460f174ba8cb7", "level": "warning", "message": {"text": "Frontend route `community` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "ae70280283d71383", "scanner": "scanner-primary", "fingerprint": "4d3460f174ba8cb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3d25997c42ea0b08", "level": "warning", "message": {"text": "Frontend route `lists` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "9ec73c65ede0da20", "scanner": "scanner-primary", "fingerprint": "3d25997c42ea0b08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-eb7a84a12f44eb43", "level": "warning", "message": {"text": "Frontend route `compose` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "446d95e45ddcf8eb", "scanner": "scanner-primary", "fingerprint": "eb7a84a12f44eb43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d0522f6760df0394", "level": "warning", "message": {"text": "Frontend route `inbox` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "931346a4c1b63171", "scanner": "scanner-primary", "fingerprint": "d0522f6760df0394", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-85ae267453984a79", "level": "warning", "message": {"text": "Frontend route `history` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f2f487740b3be6cc", "scanner": "scanner-primary", "fingerprint": "85ae267453984a79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5c5fb8eea6cbc8ba", "level": "warning", "message": {"text": "Frontend route `admin` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "e4d3d94b837b99bb", "scanner": "scanner-primary", "fingerprint": "5c5fb8eea6cbc8ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-11feb210c2f50b50", "level": "warning", "message": {"text": "Frontend route `profile` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "96c44ef5fce161fb", "scanner": "scanner-primary", "fingerprint": "11feb210c2f50b50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3915b0fcfd0aca54", "level": "warning", "message": {"text": "Frontend route `guide` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f0baa4560a7736df", "scanner": "scanner-primary", "fingerprint": "3915b0fcfd0aca54", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b0430322844e085f", "level": "warning", "message": {"text": "Frontend route `release-notes` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "48bbabf214fc2ca5", "scanner": "scanner-primary", "fingerprint": "b0430322844e085f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}