{"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-ac0c3b31eb143872", "name": "Insecure pattern 'direct_outerhtml_assignment' in assets/marketing/playstore.html:393", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in assets/marketing/playstore.html:393"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-703752c91087dedf", "name": "Very large file: src/screens/QuranScreen.tsx (2289 lines)", "shortDescription": {"text": "Very large file: src/screens/QuranScreen.tsx (2289 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": "4 test file(s) for 99 source file(s) (ratio 0.04). 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-589d76142bf9fd26", "name": "Commented-code block (6 lines) in App.tsx:68", "shortDescription": {"text": "Commented-code block (6 lines) in App.tsx:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0edc1abaee44c840", "name": "Commented-code block (5 lines) in src/utils/hijri.ts:87", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/hijri.ts:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-450941bc787d5d6f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/hijri.ts:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/hijri.ts:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3017a044aff62e30", "name": "Commented-code block (5 lines) in src/utils/streak.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/streak.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc5edb346018da6f", "name": "Commented-code block (5 lines) in src/utils/region.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/region.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-f44ece62ae8fcbdb", "name": "Commented-code block (8 lines) in src/hooks/useCompass.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/hooks/useCompass.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35631a8d0ee3600c", "name": "Legacy-named symbol `quran_reciter_id_v1` in src/hooks/useAudioPlayer.ts:19", "shortDescription": {"text": "Legacy-named symbol `quran_reciter_id_v1` in src/hooks/useAudioPlayer.ts:19"}, "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-a65742c61ba56802", "name": "Commented-code block (5 lines) in src/hooks/useAudioPlayer.ts:195", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useAudioPlayer.ts:195"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b0f21667f40b817", "name": "Commented-code block (5 lines) in src/screens/HifzScreen.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/HifzScreen.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5419ac9dbd4ab6f5", "name": "Legacy-named symbol `tasbih_state_v1` in src/screens/TasbihScreen.tsx:29", "shortDescription": {"text": "Legacy-named symbol `tasbih_state_v1` in src/screens/TasbihScreen.tsx:29"}, "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-6d3a0700b3c031d6", "name": "Commented-code block (5 lines) in src/screens/TasbihScreen.tsx:68", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/TasbihScreen.tsx:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d207476eaf35932", "name": "Legacy-named symbol `hajj_guide_completed_v1` in src/screens/HajjGuideScreen.tsx:24", "shortDescription": {"text": "Legacy-named symbol `hajj_guide_completed_v1` in src/screens/HajjGuideScreen.tsx:24"}, "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-a894ef7533cf2af3", "name": "Commented-code block (7 lines) in src/screens/StatsScreen.tsx:77", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/StatsScreen.tsx:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a23f88576060e56", "name": "Commented-code block (6 lines) in src/screens/HomeScreen.tsx:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/screens/HomeScreen.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47c3ecba35ba091a", "name": "Commented-code block (5 lines) in src/screens/EidScreen.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/EidScreen.tsx:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bb705ff465eedba", "name": "Legacy-named symbol `umrah_guide_completed_v1` in src/screens/UmrahGuideScreen.tsx:24", "shortDescription": {"text": "Legacy-named symbol `umrah_guide_completed_v1` in src/screens/UmrahGuideScreen.tsx:24"}, "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-0d72f93f305fca8b", "name": "Legacy-named symbol `quran_tajweed_v2` in src/screens/QuranScreen.tsx:496", "shortDescription": {"text": "Legacy-named symbol `quran_tajweed_v2` in src/screens/QuranScreen.tsx:496"}, "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-1d5d462a6a62e93a", "name": "Commented-code block (5 lines) in src/screens/QuranScreen.tsx:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/QuranScreen.tsx:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31b21911838cbac3", "name": "Commented-code block (7 lines) in src/screens/QiblaScreen.tsx:73", "shortDescription": {"text": "Commented-code block (7 lines) in src/screens/QiblaScreen.tsx:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb7bd8000acc367f", "name": "Commented-code block (5 lines) in src/screens/OnboardingScreen.tsx:88", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/OnboardingScreen.tsx:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e84770b9a87e213", "name": "Commented-code block (5 lines) in src/screens/PrayerTrackerScreen.tsx:69", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/PrayerTrackerScreen.tsx:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84862d6fea3d78e7", "name": "Legacy-named symbol `takbir_tashreeq_v1` in src/screens/TakbirScreen.tsx:29", "shortDescription": {"text": "Legacy-named symbol `takbir_tashreeq_v1` in src/screens/TakbirScreen.tsx:29"}, "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-b488ba61de4f8210", "name": "Commented-code block (5 lines) in src/screens/MoodScreen.tsx:56", "shortDescription": {"text": "Commented-code block (5 lines) in src/screens/MoodScreen.tsx:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e035544b83ba73f", "name": "Commented-code block (5 lines) in src/components/HadithOfDay.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/HadithOfDay.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9486a03cc372fc95", "name": "Commented-code block (5 lines) in src/components/MushafPageReader.tsx:472", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/MushafPageReader.tsx:472"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d036a5b26e68ef28", "name": "Commented-code block (9 lines) in src/components/TajweedText.tsx:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/TajweedText.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b720e02658c725da", "name": "Legacy-named symbol `goalDays_v1` in src/components/Sidebar.tsx:222", "shortDescription": {"text": "Legacy-named symbol `goalDays_v1` in src/components/Sidebar.tsx:222"}, "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-b61447ff3ebe83a5", "name": "Legacy-named symbol `quran_reciter_id_v1` in src/components/AyahSheet.tsx:21", "shortDescription": {"text": "Legacy-named symbol `quran_reciter_id_v1` in src/components/AyahSheet.tsx:21"}, "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-014c2cb7ea731bbf", "name": "Commented-code block (7 lines) in src/components/TodayCard.tsx:21", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/TodayCard.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21d30d1422856b9b", "name": "Legacy-named symbol `quran_script_v1` in src/components/ui/ArabicText.tsx:9", "shortDescription": {"text": "Legacy-named symbol `quran_script_v1` in src/components/ui/ArabicText.tsx:9"}, "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-3b6e6590e62cc01c", "name": "Commented-code block (5 lines) in src/constants/juzList.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/constants/juzList.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-1d4f9e94a12a98cb", "name": "Commented-code block (5 lines) in src/constants/qurbani.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/constants/qurbani.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-c7f0df985d8c0911", "name": "Commented-code block (5 lines) in src/constants/eidGuide.ts:669", "shortDescription": {"text": "Commented-code block (5 lines) in src/constants/eidGuide.ts:669"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7677fa9d5294a42e", "name": "Commented-code block (7 lines) in src/constants/sajdahList.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/constants/sajdahList.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-b926c07c4ef7e1dc", "name": "Commented-code block (7 lines) in src/constants/dailyAct.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/constants/dailyAct.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b32a7fca95fb7a6", "name": "Commented-code block (6 lines) in src/services/offlineStore.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/offlineStore.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef6c2c93e1e2bec8", "name": "Legacy-named symbol `goalDays_v1` in src/services/storage.ts:8", "shortDescription": {"text": "Legacy-named symbol `goalDays_v1` in src/services/storage.ts: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-a32c2c916f646618", "name": "Commented-code block (6 lines) in src/services/storage.ts:201", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/storage.ts:201"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86182c71b8f42e82", "name": "Commented-code block (5 lines) in src/services/notifications.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/notifications.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-203569c8d806a375", "name": "Commented-code block (5 lines) in src/services/ads.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/ads.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf37c9af183a6de8", "name": "Legacy-named symbol `quran_last_read_v2` in src/services/quran.ts:371", "shortDescription": {"text": "Legacy-named symbol `quran_last_read_v2` in src/services/quran.ts:371"}, "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-7bc7960afb1c0305", "name": "Commented-code block (5 lines) in src/services/quran.ts:38", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/quran.ts: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-cbb00e4a4ba35ba0", "name": "Commented-code block (5 lines) in src/services/offlineDownloader.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/offlineDownloader.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4cd1354d5b0b4447", "name": "Commented-code block (5 lines) in src/services/__tests__/quranBismillah.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/__tests__/quranBismillah.test.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-cc0f9d8e41b33b0e", "name": "11 env vars used in code but missing from .env.example", "shortDescription": {"text": "11 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `EXPO_PUBLIC_ADMOB_BANNER_DUA`, `EXPO_PUBLIC_ADMOB_BANNER_GUIDES`, `EXPO_PUBLIC_ADMOB_BANNER_HIFZ`, `EXPO_PUBLIC_ADMOB_BANNER_LEARN`, `EXPO_PUBLIC_ADMOB_BANNER_MOOD`, `EXPO_PUBLIC_ADMOB_BANNER_NAMES`, `EXPO_PUBLIC_ADMOB_BANNER_PRAYER`, `EXPO_PUBLIC_ADMOB_BANNER_QIBLA` + 3 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23862"}, "properties": {"repository": "AbdulRehmanKhursheed/risepath", "repoUrl": "https://github.com/AbdulRehmanKhursheed/risepath", "branch": "main"}, "results": [{"ruleId": "scanner-ac0c3b31eb143872", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in assets/marketing/playstore.html:393"}, "properties": {"repobilityId": "1c4a5698ad5c95ce", "scanner": "scanner-primary", "fingerprint": "ac0c3b31eb143872", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "assets/marketing/playstore.html"}, "region": {"startLine": 393}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-703752c91087dedf", "level": "note", "message": {"text": "Very large file: src/screens/QuranScreen.tsx (2289 lines)"}, "properties": {"repobilityId": "e1419d6ee798d5de", "scanner": "scanner-primary", "fingerprint": "703752c91087dedf", "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": "1f2e520c2c4249b5", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "1912dc4110bc8801", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-589d76142bf9fd26", "level": "none", "message": {"text": "Commented-code block (6 lines) in App.tsx:68"}, "properties": {"repobilityId": "1cf724a3eae1de03", "scanner": "scanner-primary", "fingerprint": "589d76142bf9fd26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0edc1abaee44c840", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/hijri.ts:87"}, "properties": {"repobilityId": "b39ebddeed807fcf", "scanner": "scanner-primary", "fingerprint": "0edc1abaee44c840", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-450941bc787d5d6f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/hijri.ts:99"}, "properties": {"repobilityId": "54c732bfdaeee3a6", "scanner": "scanner-primary", "fingerprint": "450941bc787d5d6f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3017a044aff62e30", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/streak.ts:4"}, "properties": {"repobilityId": "0afcd19944a96ae7", "scanner": "scanner-primary", "fingerprint": "3017a044aff62e30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc5edb346018da6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/region.ts:1"}, "properties": {"repobilityId": "90de65319bdbceef", "scanner": "scanner-primary", "fingerprint": "dc5edb346018da6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f44ece62ae8fcbdb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/hooks/useCompass.ts:6"}, "properties": {"repobilityId": "091c73967a38e8ec", "scanner": "scanner-primary", "fingerprint": "f44ece62ae8fcbdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35631a8d0ee3600c", "level": "note", "message": {"text": "Legacy-named symbol `quran_reciter_id_v1` in src/hooks/useAudioPlayer.ts:19"}, "properties": {"repobilityId": "5c35f379c9c5ead3", "scanner": "scanner-primary", "fingerprint": "35631a8d0ee3600c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a65742c61ba56802", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useAudioPlayer.ts:195"}, "properties": {"repobilityId": "1bb665a3842e6da7", "scanner": "scanner-primary", "fingerprint": "a65742c61ba56802", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b0f21667f40b817", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/HifzScreen.tsx:21"}, "properties": {"repobilityId": "dd572fc87587cfe1", "scanner": "scanner-primary", "fingerprint": "7b0f21667f40b817", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5419ac9dbd4ab6f5", "level": "note", "message": {"text": "Legacy-named symbol `tasbih_state_v1` in src/screens/TasbihScreen.tsx:29"}, "properties": {"repobilityId": "578b3bda20ab165c", "scanner": "scanner-primary", "fingerprint": "5419ac9dbd4ab6f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6d3a0700b3c031d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/TasbihScreen.tsx:68"}, "properties": {"repobilityId": "021b321fb2011f15", "scanner": "scanner-primary", "fingerprint": "6d3a0700b3c031d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d207476eaf35932", "level": "note", "message": {"text": "Legacy-named symbol `hajj_guide_completed_v1` in src/screens/HajjGuideScreen.tsx:24"}, "properties": {"repobilityId": "10a80ca2e3bb6f14", "scanner": "scanner-primary", "fingerprint": "2d207476eaf35932", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a894ef7533cf2af3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/StatsScreen.tsx:77"}, "properties": {"repobilityId": "26e8dc12e79a55b3", "scanner": "scanner-primary", "fingerprint": "a894ef7533cf2af3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a23f88576060e56", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/screens/HomeScreen.tsx:33"}, "properties": {"repobilityId": "44f8e434aedc3dc5", "scanner": "scanner-primary", "fingerprint": "9a23f88576060e56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47c3ecba35ba091a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/EidScreen.tsx:28"}, "properties": {"repobilityId": "a1bb0afe1597170a", "scanner": "scanner-primary", "fingerprint": "47c3ecba35ba091a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bb705ff465eedba", "level": "note", "message": {"text": "Legacy-named symbol `umrah_guide_completed_v1` in src/screens/UmrahGuideScreen.tsx:24"}, "properties": {"repobilityId": "5693e523fc8f322b", "scanner": "scanner-primary", "fingerprint": "6bb705ff465eedba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0d72f93f305fca8b", "level": "note", "message": {"text": "Legacy-named symbol `quran_tajweed_v2` in src/screens/QuranScreen.tsx:496"}, "properties": {"repobilityId": "1037e56dfd923026", "scanner": "scanner-primary", "fingerprint": "0d72f93f305fca8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1d5d462a6a62e93a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/QuranScreen.tsx:40"}, "properties": {"repobilityId": "334e56ebbdf1283d", "scanner": "scanner-primary", "fingerprint": "1d5d462a6a62e93a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31b21911838cbac3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/screens/QiblaScreen.tsx:73"}, "properties": {"repobilityId": "0332174dc1e24476", "scanner": "scanner-primary", "fingerprint": "31b21911838cbac3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb7bd8000acc367f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/OnboardingScreen.tsx:88"}, "properties": {"repobilityId": "b927b5b1d1faf793", "scanner": "scanner-primary", "fingerprint": "bb7bd8000acc367f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e84770b9a87e213", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/PrayerTrackerScreen.tsx:69"}, "properties": {"repobilityId": "bde6ad52a77341e0", "scanner": "scanner-primary", "fingerprint": "5e84770b9a87e213", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84862d6fea3d78e7", "level": "note", "message": {"text": "Legacy-named symbol `takbir_tashreeq_v1` in src/screens/TakbirScreen.tsx:29"}, "properties": {"repobilityId": "8f005b574baa04af", "scanner": "scanner-primary", "fingerprint": "84862d6fea3d78e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b488ba61de4f8210", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/screens/MoodScreen.tsx:56"}, "properties": {"repobilityId": "ccad7fe840727893", "scanner": "scanner-primary", "fingerprint": "b488ba61de4f8210", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e035544b83ba73f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/HadithOfDay.tsx:19"}, "properties": {"repobilityId": "68865c77113dbc48", "scanner": "scanner-primary", "fingerprint": "9e035544b83ba73f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9486a03cc372fc95", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/MushafPageReader.tsx:472"}, "properties": {"repobilityId": "31331c2dbd798a8a", "scanner": "scanner-primary", "fingerprint": "9486a03cc372fc95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d036a5b26e68ef28", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/TajweedText.tsx:4"}, "properties": {"repobilityId": "348b0c8ef6c4df10", "scanner": "scanner-primary", "fingerprint": "d036a5b26e68ef28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b720e02658c725da", "level": "note", "message": {"text": "Legacy-named symbol `goalDays_v1` in src/components/Sidebar.tsx:222"}, "properties": {"repobilityId": "edd196b1bb1aba9f", "scanner": "scanner-primary", "fingerprint": "b720e02658c725da", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b61447ff3ebe83a5", "level": "note", "message": {"text": "Legacy-named symbol `quran_reciter_id_v1` in src/components/AyahSheet.tsx:21"}, "properties": {"repobilityId": "bf5f45153888f9c5", "scanner": "scanner-primary", "fingerprint": "b61447ff3ebe83a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-014c2cb7ea731bbf", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/TodayCard.tsx:21"}, "properties": {"repobilityId": "6f5003de51360202", "scanner": "scanner-primary", "fingerprint": "014c2cb7ea731bbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21d30d1422856b9b", "level": "note", "message": {"text": "Legacy-named symbol `quran_script_v1` in src/components/ui/ArabicText.tsx:9"}, "properties": {"repobilityId": "b85f7cb1b6c0ad1f", "scanner": "scanner-primary", "fingerprint": "21d30d1422856b9b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3b6e6590e62cc01c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/constants/juzList.ts:1"}, "properties": {"repobilityId": "c6994c4c482d90bb", "scanner": "scanner-primary", "fingerprint": "3b6e6590e62cc01c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d4f9e94a12a98cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/constants/qurbani.ts:1"}, "properties": {"repobilityId": "d907219d0c875837", "scanner": "scanner-primary", "fingerprint": "1d4f9e94a12a98cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7f0df985d8c0911", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/constants/eidGuide.ts:669"}, "properties": {"repobilityId": "8c2b505df718cead", "scanner": "scanner-primary", "fingerprint": "c7f0df985d8c0911", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7677fa9d5294a42e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/constants/sajdahList.ts:1"}, "properties": {"repobilityId": "0536f75e99aedfe5", "scanner": "scanner-primary", "fingerprint": "7677fa9d5294a42e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b926c07c4ef7e1dc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/constants/dailyAct.ts:3"}, "properties": {"repobilityId": "835a757b29ffa5a0", "scanner": "scanner-primary", "fingerprint": "b926c07c4ef7e1dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b32a7fca95fb7a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/offlineStore.ts:4"}, "properties": {"repobilityId": "367af2b69aa232a6", "scanner": "scanner-primary", "fingerprint": "9b32a7fca95fb7a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef6c2c93e1e2bec8", "level": "note", "message": {"text": "Legacy-named symbol `goalDays_v1` in src/services/storage.ts:8"}, "properties": {"repobilityId": "046664337785383f", "scanner": "scanner-primary", "fingerprint": "ef6c2c93e1e2bec8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a32c2c916f646618", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/storage.ts:201"}, "properties": {"repobilityId": "3478fc6da6bd9a04", "scanner": "scanner-primary", "fingerprint": "a32c2c916f646618", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86182c71b8f42e82", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/notifications.ts:93"}, "properties": {"repobilityId": "0372d3c9d1514d21", "scanner": "scanner-primary", "fingerprint": "86182c71b8f42e82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-203569c8d806a375", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/ads.ts:10"}, "properties": {"repobilityId": "78701a950a094d10", "scanner": "scanner-primary", "fingerprint": "203569c8d806a375", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf37c9af183a6de8", "level": "note", "message": {"text": "Legacy-named symbol `quran_last_read_v2` in src/services/quran.ts:371"}, "properties": {"repobilityId": "0e3223565f9cb478", "scanner": "scanner-primary", "fingerprint": "bf37c9af183a6de8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7bc7960afb1c0305", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/quran.ts:38"}, "properties": {"repobilityId": "b1f01744a6f2342f", "scanner": "scanner-primary", "fingerprint": "7bc7960afb1c0305", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbb00e4a4ba35ba0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/offlineDownloader.ts:6"}, "properties": {"repobilityId": "0d0b1fd49bc20d8a", "scanner": "scanner-primary", "fingerprint": "cbb00e4a4ba35ba0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cd1354d5b0b4447", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/__tests__/quranBismillah.test.ts:1"}, "properties": {"repobilityId": "ecba7d825c28c21c", "scanner": "scanner-primary", "fingerprint": "4cd1354d5b0b4447", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0f9d8e41b33b0e", "level": "note", "message": {"text": "11 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c82cd8cd626c3599", "scanner": "scanner-primary", "fingerprint": "cc0f9d8e41b33b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}