{"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-7377e1da6a7136a5", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a5ce691332f924c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/test-room/DeveloperPanel.jsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/test-room/DeveloperPanel.jsx:51"}, "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-be03d327937a14e0", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/walkthrough/renderers/ExhibitionRoom.jsx:77", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/walkthrough/renderers/ExhibitionRoom.jsx:77"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23ae09acb6861869", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/walkthrough/renderers/ThreeDWorldRoom.jsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/walkthrough/renderers/ThreeDWorldRoom.jsx:236"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfc493da020d3e86", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.jsx:61", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.jsx:61"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-636c095bfb7b971a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminExhibits.jsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminExhibits.jsx: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-da391be29e3ddadd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminTickets.jsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminTickets.jsx:52"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f7f3842b15c1751", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/RouteIntegrityScanner.jsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/RouteIntegrityScanner.jsx: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-56ec9341b92472bf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/TenantSwitcher.jsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/TenantSwitcher.jsx:34"}, "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-1f175beca837f10f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/NotificationBell.jsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/NotificationBell.jsx:109"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-997123819e3c9306", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminArchitectureBlueprint.jsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminArchitectureBlueprint.jsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05c5465e8393242c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/MasterAdminSidebar.jsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/MasterAdminSidebar.jsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4eefe792e0baedd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/UnzippedStoragePanel.jsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/UnzippedStoragePanel.jsx:34"}, "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-555ce9f2333c3bf3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/ZipQuickfillOverlay.jsx:49", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/ZipQuickfillOverlay.jsx:49"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f45710fc9467860a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/MediaUploadStatus.jsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/MediaUploadStatus.jsx:35"}, "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-83edbcabf3c9ecae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/type-editors/ThreeDWorldBuilder.js", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/type-editors/ThreeDWorldBuilder.jsx:508"}, "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-3a427d1175b04aa8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelLiveFeed.jsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelLiveFeed.jsx:37"}, "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-27ba26f3b8c6dbf0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelRouteMatrix.jsx:28", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelRouteMatrix.jsx:28"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abaad1b1edc4ef30", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelCoverageMap.jsx:21", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelCoverageMap.jsx:21"}, "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-4002f3990b4c6517", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelIssueTable.jsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelIssueTable.jsx:31"}, "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-9f764630e0c5696c", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/onboarding/visuals/ScoversVisualKit.jsx:19", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/onboarding/visuals/ScoversVisualKit.jsx:19"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33828d70563efea0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenant-admin/TenantAdminSidebar.jsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenant-admin/TenantAdminSidebar.jsx:104"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a6b2a1e81f7bbc7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Passport.jsx:138", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Passport.jsx:138"}, "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-0cb14f341942e279", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/Dashboard.jsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/Dashboard.jsx:140"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bf41a920d6cf1f9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/modules/ModuleAnalytics.jsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/modules/ModuleAnalytics.jsx:128"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de2b2760a159d2c2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/tenant-admin/MuseumPreviewEditor.jsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/tenant-admin/MuseumPreviewEditor.jsx:192"}, "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-70d3a303e5448f24", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/cors.ts:2", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/cors.ts:2"}, "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-24fda2f1df3872b0", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.jsx:61", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.jsx:61"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2e387dd1b89d6e9", "name": "Insecure pattern 'local_storage_auth_token' in src/components/accessibility/ExperienceControls.jsx:33", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/accessibility/ExperienceControls.jsx:33"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f4c232b4aa78fc9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77166cbd46fcd8e4", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de53ac274e5b4ecf", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37716d9c0a33ad5c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f630d8dbedab3948", "name": "Very large file: src/components/admin/walkthrough/type-editors/ThreeDWorldBuilder.jsx (833 lines)", "shortDescription": {"text": "Very large file: src/components/admin/walkthrough/type-editors/ThreeDWorldBuilder.jsx (833 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-0451dd17e2f5e29f", "name": "Very large file: src/lib/three-d-world-validation.js (837 lines)", "shortDescription": {"text": "Very large file: src/lib/three-d-world-validation.js (837 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": "16 test file(s) for 473 source file(s) (ratio 0.03). 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 7 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 171 placeholder/mock markers across 62 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-381b7e75192e806b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/manage-billing/index.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/manage-billing/index.ts:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5fb6d3c2a9ef88e0", "name": "Commented-code block (6 lines) in supabase/functions/cultural-guide/index.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/cultural-guide/index.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4cc3625b9b5c018a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qa-agent/index.ts:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qa-agent/index.ts:97"}, "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-50565eb5e1bf4c19", "name": "Commented-code block (7 lines) in supabase/functions/notify-inquiry/index.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/notify-inquiry/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8ba9b09b1899136", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/notify-inquiry/index.ts:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/notify-inquiry/index.ts:108"}, "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-dfb4a95bc2038bde", "name": "Commented-code block (10 lines) in supabase/functions/visitor-data/index.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/visitor-data/index.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f932e76b29b02d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/franchise-checkout/index.ts:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/franchise-checkout/index.ts:90"}, "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-febe1c369204600b", "name": "Commented-code block (5 lines) in supabase/functions/notify-launch/index.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/notify-launch/index.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ac38cf3540ff388", "name": "Commented-code block (6 lines) in supabase/functions/stripe-webhook/index.ts:179", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/stripe-webhook/index.ts:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2d0e0cea1954a82", "name": "Legacy-named symbol `rollback_skipped_no_backup` in supabase/functions/migrateWalkthroughV3/index.ts:242", "shortDescription": {"text": "Legacy-named symbol `rollback_skipped_no_backup` in supabase/functions/migrateWalkthroughV3/index.ts:242"}, "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-612ab097a77c491d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/stripe-checkout/index.ts:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/stripe-checkout/index.ts:168"}, "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-510690f3c686f3e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/repairWalkthroughMediaLinks/index.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/repairWalkthroughMediaLinks/index.ts: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-4b454b190600e141", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/postOperationalStatusUpdate/index.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/postOperationalStatusUpdate/index.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32377ba22ec59855", "name": "Commented-code block (5 lines) in supabase/functions/_shared/email.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/email.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-bb90b71d72642edd", "name": "Commented-code block (5 lines) in supabase/functions/_shared/supabase-client.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/supabase-client.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-c6beda46d7bfd0a4", "name": "Commented-code block (6 lines) in src/types/three-stub.d.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/types/three-stub.d.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-acaf77d3a80c44ec", "name": "Commented-code block (5 lines) in src/components/walkthrough/ThreeDWorldCanvas.jsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/walkthrough/ThreeDWorldCanvas.jsx: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-aabd3af43ca17e41", "name": "Commented-code block (6 lines) in src/components/tenant/ticketing/TenantTicketJourney.jsx:187", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/tenant/ticketing/TenantTicketJourney.jsx:187"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8bf0058821cfa1e", "name": "Commented-code block (5 lines) in src/lib/visitor-journey.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/visitor-journey.js: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-6ce312b389e8cd9d", "name": "Commented-code block (7 lines) in src/lib/three-d-world-models.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/three-d-world-models.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-932f5b86a618fb91", "name": "Legacy-named symbol `rollback_backup` in src/lib/walkthrough-qa-checklist.js:8", "shortDescription": {"text": "Legacy-named symbol `rollback_backup` in src/lib/walkthrough-qa-checklist.js:8"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03964828975c9985", "name": "Legacy-named symbol `scaverse_home_intro_seen_v2` in src/lib/scaverse-onboarding-content.js:2", "shortDescription": {"text": "Legacy-named symbol `scaverse_home_intro_seen_v2` in src/lib/scaverse-onboarding-content.js:2"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3efdbc10a1942c7", "name": "Commented-code block (6 lines) in src/lib/three-d-world-scene.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/three-d-world-scene.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06fc8f4bd4a68f21", "name": "Commented-code block (5 lines) in src/lib/vendor-pricing.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/vendor-pricing.js: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-d99ffcab4eaedb12", "name": "Commented-code block (5 lines) in src/lib/walkthrough-readiness.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/walkthrough-readiness.js: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-0f6e8ba06ea53e42", "name": "Commented-code block (5 lines) in src/lib/form-protection.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/form-protection.js: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-90986d2bd6d7ff9e", "name": "Legacy-named symbol `deterministic_subject_mask_v1` in src/lib/sprite-image-processing.js:2", "shortDescription": {"text": "Legacy-named symbol `deterministic_subject_mask_v1` in src/lib/sprite-image-processing.js:2"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-042d353d2f89d318", "name": "Commented-code block (5 lines) in src/lib/presale-content.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/presale-content.js: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-5ec7784f3d0d5562", "name": "Legacy-named symbol `scaverse_avatar_visitor_id_v1` in src/lib/avatar-config.js:6", "shortDescription": {"text": "Legacy-named symbol `scaverse_avatar_visitor_id_v1` in src/lib/avatar-config.js:6"}, "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-623dae1b85b89b9d", "name": "Commented-code block (5 lines) in src/lib/three-d-world-examples.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/three-d-world-examples.js: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-fc12016e42a96f7c", "name": "Commented-code block (6 lines) in src/lib/ticket-access.js:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/ticket-access.js:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ead6b3e60770c462", "name": "Commented-code block (7 lines) in src/lib/three-d-world-textures.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/three-d-world-textures.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4eb613e4322103df", "name": "Commented-code block (5 lines) in src/lib/zip-import/constants.js:59", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/zip-import/constants.js:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c67725de363bc392", "name": "Commented-code block (8 lines) in src/pages/Passport.jsx:27", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/Passport.jsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0dbecb2591cbde1f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/AIGuide.jsx:214", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/AIGuide.jsx:214"}, "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-7901c6a7d6d5e8b5", "name": "Commented-code block (6 lines) in src/hooks/useVisitorJourney.js:24", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useVisitorJourney.js: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-b4d7ddee1cab4558", "name": "Commented-code block (6 lines) in src/hooks/useVisitorNotifications.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useVisitorNotifications.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31d0f8ff9189746c", "name": "Legacy-named symbol `scaverse_home_intro_seen_v1` in src/hooks/useFirstVisit.js:3", "shortDescription": {"text": "Legacy-named symbol `scaverse_home_intro_seen_v1` in src/hooks/useFirstVisit.js:3"}, "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-9915dc3f1666b83a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/generateScrollableImageExtension/entry.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/generateScrollableImageExtension/entry.ts:56"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e32fe049de8a27d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/exportToSupabase/entry.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/exportToSupabase/entry.ts:51"}, "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-ff5fe8545f1acffd", "name": "Legacy-named symbol `ai_guide_system_v1` in base44/functions/seedScaverseCivilization/entry.ts:132", "shortDescription": {"text": "Legacy-named symbol `ai_guide_system_v1` in base44/functions/seedScaverseCivilization/entry.ts:132"}, "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-4dfcd131a7af9057", "name": "Legacy-named symbol `rollback_skipped_no_backup` in base44/functions/migrateWalkthroughV3/entry.ts:274", "shortDescription": {"text": "Legacy-named symbol `rollback_skipped_no_backup` in base44/functions/migrateWalkthroughV3/entry.ts:274"}, "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-f23014bc49ff4f05", "name": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/repairWalkthroughMediaLinks/entry.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/repairWalkthroughMediaLinks/entry.ts: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-28f100b462e12d50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/postOperationalStatusUpdate/entry.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/postOperationalStatusUpdate/entry.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3f34842b1e8735a", "name": "Frontend route `/presale` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/presale` has no Link/navigate to it \u2014 src/App.jsx"}, "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-5a8b49b88cc3081d", "name": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 src/App.jsx"}, "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-b240b14bed549d9a", "name": "Frontend route `/admin/music` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/music` has no Link/navigate to it \u2014 src/App.jsx"}, "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-896488aef35a24a9", "name": "Frontend route `/admin/tenant` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/tenant` has no Link/navigate to it \u2014 src/App.jsx"}, "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-979ab440990efec2", "name": "Frontend route `/admin/tenant/:tenantId/tour` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/tenant/:tenantId/tour` has no Link/navigate to it \u2014 src/App.jsx"}, "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-2c0a570498ad3205", "name": "Frontend route `/admin/tenant/:tenantId/begin-tour` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/tenant/:tenantId/begin-tour` has no Link/navigate to it \u2014 src/App.jsx"}, "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-f4678aa441ffdd4f", "name": "Frontend route `/admin/tenant/:tenantId/scene-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/tenant/:tenantId/scene-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-638e6501e958b4fe", "name": "Frontend route `/admin/tenant/:tenantId/tour-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/tenant/:tenantId/tour-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-386b6b74b393d84b", "name": "Frontend route `/admin/tenant/:tenantId/experience-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/tenant/:tenantId/experience-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-552da133c4757727", "name": "Frontend route `/admin/tenant/:tenantId/walkthrough-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/tenant/:tenantId/walkthrough-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-bfa0735dedb77a81", "name": "Frontend route `/museum/:tenantSlug/begin-tour/:walkthroughKey` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/museum/:tenantSlug/begin-tour/:walkthroughKey` has no Link/navigate to it \u2014 src/App.jsx"}, "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-7e1367ad8257b8d1", "name": "Frontend route `/museum/:tenantSlug/walkthrough/:walkthroughKey` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/museum/:tenantSlug/walkthrough/:walkthroughKey` has no Link/navigate to it \u2014 src/App.jsx"}, "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-1621bbedb6d1bae8", "name": "Frontend route `/ai-consulting` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/ai-consulting` has no Link/navigate to it \u2014 src/App.jsx"}, "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-ff1877390e80b4ba", "name": "Frontend route `/museum/:tenantSlug/admin` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/museum/:tenantSlug/admin` has no Link/navigate to it \u2014 src/App.jsx"}, "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-694a47bfc7eced85", "name": "Frontend route `experience` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `experience` has no Link/navigate to it \u2014 src/App.jsx"}, "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-a88c1184ff4488e1", "name": "Frontend route `experience-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `experience-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-5a4dee6d5be6acae", "name": "Frontend route `scene-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `scene-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-a952d6d655ab923b", "name": "Frontend route `tour-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `tour-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-8c8c768b8f303569", "name": "Frontend route `walkthrough-builder` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `walkthrough-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "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-3ca2309e1426c962", "name": "Frontend route `tour` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `tour` has no Link/navigate to it \u2014 src/App.jsx"}, "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-894fefe7c4e8a258", "name": "Frontend route `rooms` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `rooms` has no Link/navigate to it \u2014 src/App.jsx"}, "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-2c122d61ba4f1b53", "name": "Frontend route `stages` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `stages` has no Link/navigate to it \u2014 src/App.jsx"}, "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-2e6847572eeb297e", "name": "Frontend route `vendors` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `vendors` has no Link/navigate to it \u2014 src/App.jsx"}, "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-b6c088e8a2080dcd", "name": "Frontend route `exhibits` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `exhibits` has no Link/navigate to it \u2014 src/App.jsx"}, "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-5f7e5397221ec402", "name": "Frontend route `analytics` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 src/App.jsx"}, "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-0ea0845df069a844", "name": "Frontend route `music` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `music` has no Link/navigate to it \u2014 src/App.jsx"}, "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-d00beeb736857284", "name": "Frontend route `card` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `card` has no Link/navigate to it \u2014 src/App.jsx"}, "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-02d4b4e7749473cc", "name": "Frontend route `preview-media` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `preview-media` has no Link/navigate to it \u2014 src/App.jsx"}, "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-344352b2b4bb8507", "name": "Frontend route `unzipped-storage` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `unzipped-storage` has no Link/navigate to it \u2014 src/App.jsx"}, "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-c69dae1c33a5fa91", "name": "Frontend route `uen` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `uen` has no Link/navigate to it \u2014 src/App.jsx"}, "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-f5b6515d572d260f", "name": "Frontend route `users-access` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `users-access` has no Link/navigate to it \u2014 src/App.jsx"}, "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-25c18440cb915b63", "name": "Frontend route `experience-layer` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `experience-layer` has no Link/navigate to it \u2014 src/App.jsx"}, "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-edb450b29973b30f", "name": "Frontend route `modules` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules` has no Link/navigate to it \u2014 src/App.jsx"}, "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-ba26334a893cd931", "name": "Frontend route `modules/onboarding` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/onboarding` has no Link/navigate to it \u2014 src/App.jsx"}, "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-03715b772486c8c0", "name": "Frontend route `modules/ticketing` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/ticketing` has no Link/navigate to it \u2014 src/App.jsx"}, "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-1f49beea0a44d864", "name": "Frontend route `modules/ai-guide` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/ai-guide` has no Link/navigate to it \u2014 src/App.jsx"}, "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-28f8cf4f8ecc9922", "name": "Frontend route `modules/walkthrough` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/walkthrough` has no Link/navigate to it \u2014 src/App.jsx"}, "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-c13eddadcc6fa73b", "name": "Frontend route `modules/vendors` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/vendors` has no Link/navigate to it \u2014 src/App.jsx"}, "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-b4bd00a658e413ca", "name": "Frontend route `modules/commerce` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/commerce` has no Link/navigate to it \u2014 src/App.jsx"}, "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-5a01475d9130a896", "name": "Frontend route `modules/analytics` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/analytics` has no Link/navigate to it \u2014 src/App.jsx"}, "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-c5460e6217a7f83a", "name": "Frontend route `modules/gamification` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `modules/gamification` has no Link/navigate to it \u2014 src/App.jsx"}, "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-a4affa876d5bb208", "name": "Frontend route `platform-services` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `platform-services` has no Link/navigate to it \u2014 src/App.jsx"}, "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-a136d12656d3702e", "name": "Frontend route `services/experience-config` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `services/experience-config` has no Link/navigate to it \u2014 src/App.jsx"}, "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-dde4add4990a34c1", "name": "Frontend route `services/:serviceKey` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `services/:serviceKey` has no Link/navigate to it \u2014 src/App.jsx"}, "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-4c3383d4d3f4353b", "name": "Frontend route `content-data` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `content-data` has no Link/navigate to it \u2014 src/App.jsx"}, "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-86ce1c2e4bfb30d5", "name": "Frontend route `content/:contentKey` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `content/:contentKey` has no Link/navigate to it \u2014 src/App.jsx"}, "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-f0da4b458fa9e023", "name": "Frontend route `infrastructure` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `infrastructure` has no Link/navigate to it \u2014 src/App.jsx"}, "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-4e2a7ac781cb1f61", "name": "Frontend route `qa-sentinel` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `qa-sentinel` has no Link/navigate to it \u2014 src/App.jsx"}, "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-abd0676c4a1b4fda", "name": "Frontend route `testers-feedback` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `testers-feedback` has no Link/navigate to it \u2014 src/App.jsx"}, "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-79d3a601eb03700e", "name": "Frontend route `media` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `media` has no Link/navigate to it \u2014 src/App.jsx"}, "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-86549c799936258f", "name": "Frontend route `onboardingsong` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `onboardingsong` has no Link/navigate to it \u2014 src/App.jsx"}, "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-97208a9761fea9ec", "name": "Frontend route `pages` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `pages` has no Link/navigate to it \u2014 src/App.jsx"}, "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-fbbaa378732ca473", "name": "Frontend route `tenants` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `tenants` has no Link/navigate to it \u2014 src/App.jsx"}, "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-12a46af8173c78da", "name": "Frontend route `white-label` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `white-label` has no Link/navigate to it \u2014 src/App.jsx"}, "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-e160e769be39a737", "name": "Frontend route `architecture-blueprint` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `architecture-blueprint` has no Link/navigate to it \u2014 src/App.jsx"}, "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-9a876323659809a7", "name": "Frontend route `/ai-guide` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/ai-guide` has no Link/navigate to it \u2014 src/App.jsx"}, "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-bb14d8349f7ebf8a", "name": "Frontend route `/vendors/register` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/vendors/register` has no Link/navigate to it \u2014 src/App.jsx"}, "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-2502a505ec194376", "name": "Frontend route `/vendor-register` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/vendor-register` has no Link/navigate to it \u2014 src/App.jsx"}, "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-76a7b29e08920dd3", "name": "Frontend route `/test-room` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/test-room` has no Link/navigate to it \u2014 src/App.jsx"}, "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-93da0b46e65338b7", "name": "Frontend route `/admin/*` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/admin/*` has no Link/navigate to it \u2014 src/App.jsx"}, "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/19042"}, "properties": {"repository": "scavaiverse-org/reactiverse-import", "repoUrl": "https://github.com/scavaiverse-org/reactiverse-import", "branch": "main"}, "results": [{"ruleId": "scanner-7377e1da6a7136a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/stripe-webhook/index.ts:60"}, "properties": {"repobilityId": "7c738a141c293866", "scanner": "scanner-primary", "fingerprint": "7377e1da6a7136a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a5ce691332f924c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/test-room/DeveloperPanel.jsx:51"}, "properties": {"repobilityId": "0c226253a0b856a5", "scanner": "scanner-primary", "fingerprint": "3a5ce691332f924c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-be03d327937a14e0", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/walkthrough/renderers/ExhibitionRoom.jsx:77"}, "properties": {"repobilityId": "d937074710f41ba8", "scanner": "scanner-primary", "fingerprint": "be03d327937a14e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-23ae09acb6861869", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/walkthrough/renderers/ThreeDWorldRoom.jsx:236"}, "properties": {"repobilityId": "a4fae85dcebfa543", "scanner": "scanner-primary", "fingerprint": "23ae09acb6861869", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cfc493da020d3e86", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.jsx:61"}, "properties": {"repobilityId": "06741639d6020e8c", "scanner": "scanner-primary", "fingerprint": "cfc493da020d3e86", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-636c095bfb7b971a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminExhibits.jsx:102"}, "properties": {"repobilityId": "30fe0b17e49fa9e9", "scanner": "scanner-primary", "fingerprint": "636c095bfb7b971a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da391be29e3ddadd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminTickets.jsx:52"}, "properties": {"repobilityId": "e876682161d3eacf", "scanner": "scanner-primary", "fingerprint": "da391be29e3ddadd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f7f3842b15c1751", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/RouteIntegrityScanner.jsx:66"}, "properties": {"repobilityId": "6de1c230731ba018", "scanner": "scanner-primary", "fingerprint": "2f7f3842b15c1751", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56ec9341b92472bf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/TenantSwitcher.jsx:34"}, "properties": {"repobilityId": "ff6cf7bb7b436817", "scanner": "scanner-primary", "fingerprint": "56ec9341b92472bf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f175beca837f10f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/NotificationBell.jsx:109"}, "properties": {"repobilityId": "9705789f1339d8a6", "scanner": "scanner-primary", "fingerprint": "1f175beca837f10f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-997123819e3c9306", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/AdminArchitectureBlueprint.jsx:183"}, "properties": {"repobilityId": "351e7660ab8100d8", "scanner": "scanner-primary", "fingerprint": "997123819e3c9306", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-05c5465e8393242c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/MasterAdminSidebar.jsx:153"}, "properties": {"repobilityId": "d62e5d1ff0dcb3c7", "scanner": "scanner-primary", "fingerprint": "05c5465e8393242c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4eefe792e0baedd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/UnzippedStoragePanel.jsx:34"}, "properties": {"repobilityId": "d1a86c8d20f636b6", "scanner": "scanner-primary", "fingerprint": "b4eefe792e0baedd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-555ce9f2333c3bf3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/ZipQuickfillOverlay.jsx:49"}, "properties": {"repobilityId": "ab414480520cc12a", "scanner": "scanner-primary", "fingerprint": "555ce9f2333c3bf3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f45710fc9467860a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/MediaUploadStatus.jsx:35"}, "properties": {"repobilityId": "066dcf317ca1a905", "scanner": "scanner-primary", "fingerprint": "f45710fc9467860a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83edbcabf3c9ecae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/walkthrough/type-editors/ThreeDWorldBuilder.jsx:508"}, "properties": {"repobilityId": "e7a0217559338e20", "scanner": "scanner-primary", "fingerprint": "83edbcabf3c9ecae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a427d1175b04aa8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelLiveFeed.jsx:37"}, "properties": {"repobilityId": "88cfeb8e95b441bd", "scanner": "scanner-primary", "fingerprint": "3a427d1175b04aa8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-27ba26f3b8c6dbf0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelRouteMatrix.jsx:28"}, "properties": {"repobilityId": "a7ff66df6faf7c61", "scanner": "scanner-primary", "fingerprint": "27ba26f3b8c6dbf0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abaad1b1edc4ef30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelCoverageMap.jsx:21"}, "properties": {"repobilityId": "1c1dbf84f97dd981", "scanner": "scanner-primary", "fingerprint": "abaad1b1edc4ef30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4002f3990b4c6517", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sentinel/QASentinelIssueTable.jsx:31"}, "properties": {"repobilityId": "18d05ba519b765f6", "scanner": "scanner-primary", "fingerprint": "4002f3990b4c6517", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f764630e0c5696c", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/onboarding/visuals/ScoversVisualKit.jsx:19"}, "properties": {"repobilityId": "ce9f9a6178d5aff0", "scanner": "scanner-primary", "fingerprint": "9f764630e0c5696c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-33828d70563efea0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenant-admin/TenantAdminSidebar.jsx:104"}, "properties": {"repobilityId": "c43e3a206f3caadb", "scanner": "scanner-primary", "fingerprint": "33828d70563efea0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a6b2a1e81f7bbc7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Passport.jsx:138"}, "properties": {"repobilityId": "b51a2f393cb57751", "scanner": "scanner-primary", "fingerprint": "5a6b2a1e81f7bbc7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0cb14f341942e279", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/Dashboard.jsx:140"}, "properties": {"repobilityId": "998ce67a9ed32b50", "scanner": "scanner-primary", "fingerprint": "0cb14f341942e279", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2bf41a920d6cf1f9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/modules/ModuleAnalytics.jsx:128"}, "properties": {"repobilityId": "7954ad2b7c5545c2", "scanner": "scanner-primary", "fingerprint": "2bf41a920d6cf1f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de2b2760a159d2c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/tenant-admin/MuseumPreviewEditor.jsx:192"}, "properties": {"repobilityId": "193d452921f550c8", "scanner": "scanner-primary", "fingerprint": "de2b2760a159d2c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70d3a303e5448f24", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/_shared/cors.ts:2"}, "properties": {"repobilityId": "7c8e268f4e944077", "scanner": "scanner-primary", "fingerprint": "70d3a303e5448f24", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/_shared/cors.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-24fda2f1df3872b0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.jsx:61"}, "properties": {"repobilityId": "b0b8211549be2e15", "scanner": "scanner-primary", "fingerprint": "24fda2f1df3872b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/chart.jsx"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-c2e387dd1b89d6e9", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/accessibility/ExperienceControls.jsx:33"}, "properties": {"repobilityId": "753d711c71bef95e", "scanner": "scanner-primary", "fingerprint": "c2e387dd1b89d6e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/accessibility/ExperienceControls.jsx"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-8f4c232b4aa78fc9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "979e3b58c19faf5e", "scanner": "scanner-primary", "fingerprint": "8f4c232b4aa78fc9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-8f4c232b4aa78fc9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7572d8d133564421", "scanner": "scanner-primary", "fingerprint": "8f4c232b4aa78fc9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-77166cbd46fcd8e4", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "50f3b563ffac10e9", "scanner": "scanner-primary", "fingerprint": "77166cbd46fcd8e4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bee6b8956e03198c", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "09a60410de7f2c23", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02600186fc092bd4", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ead6a2c2bfe167b", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-37716d9c0a33ad5c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "abfb5752158cf655", "scanner": "scanner-primary", "fingerprint": "37716d9c0a33ad5c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f630d8dbedab3948", "level": "note", "message": {"text": "Very large file: src/components/admin/walkthrough/type-editors/ThreeDWorldBuilder.jsx (833 lines)"}, "properties": {"repobilityId": "d8d510cd3815b64c", "scanner": "scanner-primary", "fingerprint": "f630d8dbedab3948", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0451dd17e2f5e29f", "level": "note", "message": {"text": "Very large file: src/lib/three-d-world-validation.js (837 lines)"}, "properties": {"repobilityId": "e62d1a053354ad98", "scanner": "scanner-primary", "fingerprint": "0451dd17e2f5e29f", "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": "2c758881dd9e2b41", "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": "29e828bafe39f92d", "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": "354e1215735b2695", "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": "a10c4c69685450b4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "b13fe301a9b969d0", "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": "90c4522152ddc72c", "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": "d0e0952cd72847aa", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-381b7e75192e806b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/manage-billing/index.ts:60"}, "properties": {"repobilityId": "67633460317e787c", "scanner": "scanner-primary", "fingerprint": "381b7e75192e806b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5fb6d3c2a9ef88e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/cultural-guide/index.ts:9"}, "properties": {"repobilityId": "55fae15df2c8704f", "scanner": "scanner-primary", "fingerprint": "5fb6d3c2a9ef88e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cc3625b9b5c018a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/qa-agent/index.ts:97"}, "properties": {"repobilityId": "9f5996692c404475", "scanner": "scanner-primary", "fingerprint": "4cc3625b9b5c018a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50565eb5e1bf4c19", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/notify-inquiry/index.ts:5"}, "properties": {"repobilityId": "59464249da6a2a4e", "scanner": "scanner-primary", "fingerprint": "50565eb5e1bf4c19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8ba9b09b1899136", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/notify-inquiry/index.ts:108"}, "properties": {"repobilityId": "f41f63ff581f5f7f", "scanner": "scanner-primary", "fingerprint": "b8ba9b09b1899136", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfb4a95bc2038bde", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/visitor-data/index.ts:7"}, "properties": {"repobilityId": "968f511f68d41e7e", "scanner": "scanner-primary", "fingerprint": "dfb4a95bc2038bde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f932e76b29b02d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/franchise-checkout/index.ts:90"}, "properties": {"repobilityId": "93c349c4b0dca8c0", "scanner": "scanner-primary", "fingerprint": "7f932e76b29b02d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-febe1c369204600b", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/notify-launch/index.ts:7"}, "properties": {"repobilityId": "cf7f9fb8ae604bcf", "scanner": "scanner-primary", "fingerprint": "febe1c369204600b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ac38cf3540ff388", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/stripe-webhook/index.ts:179"}, "properties": {"repobilityId": "b0d52b89276639c1", "scanner": "scanner-primary", "fingerprint": "1ac38cf3540ff388", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2d0e0cea1954a82", "level": "note", "message": {"text": "Legacy-named symbol `rollback_skipped_no_backup` in supabase/functions/migrateWalkthroughV3/index.ts:242"}, "properties": {"repobilityId": "8305bdc309a708fa", "scanner": "scanner-primary", "fingerprint": "b2d0e0cea1954a82", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-612ab097a77c491d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/stripe-checkout/index.ts:168"}, "properties": {"repobilityId": "b02ba76378e05b5c", "scanner": "scanner-primary", "fingerprint": "612ab097a77c491d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-510690f3c686f3e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/repairWalkthroughMediaLinks/index.ts:43"}, "properties": {"repobilityId": "ef33754ad63229d8", "scanner": "scanner-primary", "fingerprint": "510690f3c686f3e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4b454b190600e141", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/postOperationalStatusUpdate/index.ts:12"}, "properties": {"repobilityId": "a25f7fcbfa83f2ce", "scanner": "scanner-primary", "fingerprint": "4b454b190600e141", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32377ba22ec59855", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/email.ts:1"}, "properties": {"repobilityId": "e26a96e65ed3b25c", "scanner": "scanner-primary", "fingerprint": "32377ba22ec59855", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb90b71d72642edd", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/supabase-client.ts:12"}, "properties": {"repobilityId": "0573bc7e55682d86", "scanner": "scanner-primary", "fingerprint": "bb90b71d72642edd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6beda46d7bfd0a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/types/three-stub.d.ts:1"}, "properties": {"repobilityId": "bd9f604969b7d6b3", "scanner": "scanner-primary", "fingerprint": "c6beda46d7bfd0a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acaf77d3a80c44ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/walkthrough/ThreeDWorldCanvas.jsx:8"}, "properties": {"repobilityId": "550571876cc05890", "scanner": "scanner-primary", "fingerprint": "acaf77d3a80c44ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aabd3af43ca17e41", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/tenant/ticketing/TenantTicketJourney.jsx:187"}, "properties": {"repobilityId": "d38e3b215bb7350c", "scanner": "scanner-primary", "fingerprint": "aabd3af43ca17e41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8bf0058821cfa1e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/visitor-journey.js:1"}, "properties": {"repobilityId": "d6325e429ad371be", "scanner": "scanner-primary", "fingerprint": "a8bf0058821cfa1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ce312b389e8cd9d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/three-d-world-models.js:3"}, "properties": {"repobilityId": "bdeedd17e486538c", "scanner": "scanner-primary", "fingerprint": "6ce312b389e8cd9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-932f5b86a618fb91", "level": "note", "message": {"text": "Legacy-named symbol `rollback_backup` in src/lib/walkthrough-qa-checklist.js:8"}, "properties": {"repobilityId": "30400932d1e7c90d", "scanner": "scanner-primary", "fingerprint": "932f5b86a618fb91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-03964828975c9985", "level": "note", "message": {"text": "Legacy-named symbol `scaverse_home_intro_seen_v2` in src/lib/scaverse-onboarding-content.js:2"}, "properties": {"repobilityId": "765e56dd44801acd", "scanner": "scanner-primary", "fingerprint": "03964828975c9985", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c3efdbc10a1942c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/three-d-world-scene.js:3"}, "properties": {"repobilityId": "afbdef314706613b", "scanner": "scanner-primary", "fingerprint": "c3efdbc10a1942c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06fc8f4bd4a68f21", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/vendor-pricing.js:1"}, "properties": {"repobilityId": "5530c35fa3a2ec1e", "scanner": "scanner-primary", "fingerprint": "06fc8f4bd4a68f21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d99ffcab4eaedb12", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/walkthrough-readiness.js:1"}, "properties": {"repobilityId": "2048cb6a89343704", "scanner": "scanner-primary", "fingerprint": "d99ffcab4eaedb12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f6e8ba06ea53e42", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/form-protection.js:1"}, "properties": {"repobilityId": "bc36d49f03957575", "scanner": "scanner-primary", "fingerprint": "0f6e8ba06ea53e42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90986d2bd6d7ff9e", "level": "note", "message": {"text": "Legacy-named symbol `deterministic_subject_mask_v1` in src/lib/sprite-image-processing.js:2"}, "properties": {"repobilityId": "d5d705556b528c26", "scanner": "scanner-primary", "fingerprint": "90986d2bd6d7ff9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-042d353d2f89d318", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/presale-content.js:1"}, "properties": {"repobilityId": "e83514ceed3c179b", "scanner": "scanner-primary", "fingerprint": "042d353d2f89d318", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ec7784f3d0d5562", "level": "note", "message": {"text": "Legacy-named symbol `scaverse_avatar_visitor_id_v1` in src/lib/avatar-config.js:6"}, "properties": {"repobilityId": "c7dc3ab670c84eeb", "scanner": "scanner-primary", "fingerprint": "5ec7784f3d0d5562", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-623dae1b85b89b9d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/three-d-world-examples.js:1"}, "properties": {"repobilityId": "bd22b2819d06a4f4", "scanner": "scanner-primary", "fingerprint": "623dae1b85b89b9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc12016e42a96f7c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/ticket-access.js:38"}, "properties": {"repobilityId": "512af772222ee9d6", "scanner": "scanner-primary", "fingerprint": "fc12016e42a96f7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ead6b3e60770c462", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/three-d-world-textures.js:3"}, "properties": {"repobilityId": "f75ca1455757d3a2", "scanner": "scanner-primary", "fingerprint": "ead6b3e60770c462", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4eb613e4322103df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/zip-import/constants.js:59"}, "properties": {"repobilityId": "439c2b9725c979ef", "scanner": "scanner-primary", "fingerprint": "4eb613e4322103df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c67725de363bc392", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/Passport.jsx:27"}, "properties": {"repobilityId": "96aee035bc87af91", "scanner": "scanner-primary", "fingerprint": "c67725de363bc392", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dbecb2591cbde1f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/AIGuide.jsx:214"}, "properties": {"repobilityId": "db4486ee37b88575", "scanner": "scanner-primary", "fingerprint": "0dbecb2591cbde1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7901c6a7d6d5e8b5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useVisitorJourney.js:24"}, "properties": {"repobilityId": "f1eef12c9f9cd677", "scanner": "scanner-primary", "fingerprint": "7901c6a7d6d5e8b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4d7ddee1cab4558", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useVisitorNotifications.js:7"}, "properties": {"repobilityId": "1c2dc6b0e8c6b217", "scanner": "scanner-primary", "fingerprint": "b4d7ddee1cab4558", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31d0f8ff9189746c", "level": "note", "message": {"text": "Legacy-named symbol `scaverse_home_intro_seen_v1` in src/hooks/useFirstVisit.js:3"}, "properties": {"repobilityId": "c65a754375bef975", "scanner": "scanner-primary", "fingerprint": "31d0f8ff9189746c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9915dc3f1666b83a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/generateScrollableImageExtension/entry.ts:56"}, "properties": {"repobilityId": "801fc634a6a4a655", "scanner": "scanner-primary", "fingerprint": "9915dc3f1666b83a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e32fe049de8a27d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/exportToSupabase/entry.ts:51"}, "properties": {"repobilityId": "454123c672516579", "scanner": "scanner-primary", "fingerprint": "e32fe049de8a27d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff5fe8545f1acffd", "level": "note", "message": {"text": "Legacy-named symbol `ai_guide_system_v1` in base44/functions/seedScaverseCivilization/entry.ts:132"}, "properties": {"repobilityId": "b399269587c3a6e2", "scanner": "scanner-primary", "fingerprint": "ff5fe8545f1acffd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4dfcd131a7af9057", "level": "note", "message": {"text": "Legacy-named symbol `rollback_skipped_no_backup` in base44/functions/migrateWalkthroughV3/entry.ts:274"}, "properties": {"repobilityId": "9bcba198bd06167d", "scanner": "scanner-primary", "fingerprint": "4dfcd131a7af9057", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f23014bc49ff4f05", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/repairWalkthroughMediaLinks/entry.ts:43"}, "properties": {"repobilityId": "33e3da3478226d2d", "scanner": "scanner-primary", "fingerprint": "f23014bc49ff4f05", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-28f100b462e12d50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 base44/functions/postOperationalStatusUpdate/entry.ts:15"}, "properties": {"repobilityId": "0da97e66a71ed69b", "scanner": "scanner-primary", "fingerprint": "28f100b462e12d50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3f34842b1e8735a", "level": "warning", "message": {"text": "Frontend route `/presale` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "f0833129386b2ba2", "scanner": "scanner-primary", "fingerprint": "f3f34842b1e8735a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5a8b49b88cc3081d", "level": "warning", "message": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "53ab22a71eac19bd", "scanner": "scanner-primary", "fingerprint": "5a8b49b88cc3081d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b240b14bed549d9a", "level": "warning", "message": {"text": "Frontend route `/admin/music` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "b6c180cb0108d3fb", "scanner": "scanner-primary", "fingerprint": "b240b14bed549d9a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-896488aef35a24a9", "level": "warning", "message": {"text": "Frontend route `/admin/tenant` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "b2f2ef0779bde3d0", "scanner": "scanner-primary", "fingerprint": "896488aef35a24a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-979ab440990efec2", "level": "warning", "message": {"text": "Frontend route `/admin/tenant/:tenantId/tour` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "16a37e45035b0b2e", "scanner": "scanner-primary", "fingerprint": "979ab440990efec2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2c0a570498ad3205", "level": "warning", "message": {"text": "Frontend route `/admin/tenant/:tenantId/begin-tour` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "a78df795d88abbb8", "scanner": "scanner-primary", "fingerprint": "2c0a570498ad3205", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f4678aa441ffdd4f", "level": "warning", "message": {"text": "Frontend route `/admin/tenant/:tenantId/scene-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "89ae222d7deea4d5", "scanner": "scanner-primary", "fingerprint": "f4678aa441ffdd4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-638e6501e958b4fe", "level": "warning", "message": {"text": "Frontend route `/admin/tenant/:tenantId/tour-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "1d0038fd7527b587", "scanner": "scanner-primary", "fingerprint": "638e6501e958b4fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-386b6b74b393d84b", "level": "warning", "message": {"text": "Frontend route `/admin/tenant/:tenantId/experience-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "faa6f058d4ac0ddb", "scanner": "scanner-primary", "fingerprint": "386b6b74b393d84b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-552da133c4757727", "level": "warning", "message": {"text": "Frontend route `/admin/tenant/:tenantId/walkthrough-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "1475575fc8a7df41", "scanner": "scanner-primary", "fingerprint": "552da133c4757727", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bfa0735dedb77a81", "level": "warning", "message": {"text": "Frontend route `/museum/:tenantSlug/begin-tour/:walkthroughKey` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "602c347197c66525", "scanner": "scanner-primary", "fingerprint": "bfa0735dedb77a81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7e1367ad8257b8d1", "level": "warning", "message": {"text": "Frontend route `/museum/:tenantSlug/walkthrough/:walkthroughKey` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "72c40b4e12931288", "scanner": "scanner-primary", "fingerprint": "7e1367ad8257b8d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1621bbedb6d1bae8", "level": "warning", "message": {"text": "Frontend route `/ai-consulting` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "187a4ad8e5ce4185", "scanner": "scanner-primary", "fingerprint": "1621bbedb6d1bae8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ff1877390e80b4ba", "level": "warning", "message": {"text": "Frontend route `/museum/:tenantSlug/admin` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "10d78ccfa8971ba9", "scanner": "scanner-primary", "fingerprint": "ff1877390e80b4ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-694a47bfc7eced85", "level": "warning", "message": {"text": "Frontend route `experience` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "d6d119dcefee97cc", "scanner": "scanner-primary", "fingerprint": "694a47bfc7eced85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a88c1184ff4488e1", "level": "warning", "message": {"text": "Frontend route `experience-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "c54f2b16c49aa5d0", "scanner": "scanner-primary", "fingerprint": "a88c1184ff4488e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5a4dee6d5be6acae", "level": "warning", "message": {"text": "Frontend route `scene-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "36f74c53ac2d26f3", "scanner": "scanner-primary", "fingerprint": "5a4dee6d5be6acae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a952d6d655ab923b", "level": "warning", "message": {"text": "Frontend route `tour-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "cfee3fc350413a69", "scanner": "scanner-primary", "fingerprint": "a952d6d655ab923b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8c8c768b8f303569", "level": "warning", "message": {"text": "Frontend route `walkthrough-builder` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "afb2cafff9b7f600", "scanner": "scanner-primary", "fingerprint": "8c8c768b8f303569", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3ca2309e1426c962", "level": "warning", "message": {"text": "Frontend route `tour` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "ef8528c32db4244c", "scanner": "scanner-primary", "fingerprint": "3ca2309e1426c962", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-894fefe7c4e8a258", "level": "warning", "message": {"text": "Frontend route `rooms` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "2f5bb3e5638eceac", "scanner": "scanner-primary", "fingerprint": "894fefe7c4e8a258", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2c122d61ba4f1b53", "level": "warning", "message": {"text": "Frontend route `stages` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "acc4bd5b9127ffcc", "scanner": "scanner-primary", "fingerprint": "2c122d61ba4f1b53", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2e6847572eeb297e", "level": "warning", "message": {"text": "Frontend route `vendors` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "8948ea040700511e", "scanner": "scanner-primary", "fingerprint": "2e6847572eeb297e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b6c088e8a2080dcd", "level": "warning", "message": {"text": "Frontend route `exhibits` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "9e0081ec1f6d2db3", "scanner": "scanner-primary", "fingerprint": "b6c088e8a2080dcd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5f7e5397221ec402", "level": "warning", "message": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "6568c58299af7583", "scanner": "scanner-primary", "fingerprint": "5f7e5397221ec402", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0ea0845df069a844", "level": "warning", "message": {"text": "Frontend route `music` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "d4229500e026c52b", "scanner": "scanner-primary", "fingerprint": "0ea0845df069a844", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d00beeb736857284", "level": "warning", "message": {"text": "Frontend route `card` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "7ec7f759fbed031a", "scanner": "scanner-primary", "fingerprint": "d00beeb736857284", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-02d4b4e7749473cc", "level": "warning", "message": {"text": "Frontend route `preview-media` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "df38d83ae146e6e1", "scanner": "scanner-primary", "fingerprint": "02d4b4e7749473cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-344352b2b4bb8507", "level": "warning", "message": {"text": "Frontend route `unzipped-storage` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "aada0b65cdc4813b", "scanner": "scanner-primary", "fingerprint": "344352b2b4bb8507", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c69dae1c33a5fa91", "level": "warning", "message": {"text": "Frontend route `uen` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "a43d8f7ba3a735a6", "scanner": "scanner-primary", "fingerprint": "c69dae1c33a5fa91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f5b6515d572d260f", "level": "warning", "message": {"text": "Frontend route `users-access` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "a7eb037ad75f8fef", "scanner": "scanner-primary", "fingerprint": "f5b6515d572d260f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-25c18440cb915b63", "level": "warning", "message": {"text": "Frontend route `experience-layer` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "8703ed63109ba9e7", "scanner": "scanner-primary", "fingerprint": "25c18440cb915b63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-edb450b29973b30f", "level": "warning", "message": {"text": "Frontend route `modules` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "d36ef4811aca5da0", "scanner": "scanner-primary", "fingerprint": "edb450b29973b30f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ba26334a893cd931", "level": "warning", "message": {"text": "Frontend route `modules/onboarding` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "7da901dd857a3c09", "scanner": "scanner-primary", "fingerprint": "ba26334a893cd931", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-03715b772486c8c0", "level": "warning", "message": {"text": "Frontend route `modules/ticketing` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "bb13056e3bc50dc1", "scanner": "scanner-primary", "fingerprint": "03715b772486c8c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1f49beea0a44d864", "level": "warning", "message": {"text": "Frontend route `modules/ai-guide` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "3c26bd7472500d16", "scanner": "scanner-primary", "fingerprint": "1f49beea0a44d864", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-28f8cf4f8ecc9922", "level": "warning", "message": {"text": "Frontend route `modules/walkthrough` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "9786793bc688bc5d", "scanner": "scanner-primary", "fingerprint": "28f8cf4f8ecc9922", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c13eddadcc6fa73b", "level": "warning", "message": {"text": "Frontend route `modules/vendors` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "b204717ac02e28bf", "scanner": "scanner-primary", "fingerprint": "c13eddadcc6fa73b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b4bd00a658e413ca", "level": "warning", "message": {"text": "Frontend route `modules/commerce` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "4a986bc78a879ef6", "scanner": "scanner-primary", "fingerprint": "b4bd00a658e413ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5a01475d9130a896", "level": "warning", "message": {"text": "Frontend route `modules/analytics` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "0f518eeb7efd17b8", "scanner": "scanner-primary", "fingerprint": "5a01475d9130a896", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c5460e6217a7f83a", "level": "warning", "message": {"text": "Frontend route `modules/gamification` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "2ba5b7d99d811f14", "scanner": "scanner-primary", "fingerprint": "c5460e6217a7f83a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a4affa876d5bb208", "level": "warning", "message": {"text": "Frontend route `platform-services` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "3eba6bda7fa3f249", "scanner": "scanner-primary", "fingerprint": "a4affa876d5bb208", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a136d12656d3702e", "level": "warning", "message": {"text": "Frontend route `services/experience-config` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "4e592c854b9352b2", "scanner": "scanner-primary", "fingerprint": "a136d12656d3702e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-dde4add4990a34c1", "level": "warning", "message": {"text": "Frontend route `services/:serviceKey` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "730a8d7598ea3e6c", "scanner": "scanner-primary", "fingerprint": "dde4add4990a34c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4c3383d4d3f4353b", "level": "warning", "message": {"text": "Frontend route `content-data` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "d437476419369fbb", "scanner": "scanner-primary", "fingerprint": "4c3383d4d3f4353b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-86ce1c2e4bfb30d5", "level": "warning", "message": {"text": "Frontend route `content/:contentKey` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "3701643705580c2c", "scanner": "scanner-primary", "fingerprint": "86ce1c2e4bfb30d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f0da4b458fa9e023", "level": "warning", "message": {"text": "Frontend route `infrastructure` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "e2cd8b1116879469", "scanner": "scanner-primary", "fingerprint": "f0da4b458fa9e023", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4e2a7ac781cb1f61", "level": "warning", "message": {"text": "Frontend route `qa-sentinel` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "1739e91ca13fa637", "scanner": "scanner-primary", "fingerprint": "4e2a7ac781cb1f61", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-abd0676c4a1b4fda", "level": "warning", "message": {"text": "Frontend route `testers-feedback` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "5e583f7da394d388", "scanner": "scanner-primary", "fingerprint": "abd0676c4a1b4fda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-79d3a601eb03700e", "level": "warning", "message": {"text": "Frontend route `media` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "d2e2d6a8f4090433", "scanner": "scanner-primary", "fingerprint": "79d3a601eb03700e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-86549c799936258f", "level": "warning", "message": {"text": "Frontend route `onboardingsong` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "01ef9225f702fd09", "scanner": "scanner-primary", "fingerprint": "86549c799936258f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-97208a9761fea9ec", "level": "warning", "message": {"text": "Frontend route `pages` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "dbd11d1baa212738", "scanner": "scanner-primary", "fingerprint": "97208a9761fea9ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fbbaa378732ca473", "level": "warning", "message": {"text": "Frontend route `tenants` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "2ce29e2d26936487", "scanner": "scanner-primary", "fingerprint": "fbbaa378732ca473", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-12a46af8173c78da", "level": "warning", "message": {"text": "Frontend route `white-label` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "67f1b7a2bbaf1c62", "scanner": "scanner-primary", "fingerprint": "12a46af8173c78da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e160e769be39a737", "level": "warning", "message": {"text": "Frontend route `architecture-blueprint` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "987675a2dfc88157", "scanner": "scanner-primary", "fingerprint": "e160e769be39a737", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9a876323659809a7", "level": "warning", "message": {"text": "Frontend route `/ai-guide` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "18c369a696b0b6e7", "scanner": "scanner-primary", "fingerprint": "9a876323659809a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bb14d8349f7ebf8a", "level": "warning", "message": {"text": "Frontend route `/vendors/register` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "96659cc22cde810c", "scanner": "scanner-primary", "fingerprint": "bb14d8349f7ebf8a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2502a505ec194376", "level": "warning", "message": {"text": "Frontend route `/vendor-register` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "a13b2833f3a84569", "scanner": "scanner-primary", "fingerprint": "2502a505ec194376", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-76a7b29e08920dd3", "level": "warning", "message": {"text": "Frontend route `/test-room` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "e45abd29266c1241", "scanner": "scanner-primary", "fingerprint": "76a7b29e08920dd3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-93da0b46e65338b7", "level": "warning", "message": {"text": "Frontend route `/admin/*` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "e8f810f86c0b1412", "scanner": "scanner-primary", "fingerprint": "93da0b46e65338b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}