{"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-51f66a2ad2557428", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/GlobalSearch.jsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/GlobalSearch.jsx:58"}, "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-1b6c0dbd12e7a9ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Lavozimlar.jsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Lavozimlar.jsx:122"}, "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-fb348ae3cb77f242", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Qobiliyatlar.jsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Qobiliyatlar.jsx:60"}, "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-0577fb626b1234b0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Royxat.jsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Royxat.jsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6fad66d46ac22ed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Kamchiliklar.jsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Kamchiliklar.jsx:74"}, "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-66c4a48d275e4396", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/jurnal/index.jsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/jurnal/index.jsx:100"}, "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-2dce26cfe4b8226b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Listlar.jsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Listlar.jsx:191"}, "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-19b3484a3888df76", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Metrli.jsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Metrli.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-e1b6d54845edb78c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Kaziroklar.jsx:132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Kaziroklar.jsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40d27845ce928613", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Aksessuarlar.jsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Aksessuarlar.jsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32bd37e1b95254c7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sozlamalar/Sozlamalar.jsx:434", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sozlamalar/Sozlamalar.jsx:434"}, "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-fa25abb473678da9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Avans.jsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Avans.jsx:99"}, "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-549708fa7e52d9b8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Belgilash.jsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Belgilash.jsx:82"}, "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-c9e0eede65be3bee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Kalendar.jsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Kalendar.jsx:89"}, "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-992ae8c455677394", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/charts.jsx:45", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/charts.jsx:45"}, "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-5dee7b6aee8f9fd6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/index.jsx:28", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/index.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-cbc71883e418c852", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/Dashboard.jsx:39", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/Dashboard.jsx:39"}, "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-a3ad4c11c47c2c18", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/Ishchilar.jsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/Ishchilar.jsx:97"}, "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-ecc045983a66e22e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/pickers.jsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/pickers.jsx:83"}, "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-5148e58b761cd203", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/YangiZakaz.jsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/YangiZakaz.jsx:223"}, "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-0838ed907946008a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/Zakazlar.jsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/Zakazlar.jsx:222"}, "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-d22fc2f5fdb9b9ac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/Mijozlar.jsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/Mijozlar.jsx:65"}, "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-879ea519f947bdb7", "name": "Possible secret in src/lib/firebase.js", "shortDescription": {"text": "Possible secret in src/lib/firebase.js"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f049124fda2e2edf", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/modullar/sotuv/chizmaEngine.js:288", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/modullar/sotuv/chizmaEngine.js:288"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b14b3a9f7b492f90", "name": "Very large file: src/App.jsx (1145 lines)", "shortDescription": {"text": "Very large file: src/App.jsx (1145 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-44cd270745e8d5b5", "name": "Very large file: src/modullar/sotuv/chizmaEngine.js (2698 lines)", "shortDescription": {"text": "Very large file: src/modullar/sotuv/chizmaEngine.js (2698 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 54 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 59 placeholder/mock markers across 18 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "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-bb3797ffeae9fa5e", "name": "Commented-code block (10 lines) in public/sw.js:1", "shortDescription": {"text": "Commented-code block (10 lines) in public/sw.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-3bc90fd6cd4dce90", "name": "Commented-code block (6 lines) in src/App.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/App.jsx: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-25d8cae86ecc2edd", "name": "Commented-code block (7 lines) in src/components/LiveClock.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/LiveClock.jsx: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-a8a5e5c7f98e7157", "name": "Commented-code block (9 lines) in src/components/InstallPrompt.jsx:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/InstallPrompt.jsx: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-d30f8abfaa38160c", "name": "Commented-code block (7 lines) in src/components/GlobalSearch.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/GlobalSearch.jsx: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-d81e15c4c651ed28", "name": "Commented-code block (8 lines) in src/components/ui.jsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/ui.jsx: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-cba1f251074cb4f0", "name": "Commented-code block (6 lines) in src/lib/keybind.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/keybind.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-c0eab56587bb269c", "name": "Commented-code block (5 lines) in src/lib/firebase.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/firebase.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-a681d3e9b6f6f7ca", "name": "Commented-code block (9 lines) in src/lib/ruxsat.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/ruxsat.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-d5b1cccbcee2bac0", "name": "Commented-code block (8 lines) in src/lib/kurs.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/kurs.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-b98688999ed01026", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/kurs.js:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/kurs.js: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-174134d9bc2da863", "name": "Commented-code block (6 lines) in src/lib/eksport.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/eksport.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-149149905b366eeb", "name": "Commented-code block (6 lines) in src/lib/til.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/til.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-f6994aa6371fe933", "name": "Commented-code block (6 lines) in src/lib/storage.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/storage.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-9bbff8a69d3df202", "name": "Commented-code block (7 lines) in src/modullar/ishchilar/Lavozimlar.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/modullar/ishchilar/Lavozimlar.jsx: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-3f61afb7f6d237c6", "name": "Commented-code block (6 lines) in src/modullar/ishchilar/Qobiliyatlar.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modullar/ishchilar/Qobiliyatlar.jsx: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-b4dfbefd33ae1309", "name": "Commented-code block (6 lines) in src/modullar/ishchilar/Kamchiliklar.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modullar/ishchilar/Kamchiliklar.jsx: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-e2f28b4959603d7e", "name": "Commented-code block (6 lines) in src/modullar/jurnal/index.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modullar/jurnal/index.jsx: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-a12afb31b0626d20", "name": "Commented-code block (7 lines) in src/modullar/narxlar/Listlar.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/modullar/narxlar/Listlar.jsx: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-0553d42ec0be1589", "name": "Commented-code block (8 lines) in src/modullar/narxlar/Metrli.jsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/modullar/narxlar/Metrli.jsx: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-6dfe6afa88a73bb7", "name": "Commented-code block (7 lines) in src/modullar/narxlar/Kaziroklar.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/modullar/narxlar/Kaziroklar.jsx: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-2a4104a5d7a60605", "name": "Commented-code block (8 lines) in src/modullar/narxlar/Aksessuarlar.jsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/modullar/narxlar/Aksessuarlar.jsx: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-d486832b051e1e20", "name": "Commented-code block (8 lines) in src/modullar/yoqlama/Avans.jsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/modullar/yoqlama/Avans.jsx: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-5d9b2d85a0972223", "name": "Commented-code block (6 lines) in src/modullar/yoqlama/Belgilash.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modullar/yoqlama/Belgilash.jsx: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-821883f5128ef154", "name": "Commented-code block (8 lines) in src/modullar/yoqlama/Kalendar.jsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/modullar/yoqlama/Kalendar.jsx: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-8f4bc0bad186240b", "name": "Commented-code block (7 lines) in src/modullar/hisobot/charts.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/modullar/hisobot/charts.jsx: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-7f654dc132728fd6", "name": "Commented-code block (6 lines) in src/modullar/hisobot/Kassa.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modullar/hisobot/Kassa.jsx: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-bacc79da4daa6528", "name": "Commented-code block (5 lines) in src/modullar/hisobot/Zakaslar.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/modullar/hisobot/Zakaslar.jsx: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-6b604d82d7b1dfa9", "name": "Commented-code block (6 lines) in src/modullar/hisobot/Dashboard.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modullar/hisobot/Dashboard.jsx: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-d08d39ce9f79a2fb", "name": "Commented-code block (14 lines) in src/modullar/hisobot/Ishchilar.jsx:1", "shortDescription": {"text": "Commented-code block (14 lines) in src/modullar/hisobot/Ishchilar.jsx: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-565edff8c64119f9", "name": "Commented-code block (7 lines) in src/modullar/hisobot/IshchiChek.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/modullar/hisobot/IshchiChek.jsx: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-44fae50254c2bba1", "name": "Commented-code block (6 lines) in src/modullar/sotuv/YangiZakaz.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modullar/sotuv/YangiZakaz.jsx: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-91cbb0fad055f0bd", "name": "Commented-code block (13 lines) in src/modullar/sotuv/chizmaEngine.js:1", "shortDescription": {"text": "Commented-code block (13 lines) in src/modullar/sotuv/chizmaEngine.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-99a1f5a9b9f2ad77", "name": "Commented-code block (7 lines) in src/modullar/sotuv/Chek.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/modullar/sotuv/Chek.jsx: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-cb673f4fc2b6c48c", "name": "Commented-code block (5 lines) in src/modullar/sotuv/Mijozlar.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/modullar/sotuv/Mijozlar.jsx: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-fb17ad5173893c83", "name": "Commented-code block (9 lines) in src/modullar/sotuv/Chizma.jsx:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/modullar/sotuv/Chizma.jsx: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-6a46e1a6dbcc24f4", "name": "Dangling fetch: GET https://cbu.uz/uz/arkhiv-kursov-valyut/json/USD/ (src/lib/kurs.js:12)", "shortDescription": {"text": "Dangling fetch: GET https://cbu.uz/uz/arkhiv-kursov-valyut/json/USD/ (src/lib/kurs.js:12)"}, "fullDescription": {"text": "`src/lib/kurs.js:12` calls `GET https://cbu.uz/uz/arkhiv-kursov-valyut/json/USD/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/cbu.uz/uz/arkhiv-kursov-valyut/json/usd`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67bef9279af78e58", "name": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (src/lib/kurs.js:22)", "shortDescription": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (src/lib/kurs.js:22)"}, "fullDescription": {"text": "`src/lib/kurs.js:22` calls `GET https://open.er-api.com/v6/latest/USD` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.er-api.com/v6/latest/usd`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67d28fa8cd6bb12f", "name": "Unused endpoint: PUT /", "shortDescription": {"text": "Unused endpoint: PUT /"}, "fullDescription": {"text": "`public/sw.js` declares `PUT /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23508"}, "properties": {"repository": "zafarjon-company/Tunika", "repoUrl": "https://github.com/zafarjon-company/Tunika", "branch": "main"}, "results": [{"ruleId": "scanner-51f66a2ad2557428", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/GlobalSearch.jsx:58"}, "properties": {"repobilityId": "bd588662a5dc69a1", "scanner": "scanner-primary", "fingerprint": "51f66a2ad2557428", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b6c0dbd12e7a9ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Lavozimlar.jsx:122"}, "properties": {"repobilityId": "26fe8674b06b2830", "scanner": "scanner-primary", "fingerprint": "1b6c0dbd12e7a9ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb348ae3cb77f242", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Qobiliyatlar.jsx:60"}, "properties": {"repobilityId": "86b639aa8df95c4b", "scanner": "scanner-primary", "fingerprint": "fb348ae3cb77f242", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0577fb626b1234b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Royxat.jsx:262"}, "properties": {"repobilityId": "9157143255ee4a12", "scanner": "scanner-primary", "fingerprint": "0577fb626b1234b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6fad66d46ac22ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/ishchilar/Kamchiliklar.jsx:74"}, "properties": {"repobilityId": "ba931e4dd968d24e", "scanner": "scanner-primary", "fingerprint": "e6fad66d46ac22ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-66c4a48d275e4396", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/jurnal/index.jsx:100"}, "properties": {"repobilityId": "9490c6db3240f56e", "scanner": "scanner-primary", "fingerprint": "66c4a48d275e4396", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2dce26cfe4b8226b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Listlar.jsx:191"}, "properties": {"repobilityId": "89c821dfc2f8659c", "scanner": "scanner-primary", "fingerprint": "2dce26cfe4b8226b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19b3484a3888df76", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Metrli.jsx:140"}, "properties": {"repobilityId": "408fbc31ab19984f", "scanner": "scanner-primary", "fingerprint": "19b3484a3888df76", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e1b6d54845edb78c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Kaziroklar.jsx:132"}, "properties": {"repobilityId": "03c6bbed465af48d", "scanner": "scanner-primary", "fingerprint": "e1b6d54845edb78c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40d27845ce928613", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/narxlar/Aksessuarlar.jsx:131"}, "properties": {"repobilityId": "017daa5d3e66f21c", "scanner": "scanner-primary", "fingerprint": "40d27845ce928613", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32bd37e1b95254c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sozlamalar/Sozlamalar.jsx:434"}, "properties": {"repobilityId": "f239f73511b969bb", "scanner": "scanner-primary", "fingerprint": "32bd37e1b95254c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa25abb473678da9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Avans.jsx:99"}, "properties": {"repobilityId": "240fd984b3732c60", "scanner": "scanner-primary", "fingerprint": "fa25abb473678da9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-549708fa7e52d9b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Belgilash.jsx:82"}, "properties": {"repobilityId": "1a16794e498d64b1", "scanner": "scanner-primary", "fingerprint": "549708fa7e52d9b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c9e0eede65be3bee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/yoqlama/Kalendar.jsx:89"}, "properties": {"repobilityId": "6a9fedd054018766", "scanner": "scanner-primary", "fingerprint": "c9e0eede65be3bee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-992ae8c455677394", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/charts.jsx:45"}, "properties": {"repobilityId": "7fb66d7993dccb3e", "scanner": "scanner-primary", "fingerprint": "992ae8c455677394", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5dee7b6aee8f9fd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/index.jsx:28"}, "properties": {"repobilityId": "79b1fd528236172c", "scanner": "scanner-primary", "fingerprint": "5dee7b6aee8f9fd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cbc71883e418c852", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/Dashboard.jsx:39"}, "properties": {"repobilityId": "a75cde3998f1855f", "scanner": "scanner-primary", "fingerprint": "cbc71883e418c852", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a3ad4c11c47c2c18", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/hisobot/Ishchilar.jsx:97"}, "properties": {"repobilityId": "2a4ea96e2e0bcd3d", "scanner": "scanner-primary", "fingerprint": "a3ad4c11c47c2c18", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecc045983a66e22e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/pickers.jsx:83"}, "properties": {"repobilityId": "904ce7dfe7f5fb29", "scanner": "scanner-primary", "fingerprint": "ecc045983a66e22e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5148e58b761cd203", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/YangiZakaz.jsx:223"}, "properties": {"repobilityId": "999442c0bebe1713", "scanner": "scanner-primary", "fingerprint": "5148e58b761cd203", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0838ed907946008a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/Zakazlar.jsx:222"}, "properties": {"repobilityId": "49990675a8485f97", "scanner": "scanner-primary", "fingerprint": "0838ed907946008a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d22fc2f5fdb9b9ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/modullar/sotuv/Mijozlar.jsx:65"}, "properties": {"repobilityId": "b20cd39073e37f36", "scanner": "scanner-primary", "fingerprint": "d22fc2f5fdb9b9ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-879ea519f947bdb7", "level": "error", "message": {"text": "Possible secret in src/lib/firebase.js"}, "properties": {"repobilityId": "d10b11109177978b", "scanner": "scanner-primary", "fingerprint": "879ea519f947bdb7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/firebase.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-f049124fda2e2edf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/modullar/sotuv/chizmaEngine.js:288"}, "properties": {"repobilityId": "1cf4c95c5a5bc60a", "scanner": "scanner-primary", "fingerprint": "f049124fda2e2edf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/modullar/sotuv/chizmaEngine.js"}, "region": {"startLine": 288}}}]}, {"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-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-b14b3a9f7b492f90", "level": "note", "message": {"text": "Very large file: src/App.jsx (1145 lines)"}, "properties": {"repobilityId": "a59a84e7052cf35b", "scanner": "scanner-primary", "fingerprint": "b14b3a9f7b492f90", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-44cd270745e8d5b5", "level": "note", "message": {"text": "Very large file: src/modullar/sotuv/chizmaEngine.js (2698 lines)"}, "properties": {"repobilityId": "6178fa75df0426ea", "scanner": "scanner-primary", "fingerprint": "44cd270745e8d5b5", "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": "3b4459abf8dce1b2", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "cbb24f288f6e7ee0", "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": "4b21c71391dad8e4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "060d9d8e06311b66", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "8b30ffa35586c34f", "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": "97c10fa57a8a2170", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-bb3797ffeae9fa5e", "level": "none", "message": {"text": "Commented-code block (10 lines) in public/sw.js:1"}, "properties": {"repobilityId": "7aa62a020114c493", "scanner": "scanner-primary", "fingerprint": "bb3797ffeae9fa5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bc90fd6cd4dce90", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/App.jsx:1"}, "properties": {"repobilityId": "3b227e422293b936", "scanner": "scanner-primary", "fingerprint": "3bc90fd6cd4dce90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25d8cae86ecc2edd", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/LiveClock.jsx:1"}, "properties": {"repobilityId": "362bd0d210d7d5f2", "scanner": "scanner-primary", "fingerprint": "25d8cae86ecc2edd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8a5e5c7f98e7157", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/InstallPrompt.jsx:1"}, "properties": {"repobilityId": "534a5b79f1e96efe", "scanner": "scanner-primary", "fingerprint": "a8a5e5c7f98e7157", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d30f8abfaa38160c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/GlobalSearch.jsx:1"}, "properties": {"repobilityId": "fc40e7c5b2a934f1", "scanner": "scanner-primary", "fingerprint": "d30f8abfaa38160c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d81e15c4c651ed28", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/ui.jsx:1"}, "properties": {"repobilityId": "87b27ae8bafdeb7a", "scanner": "scanner-primary", "fingerprint": "d81e15c4c651ed28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cba1f251074cb4f0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/keybind.js:1"}, "properties": {"repobilityId": "97bac53147c55b27", "scanner": "scanner-primary", "fingerprint": "cba1f251074cb4f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0eab56587bb269c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/firebase.js:1"}, "properties": {"repobilityId": "99f686c94c5ec709", "scanner": "scanner-primary", "fingerprint": "c0eab56587bb269c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a681d3e9b6f6f7ca", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/ruxsat.js:1"}, "properties": {"repobilityId": "0ea6fda4b116a213", "scanner": "scanner-primary", "fingerprint": "a681d3e9b6f6f7ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5b1cccbcee2bac0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/kurs.js:1"}, "properties": {"repobilityId": "fe17ba6410035784", "scanner": "scanner-primary", "fingerprint": "d5b1cccbcee2bac0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b98688999ed01026", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/kurs.js:12"}, "properties": {"repobilityId": "2974c99637b8912b", "scanner": "scanner-primary", "fingerprint": "b98688999ed01026", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-174134d9bc2da863", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/eksport.js:1"}, "properties": {"repobilityId": "94f6a5803d41ea74", "scanner": "scanner-primary", "fingerprint": "174134d9bc2da863", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-149149905b366eeb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/til.js:1"}, "properties": {"repobilityId": "6d60ff6a4907eed6", "scanner": "scanner-primary", "fingerprint": "149149905b366eeb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6994aa6371fe933", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/storage.js:1"}, "properties": {"repobilityId": "5f1bf9c504553a5e", "scanner": "scanner-primary", "fingerprint": "f6994aa6371fe933", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bbff8a69d3df202", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/modullar/ishchilar/Lavozimlar.jsx:1"}, "properties": {"repobilityId": "8efca30c93ce4cf8", "scanner": "scanner-primary", "fingerprint": "9bbff8a69d3df202", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f61afb7f6d237c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modullar/ishchilar/Qobiliyatlar.jsx:1"}, "properties": {"repobilityId": "baf09044bb5c5bd0", "scanner": "scanner-primary", "fingerprint": "3f61afb7f6d237c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4dfbefd33ae1309", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modullar/ishchilar/Kamchiliklar.jsx:1"}, "properties": {"repobilityId": "46ac05cdf303825f", "scanner": "scanner-primary", "fingerprint": "b4dfbefd33ae1309", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2f28b4959603d7e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modullar/jurnal/index.jsx:1"}, "properties": {"repobilityId": "26223fc8c8426b13", "scanner": "scanner-primary", "fingerprint": "e2f28b4959603d7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a12afb31b0626d20", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/modullar/narxlar/Listlar.jsx:1"}, "properties": {"repobilityId": "820a0635d1f6f921", "scanner": "scanner-primary", "fingerprint": "a12afb31b0626d20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0553d42ec0be1589", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/modullar/narxlar/Metrli.jsx:1"}, "properties": {"repobilityId": "9c4490996f5d80e8", "scanner": "scanner-primary", "fingerprint": "0553d42ec0be1589", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dfe6afa88a73bb7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/modullar/narxlar/Kaziroklar.jsx:1"}, "properties": {"repobilityId": "5e77b8318f9d2d12", "scanner": "scanner-primary", "fingerprint": "6dfe6afa88a73bb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a4104a5d7a60605", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/modullar/narxlar/Aksessuarlar.jsx:1"}, "properties": {"repobilityId": "f050427e7731799d", "scanner": "scanner-primary", "fingerprint": "2a4104a5d7a60605", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d486832b051e1e20", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/modullar/yoqlama/Avans.jsx:1"}, "properties": {"repobilityId": "a35be5ea6ddf8aff", "scanner": "scanner-primary", "fingerprint": "d486832b051e1e20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d9b2d85a0972223", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modullar/yoqlama/Belgilash.jsx:1"}, "properties": {"repobilityId": "a2041fe371dddeff", "scanner": "scanner-primary", "fingerprint": "5d9b2d85a0972223", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-821883f5128ef154", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/modullar/yoqlama/Kalendar.jsx:1"}, "properties": {"repobilityId": "e48c096bbf338d23", "scanner": "scanner-primary", "fingerprint": "821883f5128ef154", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f4bc0bad186240b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/modullar/hisobot/charts.jsx:1"}, "properties": {"repobilityId": "d231f68bf3011b53", "scanner": "scanner-primary", "fingerprint": "8f4bc0bad186240b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f654dc132728fd6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modullar/hisobot/Kassa.jsx:1"}, "properties": {"repobilityId": "c063029695fa4bae", "scanner": "scanner-primary", "fingerprint": "7f654dc132728fd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bacc79da4daa6528", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/modullar/hisobot/Zakaslar.jsx:1"}, "properties": {"repobilityId": "a5829a57f2a4f819", "scanner": "scanner-primary", "fingerprint": "bacc79da4daa6528", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b604d82d7b1dfa9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modullar/hisobot/Dashboard.jsx:1"}, "properties": {"repobilityId": "97bc19ef1cc77906", "scanner": "scanner-primary", "fingerprint": "6b604d82d7b1dfa9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d08d39ce9f79a2fb", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/modullar/hisobot/Ishchilar.jsx:1"}, "properties": {"repobilityId": "7804b86ec149fbbc", "scanner": "scanner-primary", "fingerprint": "d08d39ce9f79a2fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-565edff8c64119f9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/modullar/hisobot/IshchiChek.jsx:1"}, "properties": {"repobilityId": "e49d91867f3c5626", "scanner": "scanner-primary", "fingerprint": "565edff8c64119f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44fae50254c2bba1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modullar/sotuv/YangiZakaz.jsx:1"}, "properties": {"repobilityId": "da3f402dabaa9009", "scanner": "scanner-primary", "fingerprint": "44fae50254c2bba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91cbb0fad055f0bd", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/modullar/sotuv/chizmaEngine.js:1"}, "properties": {"repobilityId": "3da04ca939cb34a7", "scanner": "scanner-primary", "fingerprint": "91cbb0fad055f0bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99a1f5a9b9f2ad77", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/modullar/sotuv/Chek.jsx:1"}, "properties": {"repobilityId": "34363b2d3c569331", "scanner": "scanner-primary", "fingerprint": "99a1f5a9b9f2ad77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb673f4fc2b6c48c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/modullar/sotuv/Mijozlar.jsx:1"}, "properties": {"repobilityId": "5b03349e012cefbd", "scanner": "scanner-primary", "fingerprint": "cb673f4fc2b6c48c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb17ad5173893c83", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/modullar/sotuv/Chizma.jsx:1"}, "properties": {"repobilityId": "212b64535c42652e", "scanner": "scanner-primary", "fingerprint": "fb17ad5173893c83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a46e1a6dbcc24f4", "level": "error", "message": {"text": "Dangling fetch: GET https://cbu.uz/uz/arkhiv-kursov-valyut/json/USD/ (src/lib/kurs.js:12)"}, "properties": {"repobilityId": "7a03162e9826ff5a", "scanner": "scanner-primary", "fingerprint": "6a46e1a6dbcc24f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67bef9279af78e58", "level": "error", "message": {"text": "Dangling fetch: GET https://open.er-api.com/v6/latest/USD (src/lib/kurs.js:22)"}, "properties": {"repobilityId": "22ac8f0c07b7aacc", "scanner": "scanner-primary", "fingerprint": "67bef9279af78e58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67d28fa8cd6bb12f", "level": "note", "message": {"text": "Unused endpoint: PUT /"}, "properties": {"repobilityId": "e3bf24596fae5165", "scanner": "scanner-primary", "fingerprint": "67d28fa8cd6bb12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}