{"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-90aae9686024b119", "name": "Stray `console.log` in TS/JS \u2014 fetch_romania_counties.js:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fetch_romania_counties.js:81"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-126e9e2cf3388b18", "name": "Stray `console.log` in TS/JS \u2014 scripts/build-data.ts:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-data.ts:129"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34ad12d3a1990cc8", "name": "Icon-only button without accessible name \u2014 src/App.tsx:50", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/App.tsx:50"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b1810c3d2062034", "name": "Icon-only button without accessible name \u2014 src/components/ConstituencyPanel.tsx:189", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/ConstituencyPanel.tsx:189"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2a05a88f812c938", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ConstituencyPanel.tsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ConstituencyPanel.tsx: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-b86e058080136507", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/MultiSelectPanel.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/MultiSelectPanel.tsx:113"}, "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-f392b776d2f8ef66", "name": "Icon-only button without accessible name \u2014 src/components/ParliamentModal.tsx:136", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/ParliamentModal.tsx:136"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57913c2b081c0949", "name": "Icon-only button without accessible name \u2014 src/components/SimulationPanel.tsx:278", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/SimulationPanel.tsx:278"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4636f172751d3241", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SimulationPanel.tsx:442", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SimulationPanel.tsx:442"}, "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-4819b8254cc4ad10", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PartyManagerPanel.tsx:27", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PartyManagerPanel.tsx:27"}, "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-0818dd9eb3f3bb53", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SandboxStudio.tsx:136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SandboxStudio.tsx:136"}, "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-5710a3f54f088b82", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/BreakdownDrawer.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/BreakdownDrawer.tsx:165"}, "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-c42800231970306d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/WardPanel.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/WardPanel.tsx:84"}, "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-7e972a4ce6e85c59", "name": "Icon-only button without accessible name \u2014 src/pages/RomaniaApp.tsx:1137", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/RomaniaApp.tsx:1137"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e29f3ec1a89679cb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/RomaniaApp.tsx:1132", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/RomaniaApp.tsx:1132"}, "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-74e55f1c32d66adf", "name": "Icon-only button without accessible name \u2014 src/pages/ItalyApp.tsx:1471", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ItalyApp.tsx:1471"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b617f3698dcb09e1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ItalyApp.tsx:1522", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ItalyApp.tsx:1522"}, "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-93d745befadd32e1", "name": "Icon-only button without accessible name \u2014 src/pages/ArgentinaApp.tsx:975", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ArgentinaApp.tsx:975"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fae98ba570993ab6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ArgentinaApp.tsx:968", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ArgentinaApp.tsx:968"}, "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-0d200546f2892f8b", "name": "Icon-only button without accessible name \u2014 src/pages/CanadaApp.tsx:1088", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/CanadaApp.tsx:1088"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb4a317374c91de7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/CanadaApp.tsx:302", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/CanadaApp.tsx:302"}, "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-37e197043bff8d6b", "name": "Icon-only button without accessible name \u2014 src/pages/IsraelApp.tsx:1082", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/IsraelApp.tsx:1082"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2123cbb65bea1cea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IsraelApp.tsx:1092", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IsraelApp.tsx:1092"}, "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-a1ae5a7bd9a810d9", "name": "Icon-only button without accessible name \u2014 src/pages/IrelandApp.tsx:973", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/IrelandApp.tsx:973"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc1f44d966e68f5a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IrelandApp.tsx:991", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IrelandApp.tsx:991"}, "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-4c2798d0a1703827", "name": "Icon-only button without accessible name \u2014 src/pages/NewZealandApp.tsx:353", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/NewZealandApp.tsx:353"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ebe2f109be62b380", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NewZealandApp.tsx:362", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NewZealandApp.tsx:362"}, "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-1b8fc40ccbf336bc", "name": "Icon-only button without accessible name \u2014 src/pages/PhilippinesApp.tsx:705", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/PhilippinesApp.tsx:705"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-991d63fde3d15225", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PhilippinesApp.tsx:700", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PhilippinesApp.tsx:700"}, "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-d48d69a084e7a0f7", "name": "Icon-only button without accessible name \u2014 src/pages/NorthKoreaApp.tsx:298", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/NorthKoreaApp.tsx:298"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07df66637ca57ad0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorthKoreaApp.tsx:321", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorthKoreaApp.tsx:321"}, "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-17db5171e779f233", "name": "Icon-only button without accessible name \u2014 src/pages/ChileApp.tsx:755", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ChileApp.tsx:755"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5c067efd9e7b9ff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ChileApp.tsx:752", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ChileApp.tsx:752"}, "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-9c74af9f2e40944e", "name": "Icon-only button without accessible name \u2014 src/pages/ColombiaApp.tsx:1064", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ColombiaApp.tsx:1064"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8012cbb6f56ead36", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ColombiaApp.tsx:1057", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ColombiaApp.tsx:1057"}, "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-0240baa349e21d2b", "name": "Icon-only button without accessible name \u2014 src/pages/LatviaApp.tsx:826", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/LatviaApp.tsx:826"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-35f57e8d8dc44533", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LatviaApp.tsx:903", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LatviaApp.tsx:903"}, "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-130d8109c91ce251", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/HomePage.tsx:1843", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/HomePage.tsx:1843"}, "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-68d09b7cd1a7ddd2", "name": "Icon-only button without accessible name \u2014 src/pages/BelarusApp.tsx:714", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/BelarusApp.tsx:714"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71f9dfbe6b7614da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BelarusApp.tsx:711", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BelarusApp.tsx:711"}, "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-1c16762bec7eccb5", "name": "Icon-only button without accessible name \u2014 src/pages/EstoniaApp.tsx:1167", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/EstoniaApp.tsx:1167"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9adb049ef314f8c2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/EstoniaApp.tsx:1192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/EstoniaApp.tsx:1192"}, "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-0d4d078d9e2f0247", "name": "Icon-only button without accessible name \u2014 src/pages/USAApp.tsx:1939", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/USAApp.tsx:1939"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f934d70366323c9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/USAApp.tsx:1050", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/USAApp.tsx:1050"}, "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-b47dce1b36cc1864", "name": "Icon-only button without accessible name \u2014 src/pages/SwitzerlandApp.tsx:1166", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/SwitzerlandApp.tsx:1166"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00b065f085146a21", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SwitzerlandApp.tsx:1191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SwitzerlandApp.tsx:1191"}, "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-2c50530af1864a66", "name": "Icon-only button without accessible name \u2014 src/pages/SlovakiaApp.tsx:1005", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/SlovakiaApp.tsx:1005"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2adcfaf1685d9c4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SlovakiaApp.tsx:1015", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SlovakiaApp.tsx:1015"}, "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-71b9272908f70a9c", "name": "Icon-only button without accessible name \u2014 src/pages/BrazilApp.tsx:736", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/BrazilApp.tsx:736"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7760a1c85b03317a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BrazilApp.tsx:596", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BrazilApp.tsx:596"}, "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-36f707d25f55d7be", "name": "Icon-only button without accessible name \u2014 src/pages/AustriaApp.tsx:841", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/AustriaApp.tsx:841"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-073b332e47d5c8b5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AustriaApp.tsx:861", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AustriaApp.tsx:861"}, "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-d322fdee45b2efeb", "name": "Icon-only button without accessible name \u2014 src/pages/TurkeyApp.tsx:934", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/TurkeyApp.tsx:934"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37d315e8a17a33d0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TurkeyApp.tsx:927", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TurkeyApp.tsx:927"}, "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-502afe86155bf535", "name": "Icon-only button without accessible name \u2014 src/pages/CustomSwingModal.tsx:141", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/CustomSwingModal.tsx:141"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb85e49ff0af40ac", "name": "Icon-only button without accessible name \u2014 src/pages/LuxembourgApp.tsx:981", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/LuxembourgApp.tsx:981"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9f6d076e7b5c50b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LuxembourgApp.tsx:991", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LuxembourgApp.tsx:991"}, "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-949627fbb784c0f0", "name": "Icon-only button without accessible name \u2014 src/pages/MoldovaApp.tsx:933", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/MoldovaApp.tsx:933"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-273f7d51121d7db3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MoldovaApp.tsx:943", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MoldovaApp.tsx:943"}, "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-9ff8ea9032182302", "name": "Icon-only button without accessible name \u2014 src/pages/SouthAfricaApp.tsx:891", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/SouthAfricaApp.tsx:891"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd7ce3d9051baf42", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SouthAfricaApp.tsx:886", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SouthAfricaApp.tsx:886"}, "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-865efba57e2f7c65", "name": "Icon-only button without accessible name \u2014 src/pages/JapanApp.tsx:1401", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/JapanApp.tsx:1401"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-650232b112416491", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/JapanApp.tsx:1478", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/JapanApp.tsx:1478"}, "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-0fc1dd79558f25d1", "name": "Icon-only button without accessible name \u2014 src/pages/BelgiumApp.tsx:884", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/BelgiumApp.tsx:884"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b9c9ad703547e92", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BelgiumApp.tsx:902", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BelgiumApp.tsx:902"}, "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-31c13b7bf9ae70af", "name": "Icon-only button without accessible name \u2014 src/pages/IndiaApp.tsx:350", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/IndiaApp.tsx:350"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6109d36605bd22c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IndiaApp.tsx:652", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IndiaApp.tsx:652"}, "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-c67baa09d001c76d", "name": "Icon-only button without accessible name \u2014 src/pages/GreeceApp.tsx:915", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/GreeceApp.tsx:915"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0eb4c0f8d5645ef5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/GreeceApp.tsx:948", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/GreeceApp.tsx:948"}, "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-86f7582aa5da46fd", "name": "Icon-only button without accessible name \u2014 src/pages/ElSalvadorApp.tsx:733", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ElSalvadorApp.tsx:733"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e82327f38eb87f70", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ElSalvadorApp.tsx:730", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ElSalvadorApp.tsx:730"}, "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-a63c3bb1cc7b1148", "name": "Icon-only button without accessible name \u2014 src/pages/EUApp.tsx:945", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/EUApp.tsx:945"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1fa4f2946227ed7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/EUApp.tsx:1021", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/EUApp.tsx:1021"}, "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-6e37338cd44e0f41", "name": "Icon-only button without accessible name \u2014 src/pages/USAHouseApp.tsx:418", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/USAHouseApp.tsx:418"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-366ebbe40599b94f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/USAHouseApp.tsx:415", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/USAHouseApp.tsx:415"}, "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-cea7a5b064043670", "name": "Icon-only button without accessible name \u2014 src/pages/NorthernIrelandApp.tsx:890", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/NorthernIrelandApp.tsx:890"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b5fc5f063858ca5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorthernIrelandApp.tsx:908", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorthernIrelandApp.tsx:908"}, "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-0de959e9ef413320", "name": "Icon-only button without accessible name \u2014 src/pages/NamibiaApp.tsx:1317", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/NamibiaApp.tsx:1317"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f05a77e5c34cee3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NamibiaApp.tsx:1327", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NamibiaApp.tsx:1327"}, "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-6dd7ee16435f5632", "name": "Icon-only button without accessible name \u2014 src/pages/TaiwanApp.tsx:760", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/TaiwanApp.tsx:760"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-481f823721d67c8b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TaiwanApp.tsx:757", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TaiwanApp.tsx:757"}, "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-d9b5964d0fca986b", "name": "Icon-only button without accessible name \u2014 src/pages/PolandApp.tsx:973", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/PolandApp.tsx:973"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97133583ca6cf901", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PolandApp.tsx:1050", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PolandApp.tsx:1050"}, "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-7632a85f144a9f0b", "name": "Icon-only button without accessible name \u2014 src/pages/ChinaApp.tsx:370", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ChinaApp.tsx:370"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad1e42f68eee6d3c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ChinaApp.tsx:367", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ChinaApp.tsx:367"}, "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-e6d549cd751c7858", "name": "Icon-only button without accessible name \u2014 src/pages/WalesApp.tsx:872", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/WalesApp.tsx:872"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a37fa9d4ff3a0e3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/WalesApp.tsx:890", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/WalesApp.tsx:890"}, "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-622707b91604d263", "name": "Icon-only button without accessible name \u2014 src/pages/NorwayApp.tsx:1272", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/NorwayApp.tsx:1272"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97a6a811b283c26e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorwayApp.tsx:1298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorwayApp.tsx:1298"}, "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-b1a8704bbe2844be", "name": "Icon-only button without accessible name \u2014 src/pages/SpainApp.tsx:1105", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/SpainApp.tsx:1105"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e6fdecaba8ef61f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SpainApp.tsx:1146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SpainApp.tsx:1146"}, "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-4590e2b358effef2", "name": "Icon-only button without accessible name \u2014 src/pages/BulgariaApp.tsx:1052", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/BulgariaApp.tsx:1052"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-714f75f5f6a92e29", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BulgariaApp.tsx:1062", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BulgariaApp.tsx:1062"}, "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-0968aa3f4b03f959", "name": "Icon-only button without accessible name \u2014 src/pages/CzechiaApp.tsx:1182", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/CzechiaApp.tsx:1182"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6888c775ac6fda9c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/CzechiaApp.tsx:1207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/CzechiaApp.tsx:1207"}, "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-0c1cce6fa2af4248", "name": "Icon-only button without accessible name \u2014 src/pages/PeruApp.tsx:1147", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/PeruApp.tsx:1147"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de980aabed2e4cd9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PeruApp.tsx:1140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PeruApp.tsx:1140"}, "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-cdb1ff32167e15b1", "name": "Icon-only button without accessible name \u2014 src/pages/MongoliaApp.tsx:968", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/MongoliaApp.tsx:968"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88beb415bba62a7d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MongoliaApp.tsx:961", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MongoliaApp.tsx:961"}, "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-a08a2698bd8fd15b", "name": "Icon-only button without accessible name \u2014 src/pages/ScotlandApp.tsx:1419", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ScotlandApp.tsx:1419"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1cea1d9b08c58e2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ScotlandApp.tsx:1437", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ScotlandApp.tsx:1437"}, "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-edb4ef98ce76bf53", "name": "Icon-only button without accessible name \u2014 src/pages/LithuaniaApp.tsx:1139", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/LithuaniaApp.tsx:1139"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f87099376b3e649", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LithuaniaApp.tsx:1164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LithuaniaApp.tsx:1164"}, "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-5da8fbb8076babf8", "name": "Icon-only button without accessible name \u2014 src/pages/MaltaApp.tsx:888", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/MaltaApp.tsx:888"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5bff016f0cea6096", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MaltaApp.tsx:906", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MaltaApp.tsx:906"}, "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-8fff616f2ae0119f", "name": "Icon-only button without accessible name \u2014 src/pages/NigeriaApp.tsx:901", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/NigeriaApp.tsx:901"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9cb11d0ae5b3f667", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NigeriaApp.tsx:423", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NigeriaApp.tsx:423"}, "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-e677c09bbb8e082f", "name": "Icon-only button without accessible name \u2014 src/pages/IcelandApp.tsx:1214", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/IcelandApp.tsx:1214"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb2c996357291cfc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IcelandApp.tsx:1239", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IcelandApp.tsx:1239"}, "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-d3e4f298ae721e32", "name": "Icon-only button without accessible name \u2014 src/pages/DenmarkApp.tsx:1452", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/DenmarkApp.tsx:1452"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71808861943ea79f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DenmarkApp.tsx:1478", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DenmarkApp.tsx:1478"}, "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-721c989c3d52a1f8", "name": "Icon-only button without accessible name \u2014 src/pages/PortugalApp.tsx:909", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/PortugalApp.tsx:909"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99a2af25570bcbfa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PortugalApp.tsx:935", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PortugalApp.tsx:935"}, "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-ee8e08afb5e37991", "name": "Icon-only button without accessible name \u2014 src/pages/FranceApp.tsx:925", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/FranceApp.tsx:925"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7dde8bd95b12ef0d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FranceApp.tsx:918", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FranceApp.tsx:918"}, "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-d869fd9720bc0f90", "name": "Icon-only button without accessible name \u2014 src/pages/VenezuelaApp.tsx:754", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/VenezuelaApp.tsx:754"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4ff547c3208ad34", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/VenezuelaApp.tsx:751", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/VenezuelaApp.tsx:751"}, "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-4bbe30b78a1390b6", "name": "Icon-only button without accessible name \u2014 src/pages/AustraliaApp.tsx:873", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/AustraliaApp.tsx:873"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54ab3984cbea7f4b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AustraliaApp.tsx:835", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AustraliaApp.tsx:835"}, "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-0c3b8c217b69f603", "name": "Icon-only button without accessible name \u2014 src/pages/FranceLegislativeApp.tsx:406", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/FranceLegislativeApp.tsx:406"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ebc0c0a17900a977", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FranceLegislativeApp.tsx:414", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FranceLegislativeApp.tsx:414"}, "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-c68f29332bbfc57c", "name": "Icon-only button without accessible name \u2014 src/pages/GermanyApp.tsx:749", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/GermanyApp.tsx:749"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-034a8954706ed721", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/GermanyApp.tsx:744", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/GermanyApp.tsx:744"}, "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-691f8a6a7a72acdd", "name": "Icon-only button without accessible name \u2014 src/pages/SwedenApp.tsx:1310", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/SwedenApp.tsx:1310"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1adddb1fb0c05585", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SwedenApp.tsx:1336", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SwedenApp.tsx:1336"}, "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-4a47000bcc8ae54e", "name": "Icon-only button without accessible name \u2014 src/pages/HungaryApp.tsx:890", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/HungaryApp.tsx:890"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a54db708b9d94747", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/HungaryApp.tsx:910", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/HungaryApp.tsx:910"}, "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-814febfcf0ab2e8b", "name": "Icon-only button without accessible name \u2014 src/pages/SouthKoreaApp.tsx:691", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/SouthKoreaApp.tsx:691"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bccc2f014d27c9d9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SouthKoreaApp.tsx:686", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SouthKoreaApp.tsx:686"}, "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-9648ec811da49615", "name": "Icon-only button without accessible name \u2014 src/pages/AlbaniaApp.tsx:1009", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/AlbaniaApp.tsx:1009"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78293e6bf270a30d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AlbaniaApp.tsx:1019", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AlbaniaApp.tsx:1019"}, "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-3bc05087e56de5e0", "name": "Icon-only button without accessible name \u2014 src/pages/MexicoChamberApp.tsx:751", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/MexicoChamberApp.tsx:751"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01884eb571cd02c8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MexicoChamberApp.tsx:761", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MexicoChamberApp.tsx:761"}, "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-b4bf3fa0c98f03af", "name": "Icon-only button without accessible name \u2014 src/pages/MexicoApp.tsx:417", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/MexicoApp.tsx:417"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51c30adeed0e469b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MexicoApp.tsx:416", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MexicoApp.tsx:416"}, "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-06271c7fa8ab64f0", "name": "Icon-only button without accessible name \u2014 src/pages/FinlandApp.tsx:1151", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/FinlandApp.tsx:1151"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9851438ac6886742", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FinlandApp.tsx:1176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FinlandApp.tsx:1176"}, "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-f40f95cee360395d", "name": "Icon-only button without accessible name \u2014 src/pages/RussiaApp.tsx:921", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/RussiaApp.tsx:921"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b72b8df744399d9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/RussiaApp.tsx:914", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/RussiaApp.tsx:914"}, "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-f6af7ee8900dad2e", "name": "Icon-only button without accessible name \u2014 src/pages/NetherlandsApp.tsx:923", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/NetherlandsApp.tsx:923"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2dc441bf08c76860", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NetherlandsApp.tsx:933", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NetherlandsApp.tsx:933"}, "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-c4bd4b5167604389", "name": "Icon-only button without accessible name \u2014 src/pages/ThailandApp.tsx:711", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/pages/ThailandApp.tsx:711"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6148319a363dc23", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ThailandApp.tsx:721", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ThailandApp.tsx:721"}, "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-e302b94d8a9f4439", "name": "Insecure pattern 'node_child_process' in it_src/build_uni_geo.cjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in it_src/build_uni_geo.cjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1470b9caae21ff7", "name": "Insecure pattern 'node_child_process' in cl_src/build.cjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cl_src/build.cjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-019972ec723680f0", "name": "Insecure pattern 'node_child_process' in cl_src/build-overseas.cjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in cl_src/build-overseas.cjs:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32dedbd455c8a6e6", "name": "Insecure pattern 'node_child_process' in us_src/rebuild-us.cjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in us_src/rebuild-us.cjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce8a9d66a019b231", "name": "Insecure pattern 'node_child_process' in ie_src/build-geojson.cjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in ie_src/build-geojson.cjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fee4ba2d79c3acf2", "name": "Insecure pattern 'node_child_process' in mt_src/build-geojson.cjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in mt_src/build-geojson.cjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fa63a1273dc6624f", "name": "Insecure pattern 'node_child_process' in ws_src/build-geojson.cjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in ws_src/build-geojson.cjs:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ef1e549577a24f0", "name": "Insecure pattern 'eval_used' in seo_src/gen-about.cjs:13", "shortDescription": {"text": "Insecure pattern 'eval_used' in seo_src/gen-about.cjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-620815f53ebadd50", "name": "Insecure pattern 'node_child_process' in seo_src/dissolve-sim-outlines.cjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in seo_src/dissolve-sim-outlines.cjs:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b2a0e0b1cb58d06f", "name": "Insecure pattern 'direct_innerhtml_assignment' in kr_src/namu.html:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in kr_src/namu.html:22"}, "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-d427448dde037982", "name": "Insecure pattern 'eval_used' in na_src/render-globalfit.cjs:10", "shortDescription": {"text": "Insecure pattern 'eval_used' in na_src/render-globalfit.cjs:10"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ba06a163633377c", "name": "Insecure pattern 'eval_used' in uk_src/inject-ward-res.cjs:21", "shortDescription": {"text": "Insecure pattern 'eval_used' in uk_src/inject-ward-res.cjs:21"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01d426a7a99a9d58", "name": "Possible secret in hu_src/raw/hu_app.js", "shortDescription": {"text": "Possible secret in hu_src/raw/hu_app.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-90506c22d26cbbf1", "name": "Insecure pattern 'direct_innerhtml_assignment' in hu_src/raw/hu_index.html:6", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in hu_src/raw/hu_index.html:6"}, "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-6963f2ca5ddfd3cd", "name": "Insecure pattern 'direct_innerhtml_assignment' in eu_src/flo_29185531.html:9", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in eu_src/flo_29185531.html:9"}, "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-8f057eb5269cf906", "name": "Insecure pattern 'direct_innerhtml_assignment' in eu_src/flo_28762499.html:14", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in eu_src/flo_28762499.html:14"}, "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-c925b61b9e74669c", "name": "Insecure pattern 'node_child_process' in sc_src/build-regions-geojson.cjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in sc_src/build-regions-geojson.cjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). 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-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/deploy-pages@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad6701f0a8405e22", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f79d0e1b50850025", "name": "Very large file: src/pages/RomaniaApp.tsx (2565 lines)", "shortDescription": {"text": "Very large file: src/pages/RomaniaApp.tsx (2565 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-ae9c816f90ed84c9", "name": "Very large file: src/pages/ItalyApp.tsx (2740 lines)", "shortDescription": {"text": "Very large file: src/pages/ItalyApp.tsx (2740 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-5fe5f2226169cba6", "name": "Very large file: src/pages/ArgentinaApp.tsx (3224 lines)", "shortDescription": {"text": "Very large file: src/pages/ArgentinaApp.tsx (3224 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-c664ab3be13b16ce", "name": "Very large file: src/pages/CanadaApp.tsx (2886 lines)", "shortDescription": {"text": "Very large file: src/pages/CanadaApp.tsx (2886 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-fe6d671658fb700a", "name": "Very large file: src/pages/IsraelApp.tsx (2359 lines)", "shortDescription": {"text": "Very large file: src/pages/IsraelApp.tsx (2359 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-8e4d802cb5484b63", "name": "Very large file: src/pages/IrelandApp.tsx (2018 lines)", "shortDescription": {"text": "Very large file: src/pages/IrelandApp.tsx (2018 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-3e441ddb2d73b211", "name": "Very large file: src/pages/NewZealandApp.tsx (938 lines)", "shortDescription": {"text": "Very large file: src/pages/NewZealandApp.tsx (938 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-f781211a79714104", "name": "Very large file: src/pages/PhilippinesApp.tsx (1646 lines)", "shortDescription": {"text": "Very large file: src/pages/PhilippinesApp.tsx (1646 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-e82bd764940903ac", "name": "Very large file: src/pages/ChileApp.tsx (1368 lines)", "shortDescription": {"text": "Very large file: src/pages/ChileApp.tsx (1368 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-d6ffe07cf46fb4d3", "name": "Very large file: src/pages/ColombiaApp.tsx (3212 lines)", "shortDescription": {"text": "Very large file: src/pages/ColombiaApp.tsx (3212 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-cd45ed1b03fb2f0a", "name": "Very large file: src/pages/LatviaApp.tsx (1868 lines)", "shortDescription": {"text": "Very large file: src/pages/LatviaApp.tsx (1868 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-a1bddebada7f5e3b", "name": "Very large file: src/pages/HomePage.tsx (2571 lines)", "shortDescription": {"text": "Very large file: src/pages/HomePage.tsx (2571 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-6b0f7ba920f9b8b2", "name": "Very large file: src/pages/BelarusApp.tsx (1306 lines)", "shortDescription": {"text": "Very large file: src/pages/BelarusApp.tsx (1306 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-20fc5197af08bf04", "name": "Very large file: src/pages/EstoniaApp.tsx (2192 lines)", "shortDescription": {"text": "Very large file: src/pages/EstoniaApp.tsx (2192 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-c63c3506617e78b6", "name": "Very large file: src/pages/USAApp.tsx (3334 lines)", "shortDescription": {"text": "Very large file: src/pages/USAApp.tsx (3334 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-15eb955aa9bacdbf", "name": "Very large file: src/pages/SwitzerlandApp.tsx (2198 lines)", "shortDescription": {"text": "Very large file: src/pages/SwitzerlandApp.tsx (2198 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-53bae3c019015b9c", "name": "Very large file: src/pages/SlovakiaApp.tsx (1977 lines)", "shortDescription": {"text": "Very large file: src/pages/SlovakiaApp.tsx (1977 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-263c2edb50be25f7", "name": "Very large file: src/pages/BrazilApp.tsx (2672 lines)", "shortDescription": {"text": "Very large file: src/pages/BrazilApp.tsx (2672 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-f4fffee152584b01", "name": "Very large file: src/pages/AustriaApp.tsx (1971 lines)", "shortDescription": {"text": "Very large file: src/pages/AustriaApp.tsx (1971 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-00b2191bba992490", "name": "Very large file: src/pages/TurkeyApp.tsx (3149 lines)", "shortDescription": {"text": "Very large file: src/pages/TurkeyApp.tsx (3149 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-83e43c324deeb48f", "name": "Very large file: src/pages/LuxembourgApp.tsx (1973 lines)", "shortDescription": {"text": "Very large file: src/pages/LuxembourgApp.tsx (1973 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-77247ec1db302156", "name": "Very large file: src/pages/MoldovaApp.tsx (1906 lines)", "shortDescription": {"text": "Very large file: src/pages/MoldovaApp.tsx (1906 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-189e3693ec79c061", "name": "Very large file: src/pages/SouthAfricaApp.tsx (2574 lines)", "shortDescription": {"text": "Very large file: src/pages/SouthAfricaApp.tsx (2574 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-0afa67bf36632611", "name": "Very large file: src/pages/JapanApp.tsx (2757 lines)", "shortDescription": {"text": "Very large file: src/pages/JapanApp.tsx (2757 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-4d6e4e68801a8dff", "name": "Very large file: src/pages/BelgiumApp.tsx (1929 lines)", "shortDescription": {"text": "Very large file: src/pages/BelgiumApp.tsx (1929 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-9ac000c569a02388", "name": "Very large file: src/pages/IndiaApp.tsx (949 lines)", "shortDescription": {"text": "Very large file: src/pages/IndiaApp.tsx (949 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-e4027b5df52e1a2d", "name": "Very large file: src/pages/GreeceApp.tsx (1968 lines)", "shortDescription": {"text": "Very large file: src/pages/GreeceApp.tsx (1968 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-d5a63855f999e7ac", "name": "Very large file: src/pages/ElSalvadorApp.tsx (1330 lines)", "shortDescription": {"text": "Very large file: src/pages/ElSalvadorApp.tsx (1330 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-4df2f10e055f8ea5", "name": "Very large file: src/pages/EUApp.tsx (2099 lines)", "shortDescription": {"text": "Very large file: src/pages/EUApp.tsx (2099 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-d0520c3310032dc0", "name": "Very large file: src/pages/USAHouseApp.tsx (1238 lines)", "shortDescription": {"text": "Very large file: src/pages/USAHouseApp.tsx (1238 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-9f8114dfacc5218d", "name": "Very large file: src/pages/NorthernIrelandApp.tsx (1928 lines)", "shortDescription": {"text": "Very large file: src/pages/NorthernIrelandApp.tsx (1928 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-57f2dbae745cc00f", "name": "Very large file: src/pages/NamibiaApp.tsx (2450 lines)", "shortDescription": {"text": "Very large file: src/pages/NamibiaApp.tsx (2450 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-d0f3619ff46cb614", "name": "Very large file: src/pages/TaiwanApp.tsx (1356 lines)", "shortDescription": {"text": "Very large file: src/pages/TaiwanApp.tsx (1356 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-a35a8f1bf89b05d3", "name": "Very large file: src/pages/PolandApp.tsx (2033 lines)", "shortDescription": {"text": "Very large file: src/pages/PolandApp.tsx (2033 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-669fb02eb45fa932", "name": "Very large file: src/pages/WalesApp.tsx (1911 lines)", "shortDescription": {"text": "Very large file: src/pages/WalesApp.tsx (1911 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-056aa9c57ee14789", "name": "Very large file: src/pages/NorwayApp.tsx (2325 lines)", "shortDescription": {"text": "Very large file: src/pages/NorwayApp.tsx (2325 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-d930a26b801b8bff", "name": "Very large file: src/pages/SpainApp.tsx (2123 lines)", "shortDescription": {"text": "Very large file: src/pages/SpainApp.tsx (2123 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-218d5fff2aacce2e", "name": "Very large file: src/pages/BulgariaApp.tsx (2030 lines)", "shortDescription": {"text": "Very large file: src/pages/BulgariaApp.tsx (2030 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-70be1df91b2fab27", "name": "Very large file: src/pages/CzechiaApp.tsx (2212 lines)", "shortDescription": {"text": "Very large file: src/pages/CzechiaApp.tsx (2212 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-c0bf19d7dbf23530", "name": "Very large file: src/pages/PeruApp.tsx (3377 lines)", "shortDescription": {"text": "Very large file: src/pages/PeruApp.tsx (3377 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-39ba840e2964e38e", "name": "Very large file: src/pages/MongoliaApp.tsx (3178 lines)", "shortDescription": {"text": "Very large file: src/pages/MongoliaApp.tsx (3178 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-8612237e0502caeb", "name": "Very large file: src/pages/ScotlandApp.tsx (2490 lines)", "shortDescription": {"text": "Very large file: src/pages/ScotlandApp.tsx (2490 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-c030e49fb5d655e0", "name": "Very large file: src/pages/LithuaniaApp.tsx (2154 lines)", "shortDescription": {"text": "Very large file: src/pages/LithuaniaApp.tsx (2154 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-4397ade6bfd7e9d0", "name": "Very large file: src/pages/MaltaApp.tsx (1925 lines)", "shortDescription": {"text": "Very large file: src/pages/MaltaApp.tsx (1925 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-10a06f4146d6a00a", "name": "Very large file: src/pages/NigeriaApp.tsx (1716 lines)", "shortDescription": {"text": "Very large file: src/pages/NigeriaApp.tsx (1716 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-4451d1847e24e232", "name": "Very large file: src/pages/IcelandApp.tsx (2239 lines)", "shortDescription": {"text": "Very large file: src/pages/IcelandApp.tsx (2239 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-12fae027502193c1", "name": "Very large file: src/pages/DenmarkApp.tsx (2699 lines)", "shortDescription": {"text": "Very large file: src/pages/DenmarkApp.tsx (2699 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-fe22ffb385e4926e", "name": "Very large file: src/pages/PortugalApp.tsx (1903 lines)", "shortDescription": {"text": "Very large file: src/pages/PortugalApp.tsx (1903 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-f2c106e4bd7ca6ba", "name": "Very large file: src/pages/FranceApp.tsx (3114 lines)", "shortDescription": {"text": "Very large file: src/pages/FranceApp.tsx (3114 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-2507779aae93be2f", "name": "Very large file: src/pages/VenezuelaApp.tsx (1350 lines)", "shortDescription": {"text": "Very large file: src/pages/VenezuelaApp.tsx (1350 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-d9186d819f160719", "name": "Very large file: src/pages/AustraliaApp.tsx (2861 lines)", "shortDescription": {"text": "Very large file: src/pages/AustraliaApp.tsx (2861 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-7fedac0e4bf40981", "name": "Very large file: src/pages/FranceLegislativeApp.tsx (1045 lines)", "shortDescription": {"text": "Very large file: src/pages/FranceLegislativeApp.tsx (1045 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-ea3ba0017bc0dbd2", "name": "Very large file: src/pages/GermanyApp.tsx (2539 lines)", "shortDescription": {"text": "Very large file: src/pages/GermanyApp.tsx (2539 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-756eac1262a9ef0b", "name": "Very large file: src/pages/SwedenApp.tsx (2366 lines)", "shortDescription": {"text": "Very large file: src/pages/SwedenApp.tsx (2366 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-7175b8bce03050de", "name": "Very large file: src/pages/HungaryApp.tsx (2023 lines)", "shortDescription": {"text": "Very large file: src/pages/HungaryApp.tsx (2023 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-fac31cbc920f05c3", "name": "Very large file: src/pages/SouthKoreaApp.tsx (2359 lines)", "shortDescription": {"text": "Very large file: src/pages/SouthKoreaApp.tsx (2359 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-dc0cfaf866f43d72", "name": "Very large file: src/pages/AlbaniaApp.tsx (1975 lines)", "shortDescription": {"text": "Very large file: src/pages/AlbaniaApp.tsx (1975 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-f46d266a0c0705b5", "name": "Very large file: src/pages/MexicoChamberApp.tsx (2510 lines)", "shortDescription": {"text": "Very large file: src/pages/MexicoChamberApp.tsx (2510 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-7f0f7b5a6779581e", "name": "Very large file: src/pages/FinlandApp.tsx (2176 lines)", "shortDescription": {"text": "Very large file: src/pages/FinlandApp.tsx (2176 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-581f16b19bcbe9af", "name": "Very large file: src/pages/RussiaApp.tsx (3026 lines)", "shortDescription": {"text": "Very large file: src/pages/RussiaApp.tsx (3026 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-e04747253e7c2fce", "name": "Very large file: src/pages/NetherlandsApp.tsx (1895 lines)", "shortDescription": {"text": "Very large file: src/pages/NetherlandsApp.tsx (1895 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-00934c188964fb1d", "name": "Very large file: src/pages/ThailandApp.tsx (2577 lines)", "shortDescription": {"text": "Very large file: src/pages/ThailandApp.tsx (2577 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-ed21b245c2af76a1", "name": "Very large file: src/store/useElectionStore.ts (1455 lines)", "shortDescription": {"text": "Very large file: src/store/useElectionStore.ts (1455 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": "7 test file(s) for 381 source file(s) (ratio 0.02). 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-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 979 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 42 placeholder/mock markers across 26 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, tests, operator-readme. 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, tests, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0ced46864f9f47f", "name": "Commented-code block (5 lines) in generate-poland-geojson.cjs:263", "shortDescription": {"text": "Commented-code block (5 lines) in generate-poland-geojson.cjs:263"}, "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-1345e9c5a698a93d", "name": "Commented-code block (5 lines) in generate-india-geojson.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in generate-india-geojson.cjs: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-8b4098c004f2eb29", "name": "Commented-code block (5 lines) in generate-nigeria-flag.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in generate-nigeria-flag.cjs: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-64698657d8093dfb", "name": "Commented-code block (5 lines) in it_src/fix_engine.cjs:18", "shortDescription": {"text": "Commented-code block (5 lines) in it_src/fix_engine.cjs:18"}, "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-4f95d55a8798cead", "name": "Commented-code block (5 lines) in cl_src/build.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in cl_src/build.cjs: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-1afccf46238416d0", "name": "Commented-code block (7 lines) in us_src/rebuild-us.cjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in us_src/rebuild-us.cjs: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-8fe2b7ac4ce950e5", "name": "Commented-code block (6 lines) in us_src/build-president-counties.cjs:3", "shortDescription": {"text": "Commented-code block (6 lines) in us_src/build-president-counties.cjs: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-84841b17ae35884d", "name": "Commented-code block (6 lines) in us_src/build-counties.cjs:5", "shortDescription": {"text": "Commented-code block (6 lines) in us_src/build-counties.cjs:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68053416a5134853", "name": "Commented-code block (6 lines) in us_src/apply-candidates.cjs:9", "shortDescription": {"text": "Commented-code block (6 lines) in us_src/apply-candidates.cjs:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-366065c4af061590", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/fetch-colors.cjs:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/fetch-colors.cjs:14"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83227c957c76d2dd", "name": "Commented-code block (5 lines) in ie_src/gen-ireland.cjs:186", "shortDescription": {"text": "Commented-code block (5 lines) in ie_src/gen-ireland.cjs:186"}, "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-281e31c6c13b4545", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/probe-osm.cjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/probe-osm.cjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c076fc9b3745702", "name": "Commented-code block (6 lines) in ie_src/make-app.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in ie_src/make-app.cjs: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-743df3670ce615ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/fetch-boundaries.cjs:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/fetch-boundaries.cjs: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-95c73a5bc9f6fa76", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/fetch-districts.cjs:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/fetch-districts.cjs:8"}, "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-d27163f3189e0abd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/fetch-localities.cjs:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/fetch-localities.cjs:11"}, "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-ef6bdd8cfa7e1f52", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/probe-osm.cjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/probe-osm.cjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-947bcf76ba639026", "name": "Commented-code block (5 lines) in seo_src/prerender.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in seo_src/prerender.cjs: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-8f46c6e8f559a6ba", "name": "Commented-code block (6 lines) in kr_src/gen_data.cjs:93", "shortDescription": {"text": "Commented-code block (6 lines) in kr_src/gen_data.cjs: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-940c7740bba355db", "name": "Commented-code block (5 lines) in mn_src/patch-app.cjs:34", "shortDescription": {"text": "Commented-code block (5 lines) in mn_src/patch-app.cjs:34"}, "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-12b8e76202ab1c83", "name": "Commented-code block (5 lines) in mn_src/gen-mongolia.cjs:59", "shortDescription": {"text": "Commented-code block (5 lines) in mn_src/gen-mongolia.cjs:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17a3e6413191aae9", "name": "Legacy-named symbol `regionsOld` in mn_src/make-app.cjs:116", "shortDescription": {"text": "Legacy-named symbol `regionsOld` in mn_src/make-app.cjs:116"}, "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-7becd8ef09cb6fce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 kr_build/links.cjs:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 kr_build/links.cjs:7"}, "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-e89b99d2a82124d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 kr_build/fetch_wt.cjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 kr_build/fetch_wt.cjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-673c2d4ac47b5164", "name": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/fetch-coords.cjs:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/fetch-coords.cjs:17"}, "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-d343e9f946394f66", "name": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/probe-cp2.cjs:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/probe-cp2.cjs:2"}, "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-2f1961b72afdcd6d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/fetch-coords-de.cjs:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/fetch-coords-de.cjs:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7d5b2cb31ae455f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/probe-cp.cjs:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/probe-cp.cjs:2"}, "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-769297428e2eff28", "name": "Commented-code block (5 lines) in na_src/gen-namibia.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in na_src/gen-namibia.cjs: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-f8168c895540b63e", "name": "Commented-code block (5 lines) in na_src/build-constituencies.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in na_src/build-constituencies.cjs: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-befdb6ec0aa7add5", "name": "Commented-code block (11 lines) in na_src/build-constituencies2.cjs:1", "shortDescription": {"text": "Commented-code block (11 lines) in na_src/build-constituencies2.cjs: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-3bca416a024a916c", "name": "Commented-code block (5 lines) in na_src/build-constituencies3.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in na_src/build-constituencies3.cjs: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-406ca199b3530251", "name": "Commented-code block (6 lines) in scripts/build-data.ts:229", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/build-data.ts:229"}, "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-630adffe2ef1d97d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-spain-geojson.mjs:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-spain-geojson.mjs:59"}, "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-3c72c66e532f6c91", "name": "Commented-code block (5 lines) in uk_src/reclassify-ind.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in uk_src/reclassify-ind.cjs: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-d3a93f95eed54205", "name": "Commented-code block (6 lines) in uk_src/clip-wards.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in uk_src/clip-wards.cjs: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-d83e863ae83fb9cd", "name": "Commented-code block (5 lines) in uk_src/build-2026-wards.cjs:19", "shortDescription": {"text": "Commented-code block (5 lines) in uk_src/build-2026-wards.cjs: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-c81cb77d93c7c1e1", "name": "Commented-code block (6 lines) in uk_src/inject-ward-res.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in uk_src/inject-ward-res.cjs: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-c2ff0beb84a5ae20", "name": "Commented-code block (5 lines) in ph_src/parse-2022.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in ph_src/parse-2022.cjs: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-131f2764c3f04cc6", "name": "Commented-code block (6 lines) in ph_src/build-geo.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in ph_src/build-geo.cjs: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-59e22e2025d0e120", "name": "Commented-code block (8 lines) in tr_src/fix_sliders.cjs:12", "shortDescription": {"text": "Commented-code block (8 lines) in tr_src/fix_sliders.cjs:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a7a5b2d66d92994", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hu_src/raw/hu_app.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hu_src/raw/hu_app.js:1"}, "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-b2fdfd6aae11b58d", "name": "Commented-code block (7 lines) in pe_src/gen-china.cjs:35", "shortDescription": {"text": "Commented-code block (7 lines) in pe_src/gen-china.cjs:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41bca11f04794368", "name": "Commented-code block (5 lines) in pe_src/gen-data.cjs:52", "shortDescription": {"text": "Commented-code block (5 lines) in pe_src/gen-data.cjs:52"}, "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-f6fa90f361ccf365", "name": "Commented-code block (5 lines) in ni_src/gen-ni.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in ni_src/gen-ni.cjs: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-49b7ec26c7af7182", "name": "Commented-code block (5 lines) in il_src/build-districts.cjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in il_src/build-districts.cjs: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-d15fa2f292a1b873", "name": "Commented-code block (12 lines) in eu_src/gen-ts.cjs:22", "shortDescription": {"text": "Commented-code block (12 lines) in eu_src/gen-ts.cjs:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff4afc208d8ca92b", "name": "Commented-code block (10 lines) in eu_src/build.cjs:1", "shortDescription": {"text": "Commented-code block (10 lines) in eu_src/build.cjs: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-f5dd4c076e69e25b", "name": "Commented-code block (6 lines) in mx_src/gen-districts.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in mx_src/gen-districts.cjs: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-5b05db2427f5f464", "name": "Commented-code block (6 lines) in mx_src/emit-ts.cjs:10", "shortDescription": {"text": "Commented-code block (6 lines) in mx_src/emit-ts.cjs: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-67ebfa586b2b7683", "name": "Commented-code block (5 lines) in sc_src/gen-scotland.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in sc_src/gen-scotland.cjs: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-da281c19e424760f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sc_src/fetch-boundaries.cjs:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sc_src/fetch-boundaries.cjs:9"}, "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-d26329a5c95ccba5", "name": "Commented-code block (5 lines) in th_src/gen2.cjs:8", "shortDescription": {"text": "Commented-code block (5 lines) in th_src/gen2.cjs:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73739249d4948fdd", "name": "Commented-code block (5 lines) in be_src/build-belgium-data.cjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in be_src/build-belgium-data.cjs: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-a32e3e1e25f7155b", "name": "Commented-code block (5 lines) in src/components/ConstituencyPanel.tsx:50", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ConstituencyPanel.tsx:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c44839ffd9b96160", "name": "Commented-code block (5 lines) in src/components/WardPanel.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/WardPanel.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1767a4da6b0a19e", "name": "Commented-code block (7 lines) in src/lib/usSwing.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/usSwing.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-1ea0bd126f59fafa", "name": "Commented-code block (5 lines) in src/lib/seo.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/seo.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-7e5fdf9c1ec0b9fe", "name": "Legacy-named symbol `rest_v1` in src/lib/wikiPhotos.ts:7", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in src/lib/wikiPhotos.ts:7"}, "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-aa3c8230fcfe5776", "name": "Commented-code block (5 lines) in src/lib/simClock.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/simClock.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-d6c6e7f7d9eaf652", "name": "Commented-code block (5 lines) in src/pages/RomaniaApp.tsx:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/RomaniaApp.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-22cdbe9f65137fc7", "name": "Commented-code block (5 lines) in src/pages/ItalyApp.tsx:351", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/ItalyApp.tsx:351"}, "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-9c6f2327c5799eb1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/ItalyApp.tsx:2321", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/ItalyApp.tsx:2321"}, "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-61a04f7378cdab1d", "name": "Commented-code block (5 lines) in src/pages/ArgentinaApp.tsx:1170", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/ArgentinaApp.tsx:1170"}, "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-eaab8bd4683b4f7a", "name": "Commented-code block (7 lines) in src/pages/IsraelApp.tsx:16", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/IsraelApp.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a04abd3e5ece2cc", "name": "Commented-code block (5 lines) in src/pages/IrelandApp.tsx:121", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/IrelandApp.tsx:121"}, "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-00aba5c2913f1d28", "name": "Commented-code block (5 lines) in src/pages/PhilippinesApp.tsx:1402", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/PhilippinesApp.tsx:1402"}, "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-8a13cc4adb9c70e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/PhilippinesApp.tsx:297", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/PhilippinesApp.tsx:297"}, "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-30e4edfdfffd1f71", "name": "Commented-code block (7 lines) in src/pages/NorthKoreaApp.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/NorthKoreaApp.tsx: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-b5eb3e6a28a89407", "name": "Commented-code block (16 lines) in src/pages/ColombiaApp.tsx:1236", "shortDescription": {"text": "Commented-code block (16 lines) in src/pages/ColombiaApp.tsx:1236"}, "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-92ea705915dc3475", "name": "Commented-code block (7 lines) in src/pages/LatviaApp.tsx:122", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/LatviaApp.tsx:122"}, "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-c0f111a26c977880", "name": "Commented-code block (5 lines) in src/pages/HomePage.tsx:820", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/HomePage.tsx:820"}, "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-ea281e446c85a08e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/HomePage.tsx:977", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/HomePage.tsx:977"}, "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-db151e9172523917", "name": "Commented-code block (6 lines) in src/pages/USAApp.tsx:306", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/USAApp.tsx:306"}, "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-850e67cef79e6e63", "name": "Commented-code block (5 lines) in src/pages/BrazilApp.tsx:891", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/BrazilApp.tsx:891"}, "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-bf2396923ceb2907", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/BrazilApp.tsx:395", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/BrazilApp.tsx:395"}, "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-2a459a0ad477ff19", "name": "Commented-code block (6 lines) in src/pages/AustriaApp.tsx:807", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/AustriaApp.tsx:807"}, "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-5a028b2c061168a7", "name": "Commented-code block (5 lines) in src/pages/TurkeyApp.tsx:1344", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/TurkeyApp.tsx:1344"}, "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-7806703916a9c3b5", "name": "Commented-code block (5 lines) in src/pages/LuxembourgApp.tsx:69", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/LuxembourgApp.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-ccee3bd8fefa2a2b", "name": "Commented-code block (6 lines) in src/pages/JapanApp.tsx:79", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/JapanApp.tsx:79"}, "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-f8d3e097f8a4de70", "name": "Commented-code block (8 lines) in src/pages/IndiaApp.tsx:17", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/IndiaApp.tsx:17"}, "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-58a06f13f799c3f5", "name": "Commented-code block (5 lines) in src/pages/GreeceApp.tsx:185", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/GreeceApp.tsx:185"}, "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-05b9eb3b20216b63", "name": "Commented-code block (11 lines) in src/pages/EUApp.tsx:22", "shortDescription": {"text": "Commented-code block (11 lines) in src/pages/EUApp.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0cb6c3334c14a14", "name": "Legacy-named symbol `geoOld` in src/pages/USAHouseApp.tsx:767", "shortDescription": {"text": "Legacy-named symbol `geoOld` in src/pages/USAHouseApp.tsx:767"}, "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-bd0d9ae633103d87", "name": "Commented-code block (10 lines) in src/pages/USAHouseApp.tsx:19", "shortDescription": {"text": "Commented-code block (10 lines) in src/pages/USAHouseApp.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-52ab125aa80ad15c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/USAHouseApp.tsx:472", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/USAHouseApp.tsx:472"}, "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-fe5b6f7936d14804", "name": "Commented-code block (5 lines) in src/pages/NorthernIrelandApp.tsx:169", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/NorthernIrelandApp.tsx:169"}, "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-969cb27c4c60369e", "name": "Commented-code block (6 lines) in src/pages/PolandApp.tsx:125", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/PolandApp.tsx:125"}, "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-f58db94377c23f13", "name": "Commented-code block (7 lines) in src/pages/ChinaApp.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/ChinaApp.tsx: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-c9b5d939df0f9b4c", "name": "Commented-code block (8 lines) in src/pages/SpainApp.tsx:145", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/SpainApp.tsx:145"}, "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-95ee11d5896d92cb", "name": "Commented-code block (19 lines) in src/pages/PeruApp.tsx:1319", "shortDescription": {"text": "Commented-code block (19 lines) in src/pages/PeruApp.tsx:1319"}, "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-c2833bb6b73a7d2b", "name": "Commented-code block (5 lines) in src/pages/MongoliaApp.tsx:1140", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/MongoliaApp.tsx:1140"}, "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-e25a0fd41657c606", "name": "Commented-code block (6 lines) in src/pages/ScotlandApp.tsx:923", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/ScotlandApp.tsx:923"}, "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-daa27387897a8a51", "name": "Commented-code block (7 lines) in src/pages/NigeriaApp.tsx:316", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/NigeriaApp.tsx:316"}, "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-d906ed9ce6ec65ca", "name": "Commented-code block (5 lines) in src/pages/FranceApp.tsx:1320", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/FranceApp.tsx:1320"}, "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-56b9ce2a20feaa29", "name": "Commented-code block (5 lines) in src/pages/SwedenApp.tsx:209", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/SwedenApp.tsx:209"}, "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-5989359a8f6cf264", "name": "Commented-code block (7 lines) in src/pages/HungaryApp.tsx:235", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/HungaryApp.tsx:235"}, "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-4f3e5e9b0a39a288", "name": "Commented-code block (5 lines) in src/pages/SouthKoreaApp.tsx:1452", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/SouthKoreaApp.tsx:1452"}, "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-03405ea0a8cedfc5", "name": "Commented-code block (5 lines) in src/pages/MexicoApp.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/MexicoApp.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-fd9eb13b19a17b35", "name": "Commented-code block (5 lines) in src/pages/RussiaApp.tsx:351", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/RussiaApp.tsx:351"}, "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-e31c23b9c7ce8e56", "name": "Commented-code block (8 lines) in src/store/useElectionStore.ts:792", "shortDescription": {"text": "Commented-code block (8 lines) in src/store/useElectionStore.ts:792"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/17918"}, "properties": {"repository": "realleochang/globalelectionsimulator", "repoUrl": "https://github.com/realleochang/globalelectionsimulator", "branch": "main"}, "results": [{"ruleId": "scanner-90aae9686024b119", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fetch_romania_counties.js:81"}, "properties": {"repobilityId": "e340dc90991484a0", "scanner": "scanner-primary", "fingerprint": "90aae9686024b119", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-126e9e2cf3388b18", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-data.ts:129"}, "properties": {"repobilityId": "6e09882d4e1ad73f", "scanner": "scanner-primary", "fingerprint": "126e9e2cf3388b18", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34ad12d3a1990cc8", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/App.tsx:50"}, "properties": {"repobilityId": "b64317d1557500be", "scanner": "scanner-primary", "fingerprint": "34ad12d3a1990cc8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0b1810c3d2062034", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/ConstituencyPanel.tsx:189"}, "properties": {"repobilityId": "5643d3595b149df2", "scanner": "scanner-primary", "fingerprint": "0b1810c3d2062034", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f2a05a88f812c938", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ConstituencyPanel.tsx:122"}, "properties": {"repobilityId": "d0d2eca4c70c61d5", "scanner": "scanner-primary", "fingerprint": "f2a05a88f812c938", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b86e058080136507", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/MultiSelectPanel.tsx:113"}, "properties": {"repobilityId": "8c92d0f7419c7e6b", "scanner": "scanner-primary", "fingerprint": "b86e058080136507", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f392b776d2f8ef66", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/ParliamentModal.tsx:136"}, "properties": {"repobilityId": "b69e01053a67fbdd", "scanner": "scanner-primary", "fingerprint": "f392b776d2f8ef66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-57913c2b081c0949", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/SimulationPanel.tsx:278"}, "properties": {"repobilityId": "c08e0da2b52bba9c", "scanner": "scanner-primary", "fingerprint": "57913c2b081c0949", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-4636f172751d3241", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SimulationPanel.tsx:442"}, "properties": {"repobilityId": "de0c3742504b4f23", "scanner": "scanner-primary", "fingerprint": "4636f172751d3241", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4819b8254cc4ad10", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PartyManagerPanel.tsx:27"}, "properties": {"repobilityId": "59cbf2034d175797", "scanner": "scanner-primary", "fingerprint": "4819b8254cc4ad10", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0818dd9eb3f3bb53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SandboxStudio.tsx:136"}, "properties": {"repobilityId": "88da1365ad8fa320", "scanner": "scanner-primary", "fingerprint": "0818dd9eb3f3bb53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5710a3f54f088b82", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/BreakdownDrawer.tsx:165"}, "properties": {"repobilityId": "108f9e4a8505caa5", "scanner": "scanner-primary", "fingerprint": "5710a3f54f088b82", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c42800231970306d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/WardPanel.tsx:84"}, "properties": {"repobilityId": "bc2c51b8a9782c2f", "scanner": "scanner-primary", "fingerprint": "c42800231970306d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e972a4ce6e85c59", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/RomaniaApp.tsx:1137"}, "properties": {"repobilityId": "6cc5a782725b37e5", "scanner": "scanner-primary", "fingerprint": "7e972a4ce6e85c59", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e29f3ec1a89679cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/RomaniaApp.tsx:1132"}, "properties": {"repobilityId": "8db8efc19c1bb89f", "scanner": "scanner-primary", "fingerprint": "e29f3ec1a89679cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74e55f1c32d66adf", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ItalyApp.tsx:1471"}, "properties": {"repobilityId": "54dc356a066932c9", "scanner": "scanner-primary", "fingerprint": "74e55f1c32d66adf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b617f3698dcb09e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ItalyApp.tsx:1522"}, "properties": {"repobilityId": "2a41d5bc7dd45ad1", "scanner": "scanner-primary", "fingerprint": "b617f3698dcb09e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93d745befadd32e1", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ArgentinaApp.tsx:975"}, "properties": {"repobilityId": "64da54a78ff2c587", "scanner": "scanner-primary", "fingerprint": "93d745befadd32e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-fae98ba570993ab6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ArgentinaApp.tsx:968"}, "properties": {"repobilityId": "8a80bd27cab08e1a", "scanner": "scanner-primary", "fingerprint": "fae98ba570993ab6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d200546f2892f8b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/CanadaApp.tsx:1088"}, "properties": {"repobilityId": "2b5887d675a344a7", "scanner": "scanner-primary", "fingerprint": "0d200546f2892f8b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-fb4a317374c91de7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/CanadaApp.tsx:302"}, "properties": {"repobilityId": "fd61611288ba939a", "scanner": "scanner-primary", "fingerprint": "fb4a317374c91de7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37e197043bff8d6b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/IsraelApp.tsx:1082"}, "properties": {"repobilityId": "c8184fde163cd9c7", "scanner": "scanner-primary", "fingerprint": "37e197043bff8d6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2123cbb65bea1cea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IsraelApp.tsx:1092"}, "properties": {"repobilityId": "f9489f917ceb903a", "scanner": "scanner-primary", "fingerprint": "2123cbb65bea1cea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1ae5a7bd9a810d9", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/IrelandApp.tsx:973"}, "properties": {"repobilityId": "8082f524cea7c50d", "scanner": "scanner-primary", "fingerprint": "a1ae5a7bd9a810d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-cc1f44d966e68f5a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IrelandApp.tsx:991"}, "properties": {"repobilityId": "466dace6067917e9", "scanner": "scanner-primary", "fingerprint": "cc1f44d966e68f5a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c2798d0a1703827", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/NewZealandApp.tsx:353"}, "properties": {"repobilityId": "f5029bef84c2d53d", "scanner": "scanner-primary", "fingerprint": "4c2798d0a1703827", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ebe2f109be62b380", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NewZealandApp.tsx:362"}, "properties": {"repobilityId": "e452c3600b594c9d", "scanner": "scanner-primary", "fingerprint": "ebe2f109be62b380", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b8fc40ccbf336bc", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/PhilippinesApp.tsx:705"}, "properties": {"repobilityId": "b3b333c0b5021047", "scanner": "scanner-primary", "fingerprint": "1b8fc40ccbf336bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-991d63fde3d15225", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PhilippinesApp.tsx:700"}, "properties": {"repobilityId": "c3295d9a44673673", "scanner": "scanner-primary", "fingerprint": "991d63fde3d15225", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d48d69a084e7a0f7", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/NorthKoreaApp.tsx:298"}, "properties": {"repobilityId": "983d614da0487eaf", "scanner": "scanner-primary", "fingerprint": "d48d69a084e7a0f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-07df66637ca57ad0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorthKoreaApp.tsx:321"}, "properties": {"repobilityId": "be8ace24c8347ba4", "scanner": "scanner-primary", "fingerprint": "07df66637ca57ad0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17db5171e779f233", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ChileApp.tsx:755"}, "properties": {"repobilityId": "89adcbc78c6b9b94", "scanner": "scanner-primary", "fingerprint": "17db5171e779f233", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e5c067efd9e7b9ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ChileApp.tsx:752"}, "properties": {"repobilityId": "d8c3c76eeb757ebc", "scanner": "scanner-primary", "fingerprint": "e5c067efd9e7b9ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c74af9f2e40944e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ColombiaApp.tsx:1064"}, "properties": {"repobilityId": "d23fdede3bc376e6", "scanner": "scanner-primary", "fingerprint": "9c74af9f2e40944e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8012cbb6f56ead36", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ColombiaApp.tsx:1057"}, "properties": {"repobilityId": "2839e2ee4e83a5c0", "scanner": "scanner-primary", "fingerprint": "8012cbb6f56ead36", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0240baa349e21d2b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/LatviaApp.tsx:826"}, "properties": {"repobilityId": "dc3627e7eee70dfd", "scanner": "scanner-primary", "fingerprint": "0240baa349e21d2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-35f57e8d8dc44533", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LatviaApp.tsx:903"}, "properties": {"repobilityId": "153899f2d2150a91", "scanner": "scanner-primary", "fingerprint": "35f57e8d8dc44533", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-130d8109c91ce251", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/HomePage.tsx:1843"}, "properties": {"repobilityId": "a039ee569fe4e0ac", "scanner": "scanner-primary", "fingerprint": "130d8109c91ce251", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68d09b7cd1a7ddd2", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/BelarusApp.tsx:714"}, "properties": {"repobilityId": "5f95166059d461ec", "scanner": "scanner-primary", "fingerprint": "68d09b7cd1a7ddd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-71f9dfbe6b7614da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BelarusApp.tsx:711"}, "properties": {"repobilityId": "19f66780b7929437", "scanner": "scanner-primary", "fingerprint": "71f9dfbe6b7614da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c16762bec7eccb5", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/EstoniaApp.tsx:1167"}, "properties": {"repobilityId": "5e6de5dfd74afe3e", "scanner": "scanner-primary", "fingerprint": "1c16762bec7eccb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9adb049ef314f8c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/EstoniaApp.tsx:1192"}, "properties": {"repobilityId": "9850a6ab28261185", "scanner": "scanner-primary", "fingerprint": "9adb049ef314f8c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d4d078d9e2f0247", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/USAApp.tsx:1939"}, "properties": {"repobilityId": "a766c5b124cf49f5", "scanner": "scanner-primary", "fingerprint": "0d4d078d9e2f0247", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-5f934d70366323c9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/USAApp.tsx:1050"}, "properties": {"repobilityId": "9643c0b1282d8731", "scanner": "scanner-primary", "fingerprint": "5f934d70366323c9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b47dce1b36cc1864", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/SwitzerlandApp.tsx:1166"}, "properties": {"repobilityId": "f93b4c0dfed2873f", "scanner": "scanner-primary", "fingerprint": "b47dce1b36cc1864", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-00b065f085146a21", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SwitzerlandApp.tsx:1191"}, "properties": {"repobilityId": "8ded04bad8a28a86", "scanner": "scanner-primary", "fingerprint": "00b065f085146a21", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c50530af1864a66", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/SlovakiaApp.tsx:1005"}, "properties": {"repobilityId": "d8cfd18025e88ce6", "scanner": "scanner-primary", "fingerprint": "2c50530af1864a66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d2adcfaf1685d9c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SlovakiaApp.tsx:1015"}, "properties": {"repobilityId": "b50917cb26d1c354", "scanner": "scanner-primary", "fingerprint": "d2adcfaf1685d9c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71b9272908f70a9c", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/BrazilApp.tsx:736"}, "properties": {"repobilityId": "04b2e4e0645f45eb", "scanner": "scanner-primary", "fingerprint": "71b9272908f70a9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7760a1c85b03317a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BrazilApp.tsx:596"}, "properties": {"repobilityId": "a4ea6d823513c350", "scanner": "scanner-primary", "fingerprint": "7760a1c85b03317a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36f707d25f55d7be", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/AustriaApp.tsx:841"}, "properties": {"repobilityId": "31f4e46ecb6da171", "scanner": "scanner-primary", "fingerprint": "36f707d25f55d7be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-073b332e47d5c8b5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AustriaApp.tsx:861"}, "properties": {"repobilityId": "2c56a24a631377d3", "scanner": "scanner-primary", "fingerprint": "073b332e47d5c8b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d322fdee45b2efeb", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/TurkeyApp.tsx:934"}, "properties": {"repobilityId": "b23eafb1f8f0e4e3", "scanner": "scanner-primary", "fingerprint": "d322fdee45b2efeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-37d315e8a17a33d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TurkeyApp.tsx:927"}, "properties": {"repobilityId": "0b420c9e69d5d29f", "scanner": "scanner-primary", "fingerprint": "37d315e8a17a33d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-502afe86155bf535", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/CustomSwingModal.tsx:141"}, "properties": {"repobilityId": "854c15e6904f975e", "scanner": "scanner-primary", "fingerprint": "502afe86155bf535", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-bb85e49ff0af40ac", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/LuxembourgApp.tsx:981"}, "properties": {"repobilityId": "d873bf5b4f44ea4b", "scanner": "scanner-primary", "fingerprint": "bb85e49ff0af40ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d9f6d076e7b5c50b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LuxembourgApp.tsx:991"}, "properties": {"repobilityId": "c8b6b31bd71ad442", "scanner": "scanner-primary", "fingerprint": "d9f6d076e7b5c50b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-949627fbb784c0f0", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/MoldovaApp.tsx:933"}, "properties": {"repobilityId": "bc44377d839ab154", "scanner": "scanner-primary", "fingerprint": "949627fbb784c0f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-273f7d51121d7db3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MoldovaApp.tsx:943"}, "properties": {"repobilityId": "5882a58899fde111", "scanner": "scanner-primary", "fingerprint": "273f7d51121d7db3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ff8ea9032182302", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/SouthAfricaApp.tsx:891"}, "properties": {"repobilityId": "6761b48e38bc7d32", "scanner": "scanner-primary", "fingerprint": "9ff8ea9032182302", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-cd7ce3d9051baf42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SouthAfricaApp.tsx:886"}, "properties": {"repobilityId": "7bd209bab908cca3", "scanner": "scanner-primary", "fingerprint": "cd7ce3d9051baf42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-865efba57e2f7c65", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/JapanApp.tsx:1401"}, "properties": {"repobilityId": "f5d225cfd31052f1", "scanner": "scanner-primary", "fingerprint": "865efba57e2f7c65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-650232b112416491", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/JapanApp.tsx:1478"}, "properties": {"repobilityId": "69b90f83cee319c5", "scanner": "scanner-primary", "fingerprint": "650232b112416491", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fc1dd79558f25d1", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/BelgiumApp.tsx:884"}, "properties": {"repobilityId": "b8e2b1ab997e10a3", "scanner": "scanner-primary", "fingerprint": "0fc1dd79558f25d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2b9c9ad703547e92", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BelgiumApp.tsx:902"}, "properties": {"repobilityId": "55c7fb94b0c9725f", "scanner": "scanner-primary", "fingerprint": "2b9c9ad703547e92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-31c13b7bf9ae70af", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/IndiaApp.tsx:350"}, "properties": {"repobilityId": "6a1cdca28b4c6168", "scanner": "scanner-primary", "fingerprint": "31c13b7bf9ae70af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a6109d36605bd22c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IndiaApp.tsx:652"}, "properties": {"repobilityId": "daaf47949bea8526", "scanner": "scanner-primary", "fingerprint": "a6109d36605bd22c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c67baa09d001c76d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/GreeceApp.tsx:915"}, "properties": {"repobilityId": "d6f08dee8ef41fa5", "scanner": "scanner-primary", "fingerprint": "c67baa09d001c76d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0eb4c0f8d5645ef5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/GreeceApp.tsx:948"}, "properties": {"repobilityId": "846b380d6dee1170", "scanner": "scanner-primary", "fingerprint": "0eb4c0f8d5645ef5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86f7582aa5da46fd", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ElSalvadorApp.tsx:733"}, "properties": {"repobilityId": "4c1406c4039d084f", "scanner": "scanner-primary", "fingerprint": "86f7582aa5da46fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e82327f38eb87f70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ElSalvadorApp.tsx:730"}, "properties": {"repobilityId": "cdf75ff3b3275ad0", "scanner": "scanner-primary", "fingerprint": "e82327f38eb87f70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a63c3bb1cc7b1148", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/EUApp.tsx:945"}, "properties": {"repobilityId": "822530fef941fb65", "scanner": "scanner-primary", "fingerprint": "a63c3bb1cc7b1148", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-c1fa4f2946227ed7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/EUApp.tsx:1021"}, "properties": {"repobilityId": "147aae781a5faf21", "scanner": "scanner-primary", "fingerprint": "c1fa4f2946227ed7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e37338cd44e0f41", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/USAHouseApp.tsx:418"}, "properties": {"repobilityId": "adf7013b46ea7645", "scanner": "scanner-primary", "fingerprint": "6e37338cd44e0f41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-366ebbe40599b94f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/USAHouseApp.tsx:415"}, "properties": {"repobilityId": "9fe16f57b3988c83", "scanner": "scanner-primary", "fingerprint": "366ebbe40599b94f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cea7a5b064043670", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/NorthernIrelandApp.tsx:890"}, "properties": {"repobilityId": "bbb575452a8d153f", "scanner": "scanner-primary", "fingerprint": "cea7a5b064043670", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7b5fc5f063858ca5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorthernIrelandApp.tsx:908"}, "properties": {"repobilityId": "26ab91a2e16ba373", "scanner": "scanner-primary", "fingerprint": "7b5fc5f063858ca5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0de959e9ef413320", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/NamibiaApp.tsx:1317"}, "properties": {"repobilityId": "3f3bfeedaa669c4d", "scanner": "scanner-primary", "fingerprint": "0de959e9ef413320", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9f05a77e5c34cee3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NamibiaApp.tsx:1327"}, "properties": {"repobilityId": "fddd9c8598201590", "scanner": "scanner-primary", "fingerprint": "9f05a77e5c34cee3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6dd7ee16435f5632", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/TaiwanApp.tsx:760"}, "properties": {"repobilityId": "0519754c85cb969c", "scanner": "scanner-primary", "fingerprint": "6dd7ee16435f5632", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-481f823721d67c8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/TaiwanApp.tsx:757"}, "properties": {"repobilityId": "9eac1750bc734f6b", "scanner": "scanner-primary", "fingerprint": "481f823721d67c8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9b5964d0fca986b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/PolandApp.tsx:973"}, "properties": {"repobilityId": "4a6f1c631c37ba20", "scanner": "scanner-primary", "fingerprint": "d9b5964d0fca986b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-97133583ca6cf901", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PolandApp.tsx:1050"}, "properties": {"repobilityId": "ea25ea9e0a98f390", "scanner": "scanner-primary", "fingerprint": "97133583ca6cf901", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7632a85f144a9f0b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ChinaApp.tsx:370"}, "properties": {"repobilityId": "7014e7630875d004", "scanner": "scanner-primary", "fingerprint": "7632a85f144a9f0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ad1e42f68eee6d3c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ChinaApp.tsx:367"}, "properties": {"repobilityId": "55c54f824c1a8fcc", "scanner": "scanner-primary", "fingerprint": "ad1e42f68eee6d3c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6d549cd751c7858", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/WalesApp.tsx:872"}, "properties": {"repobilityId": "45f0591ae7746480", "scanner": "scanner-primary", "fingerprint": "e6d549cd751c7858", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2a37fa9d4ff3a0e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/WalesApp.tsx:890"}, "properties": {"repobilityId": "854f3bde1769129e", "scanner": "scanner-primary", "fingerprint": "2a37fa9d4ff3a0e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-622707b91604d263", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/NorwayApp.tsx:1272"}, "properties": {"repobilityId": "a44b13911f504cb8", "scanner": "scanner-primary", "fingerprint": "622707b91604d263", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-97a6a811b283c26e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NorwayApp.tsx:1298"}, "properties": {"repobilityId": "c0ff3a8c59cae740", "scanner": "scanner-primary", "fingerprint": "97a6a811b283c26e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b1a8704bbe2844be", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/SpainApp.tsx:1105"}, "properties": {"repobilityId": "5a9808e9fe7cced2", "scanner": "scanner-primary", "fingerprint": "b1a8704bbe2844be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3e6fdecaba8ef61f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SpainApp.tsx:1146"}, "properties": {"repobilityId": "62bc32b30215e26b", "scanner": "scanner-primary", "fingerprint": "3e6fdecaba8ef61f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4590e2b358effef2", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/BulgariaApp.tsx:1052"}, "properties": {"repobilityId": "43889a3d61dc8652", "scanner": "scanner-primary", "fingerprint": "4590e2b358effef2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-714f75f5f6a92e29", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/BulgariaApp.tsx:1062"}, "properties": {"repobilityId": "559dbffe78f41a29", "scanner": "scanner-primary", "fingerprint": "714f75f5f6a92e29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0968aa3f4b03f959", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/CzechiaApp.tsx:1182"}, "properties": {"repobilityId": "6b29f6c72241214e", "scanner": "scanner-primary", "fingerprint": "0968aa3f4b03f959", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-6888c775ac6fda9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/CzechiaApp.tsx:1207"}, "properties": {"repobilityId": "6c3e5ad629e8c997", "scanner": "scanner-primary", "fingerprint": "6888c775ac6fda9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c1cce6fa2af4248", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/PeruApp.tsx:1147"}, "properties": {"repobilityId": "f4fdf499727978d6", "scanner": "scanner-primary", "fingerprint": "0c1cce6fa2af4248", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-de980aabed2e4cd9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PeruApp.tsx:1140"}, "properties": {"repobilityId": "7d9077ff6a34c9f7", "scanner": "scanner-primary", "fingerprint": "de980aabed2e4cd9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cdb1ff32167e15b1", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/MongoliaApp.tsx:968"}, "properties": {"repobilityId": "de4116c1dbf810e0", "scanner": "scanner-primary", "fingerprint": "cdb1ff32167e15b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-88beb415bba62a7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MongoliaApp.tsx:961"}, "properties": {"repobilityId": "e34f67da7245dc1b", "scanner": "scanner-primary", "fingerprint": "88beb415bba62a7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a08a2698bd8fd15b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ScotlandApp.tsx:1419"}, "properties": {"repobilityId": "3f7ed4e0668ccd5c", "scanner": "scanner-primary", "fingerprint": "a08a2698bd8fd15b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f1cea1d9b08c58e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ScotlandApp.tsx:1437"}, "properties": {"repobilityId": "c41d95ee3a9807f0", "scanner": "scanner-primary", "fingerprint": "f1cea1d9b08c58e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edb4ef98ce76bf53", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/LithuaniaApp.tsx:1139"}, "properties": {"repobilityId": "c0aa18b19a4f7957", "scanner": "scanner-primary", "fingerprint": "edb4ef98ce76bf53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0f87099376b3e649", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/LithuaniaApp.tsx:1164"}, "properties": {"repobilityId": "57e7bf7e833315f9", "scanner": "scanner-primary", "fingerprint": "0f87099376b3e649", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5da8fbb8076babf8", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/MaltaApp.tsx:888"}, "properties": {"repobilityId": "07d33dc3679e03f9", "scanner": "scanner-primary", "fingerprint": "5da8fbb8076babf8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-5bff016f0cea6096", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MaltaApp.tsx:906"}, "properties": {"repobilityId": "b693ac4d12b8ee0d", "scanner": "scanner-primary", "fingerprint": "5bff016f0cea6096", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8fff616f2ae0119f", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/NigeriaApp.tsx:901"}, "properties": {"repobilityId": "cb868894a131503c", "scanner": "scanner-primary", "fingerprint": "8fff616f2ae0119f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9cb11d0ae5b3f667", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NigeriaApp.tsx:423"}, "properties": {"repobilityId": "6cb9666b4178bc38", "scanner": "scanner-primary", "fingerprint": "9cb11d0ae5b3f667", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e677c09bbb8e082f", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/IcelandApp.tsx:1214"}, "properties": {"repobilityId": "ad18caae9adb4e31", "scanner": "scanner-primary", "fingerprint": "e677c09bbb8e082f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-bb2c996357291cfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/IcelandApp.tsx:1239"}, "properties": {"repobilityId": "7acc2c2392ee50cd", "scanner": "scanner-primary", "fingerprint": "bb2c996357291cfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3e4f298ae721e32", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/DenmarkApp.tsx:1452"}, "properties": {"repobilityId": "a62a48d2d0af9760", "scanner": "scanner-primary", "fingerprint": "d3e4f298ae721e32", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-71808861943ea79f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DenmarkApp.tsx:1478"}, "properties": {"repobilityId": "d05ee17cc5e77d53", "scanner": "scanner-primary", "fingerprint": "71808861943ea79f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-721c989c3d52a1f8", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/PortugalApp.tsx:909"}, "properties": {"repobilityId": "4b90330184898aa1", "scanner": "scanner-primary", "fingerprint": "721c989c3d52a1f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-99a2af25570bcbfa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PortugalApp.tsx:935"}, "properties": {"repobilityId": "b2298210999f9f60", "scanner": "scanner-primary", "fingerprint": "99a2af25570bcbfa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee8e08afb5e37991", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/FranceApp.tsx:925"}, "properties": {"repobilityId": "7f40005376d20b7f", "scanner": "scanner-primary", "fingerprint": "ee8e08afb5e37991", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7dde8bd95b12ef0d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FranceApp.tsx:918"}, "properties": {"repobilityId": "e59506da2364f2f2", "scanner": "scanner-primary", "fingerprint": "7dde8bd95b12ef0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d869fd9720bc0f90", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/VenezuelaApp.tsx:754"}, "properties": {"repobilityId": "c57cc033ae34c2ea", "scanner": "scanner-primary", "fingerprint": "d869fd9720bc0f90", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e4ff547c3208ad34", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/VenezuelaApp.tsx:751"}, "properties": {"repobilityId": "9e6a2b001e3df68d", "scanner": "scanner-primary", "fingerprint": "e4ff547c3208ad34", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4bbe30b78a1390b6", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/AustraliaApp.tsx:873"}, "properties": {"repobilityId": "ea4f79ef958ebb8d", "scanner": "scanner-primary", "fingerprint": "4bbe30b78a1390b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-54ab3984cbea7f4b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AustraliaApp.tsx:835"}, "properties": {"repobilityId": "70e6375ef92afd7a", "scanner": "scanner-primary", "fingerprint": "54ab3984cbea7f4b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c3b8c217b69f603", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/FranceLegislativeApp.tsx:406"}, "properties": {"repobilityId": "d9d0daf4e6554b11", "scanner": "scanner-primary", "fingerprint": "0c3b8c217b69f603", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ebc0c0a17900a977", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FranceLegislativeApp.tsx:414"}, "properties": {"repobilityId": "58699d6b15b0b489", "scanner": "scanner-primary", "fingerprint": "ebc0c0a17900a977", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c68f29332bbfc57c", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/GermanyApp.tsx:749"}, "properties": {"repobilityId": "f576d847fe66a4e9", "scanner": "scanner-primary", "fingerprint": "c68f29332bbfc57c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-034a8954706ed721", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/GermanyApp.tsx:744"}, "properties": {"repobilityId": "cce6a1f41fcff2ff", "scanner": "scanner-primary", "fingerprint": "034a8954706ed721", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-691f8a6a7a72acdd", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/SwedenApp.tsx:1310"}, "properties": {"repobilityId": "a42dc751df55f763", "scanner": "scanner-primary", "fingerprint": "691f8a6a7a72acdd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-1adddb1fb0c05585", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SwedenApp.tsx:1336"}, "properties": {"repobilityId": "ce096d10f3f7c34f", "scanner": "scanner-primary", "fingerprint": "1adddb1fb0c05585", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a47000bcc8ae54e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/HungaryApp.tsx:890"}, "properties": {"repobilityId": "c2a8094eadedc601", "scanner": "scanner-primary", "fingerprint": "4a47000bcc8ae54e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a54db708b9d94747", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/HungaryApp.tsx:910"}, "properties": {"repobilityId": "3a0ddf73edcdfcfc", "scanner": "scanner-primary", "fingerprint": "a54db708b9d94747", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-814febfcf0ab2e8b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/SouthKoreaApp.tsx:691"}, "properties": {"repobilityId": "c19d7ebe18bc9a64", "scanner": "scanner-primary", "fingerprint": "814febfcf0ab2e8b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-bccc2f014d27c9d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/SouthKoreaApp.tsx:686"}, "properties": {"repobilityId": "3dc02f57f9f3e91a", "scanner": "scanner-primary", "fingerprint": "bccc2f014d27c9d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9648ec811da49615", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/AlbaniaApp.tsx:1009"}, "properties": {"repobilityId": "7509821f2843af02", "scanner": "scanner-primary", "fingerprint": "9648ec811da49615", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-78293e6bf270a30d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AlbaniaApp.tsx:1019"}, "properties": {"repobilityId": "7cff065865b47775", "scanner": "scanner-primary", "fingerprint": "78293e6bf270a30d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bc05087e56de5e0", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/MexicoChamberApp.tsx:751"}, "properties": {"repobilityId": "7d50f129c690ad27", "scanner": "scanner-primary", "fingerprint": "3bc05087e56de5e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-01884eb571cd02c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MexicoChamberApp.tsx:761"}, "properties": {"repobilityId": "d4af830ab6a82fc1", "scanner": "scanner-primary", "fingerprint": "01884eb571cd02c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4bf3fa0c98f03af", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/MexicoApp.tsx:417"}, "properties": {"repobilityId": "91228317fb518106", "scanner": "scanner-primary", "fingerprint": "b4bf3fa0c98f03af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-51c30adeed0e469b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MexicoApp.tsx:416"}, "properties": {"repobilityId": "c9b633a6a035735a", "scanner": "scanner-primary", "fingerprint": "51c30adeed0e469b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-06271c7fa8ab64f0", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/FinlandApp.tsx:1151"}, "properties": {"repobilityId": "26e32a14a3769edb", "scanner": "scanner-primary", "fingerprint": "06271c7fa8ab64f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9851438ac6886742", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/FinlandApp.tsx:1176"}, "properties": {"repobilityId": "7f9c5b5bc78f48d8", "scanner": "scanner-primary", "fingerprint": "9851438ac6886742", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f40f95cee360395d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/RussiaApp.tsx:921"}, "properties": {"repobilityId": "0439417f73868995", "scanner": "scanner-primary", "fingerprint": "f40f95cee360395d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-4b72b8df744399d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/RussiaApp.tsx:914"}, "properties": {"repobilityId": "ce0ff090a9b9ecb7", "scanner": "scanner-primary", "fingerprint": "4b72b8df744399d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f6af7ee8900dad2e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/NetherlandsApp.tsx:923"}, "properties": {"repobilityId": "cbbaa929b6e17621", "scanner": "scanner-primary", "fingerprint": "f6af7ee8900dad2e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2dc441bf08c76860", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/NetherlandsApp.tsx:933"}, "properties": {"repobilityId": "b24683526bfcdea5", "scanner": "scanner-primary", "fingerprint": "2dc441bf08c76860", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4bd4b5167604389", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/pages/ThailandApp.tsx:711"}, "properties": {"repobilityId": "cc54f945d0e81f3a", "scanner": "scanner-primary", "fingerprint": "c4bd4b5167604389", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b6148319a363dc23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ThailandApp.tsx:721"}, "properties": {"repobilityId": "b3ab1446e6948722", "scanner": "scanner-primary", "fingerprint": "b6148319a363dc23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e302b94d8a9f4439", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in it_src/build_uni_geo.cjs:2"}, "properties": {"repobilityId": "0719d7ff91ce4bf3", "scanner": "scanner-primary", "fingerprint": "e302b94d8a9f4439", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "it_src/build_uni_geo.cjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b1470b9caae21ff7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cl_src/build.cjs:7"}, "properties": {"repobilityId": "cce7a723c07efef6", "scanner": "scanner-primary", "fingerprint": "b1470b9caae21ff7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cl_src/build.cjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-019972ec723680f0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in cl_src/build-overseas.cjs:1"}, "properties": {"repobilityId": "6a7ec9f8a2da4741", "scanner": "scanner-primary", "fingerprint": "019972ec723680f0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cl_src/build-overseas.cjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32dedbd455c8a6e6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in us_src/rebuild-us.cjs:13"}, "properties": {"repobilityId": "8527844857b11588", "scanner": "scanner-primary", "fingerprint": "32dedbd455c8a6e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "us_src/rebuild-us.cjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-ce8a9d66a019b231", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in ie_src/build-geojson.cjs:5"}, "properties": {"repobilityId": "63828dd5a43957ff", "scanner": "scanner-primary", "fingerprint": "ce8a9d66a019b231", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ie_src/build-geojson.cjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-fee4ba2d79c3acf2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in mt_src/build-geojson.cjs:5"}, "properties": {"repobilityId": "d861908d9ff9700f", "scanner": "scanner-primary", "fingerprint": "fee4ba2d79c3acf2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mt_src/build-geojson.cjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-fa63a1273dc6624f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in ws_src/build-geojson.cjs:6"}, "properties": {"repobilityId": "57bfd96acef5dcd8", "scanner": "scanner-primary", "fingerprint": "fa63a1273dc6624f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ws_src/build-geojson.cjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-0ef1e549577a24f0", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in seo_src/gen-about.cjs:13"}, "properties": {"repobilityId": "c7904b3b9aeb2d88", "scanner": "scanner-primary", "fingerprint": "0ef1e549577a24f0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "seo_src/gen-about.cjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-620815f53ebadd50", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in seo_src/dissolve-sim-outlines.cjs:12"}, "properties": {"repobilityId": "b384830e12af3d47", "scanner": "scanner-primary", "fingerprint": "620815f53ebadd50", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "seo_src/dissolve-sim-outlines.cjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-b2a0e0b1cb58d06f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in kr_src/namu.html:22"}, "properties": {"repobilityId": "ae3e63ff119e4f93", "scanner": "scanner-primary", "fingerprint": "b2a0e0b1cb58d06f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kr_src/namu.html"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-d427448dde037982", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in na_src/render-globalfit.cjs:10"}, "properties": {"repobilityId": "c84f53681d256104", "scanner": "scanner-primary", "fingerprint": "d427448dde037982", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "na_src/render-globalfit.cjs"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-9ba06a163633377c", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in uk_src/inject-ward-res.cjs:21"}, "properties": {"repobilityId": "7479d09100eeb7f7", "scanner": "scanner-primary", "fingerprint": "9ba06a163633377c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "uk_src/inject-ward-res.cjs"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-01d426a7a99a9d58", "level": "error", "message": {"text": "Possible secret in hu_src/raw/hu_app.js"}, "properties": {"repobilityId": "c0d0dff46cb8cee2", "scanner": "scanner-primary", "fingerprint": "01d426a7a99a9d58", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "hu_src/raw/hu_app.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-90506c22d26cbbf1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in hu_src/raw/hu_index.html:6"}, "properties": {"repobilityId": "dba70fbc6e2a85c6", "scanner": "scanner-primary", "fingerprint": "90506c22d26cbbf1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "hu_src/raw/hu_index.html"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-6963f2ca5ddfd3cd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in eu_src/flo_29185531.html:9"}, "properties": {"repobilityId": "f4a3784ca838f705", "scanner": "scanner-primary", "fingerprint": "6963f2ca5ddfd3cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eu_src/flo_29185531.html"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-8f057eb5269cf906", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in eu_src/flo_28762499.html:14"}, "properties": {"repobilityId": "e5ad932a88eb06b7", "scanner": "scanner-primary", "fingerprint": "8f057eb5269cf906", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eu_src/flo_28762499.html"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-c925b61b9e74669c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in sc_src/build-regions-geojson.cjs:5"}, "properties": {"repobilityId": "3db04a829ad1d57c", "scanner": "scanner-primary", "fingerprint": "c925b61b9e74669c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sc_src/build-regions-geojson.cjs"}, "region": {"startLine": 5}}}]}, {"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-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "419d1ec7943efec2", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-ad6701f0a8405e22", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8384c23520d55657", "scanner": "scanner-primary", "fingerprint": "ad6701f0a8405e22", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f79d0e1b50850025", "level": "note", "message": {"text": "Very large file: src/pages/RomaniaApp.tsx (2565 lines)"}, "properties": {"repobilityId": "9ebed26d6a6eb888", "scanner": "scanner-primary", "fingerprint": "f79d0e1b50850025", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ae9c816f90ed84c9", "level": "note", "message": {"text": "Very large file: src/pages/ItalyApp.tsx (2740 lines)"}, "properties": {"repobilityId": "b57237923fdc04b6", "scanner": "scanner-primary", "fingerprint": "ae9c816f90ed84c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5fe5f2226169cba6", "level": "note", "message": {"text": "Very large file: src/pages/ArgentinaApp.tsx (3224 lines)"}, "properties": {"repobilityId": "c3ef8161159ce0a2", "scanner": "scanner-primary", "fingerprint": "5fe5f2226169cba6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c664ab3be13b16ce", "level": "note", "message": {"text": "Very large file: src/pages/CanadaApp.tsx (2886 lines)"}, "properties": {"repobilityId": "b349dd7b102e9740", "scanner": "scanner-primary", "fingerprint": "c664ab3be13b16ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fe6d671658fb700a", "level": "note", "message": {"text": "Very large file: src/pages/IsraelApp.tsx (2359 lines)"}, "properties": {"repobilityId": "2fe2948be492f753", "scanner": "scanner-primary", "fingerprint": "fe6d671658fb700a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8e4d802cb5484b63", "level": "note", "message": {"text": "Very large file: src/pages/IrelandApp.tsx (2018 lines)"}, "properties": {"repobilityId": "3a4b280d57bcb973", "scanner": "scanner-primary", "fingerprint": "8e4d802cb5484b63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3e441ddb2d73b211", "level": "note", "message": {"text": "Very large file: src/pages/NewZealandApp.tsx (938 lines)"}, "properties": {"repobilityId": "893cb5b2c92893a8", "scanner": "scanner-primary", "fingerprint": "3e441ddb2d73b211", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f781211a79714104", "level": "note", "message": {"text": "Very large file: src/pages/PhilippinesApp.tsx (1646 lines)"}, "properties": {"repobilityId": "fe41cbbd726d208e", "scanner": "scanner-primary", "fingerprint": "f781211a79714104", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e82bd764940903ac", "level": "note", "message": {"text": "Very large file: src/pages/ChileApp.tsx (1368 lines)"}, "properties": {"repobilityId": "fad8b2a9a3cf2432", "scanner": "scanner-primary", "fingerprint": "e82bd764940903ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d6ffe07cf46fb4d3", "level": "note", "message": {"text": "Very large file: src/pages/ColombiaApp.tsx (3212 lines)"}, "properties": {"repobilityId": "2b8f212af56d929a", "scanner": "scanner-primary", "fingerprint": "d6ffe07cf46fb4d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cd45ed1b03fb2f0a", "level": "note", "message": {"text": "Very large file: src/pages/LatviaApp.tsx (1868 lines)"}, "properties": {"repobilityId": "9750b135c81fe2c4", "scanner": "scanner-primary", "fingerprint": "cd45ed1b03fb2f0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a1bddebada7f5e3b", "level": "note", "message": {"text": "Very large file: src/pages/HomePage.tsx (2571 lines)"}, "properties": {"repobilityId": "a7816101e4f73492", "scanner": "scanner-primary", "fingerprint": "a1bddebada7f5e3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6b0f7ba920f9b8b2", "level": "note", "message": {"text": "Very large file: src/pages/BelarusApp.tsx (1306 lines)"}, "properties": {"repobilityId": "347a18d4a50ea3b8", "scanner": "scanner-primary", "fingerprint": "6b0f7ba920f9b8b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-20fc5197af08bf04", "level": "note", "message": {"text": "Very large file: src/pages/EstoniaApp.tsx (2192 lines)"}, "properties": {"repobilityId": "2f40fed990b132cc", "scanner": "scanner-primary", "fingerprint": "20fc5197af08bf04", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c63c3506617e78b6", "level": "note", "message": {"text": "Very large file: src/pages/USAApp.tsx (3334 lines)"}, "properties": {"repobilityId": "91d27d2793db7264", "scanner": "scanner-primary", "fingerprint": "c63c3506617e78b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-15eb955aa9bacdbf", "level": "note", "message": {"text": "Very large file: src/pages/SwitzerlandApp.tsx (2198 lines)"}, "properties": {"repobilityId": "c3c3f9ea3d6e7244", "scanner": "scanner-primary", "fingerprint": "15eb955aa9bacdbf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-53bae3c019015b9c", "level": "note", "message": {"text": "Very large file: src/pages/SlovakiaApp.tsx (1977 lines)"}, "properties": {"repobilityId": "6fe0cc1f81f6eff7", "scanner": "scanner-primary", "fingerprint": "53bae3c019015b9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-263c2edb50be25f7", "level": "note", "message": {"text": "Very large file: src/pages/BrazilApp.tsx (2672 lines)"}, "properties": {"repobilityId": "993c59f481eca590", "scanner": "scanner-primary", "fingerprint": "263c2edb50be25f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f4fffee152584b01", "level": "note", "message": {"text": "Very large file: src/pages/AustriaApp.tsx (1971 lines)"}, "properties": {"repobilityId": "103cb1cd7bc209ea", "scanner": "scanner-primary", "fingerprint": "f4fffee152584b01", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-00b2191bba992490", "level": "note", "message": {"text": "Very large file: src/pages/TurkeyApp.tsx (3149 lines)"}, "properties": {"repobilityId": "72709813f6933f8f", "scanner": "scanner-primary", "fingerprint": "00b2191bba992490", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-83e43c324deeb48f", "level": "note", "message": {"text": "Very large file: src/pages/LuxembourgApp.tsx (1973 lines)"}, "properties": {"repobilityId": "7f1d7f524624d11a", "scanner": "scanner-primary", "fingerprint": "83e43c324deeb48f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-77247ec1db302156", "level": "note", "message": {"text": "Very large file: src/pages/MoldovaApp.tsx (1906 lines)"}, "properties": {"repobilityId": "4967a2e447abcae1", "scanner": "scanner-primary", "fingerprint": "77247ec1db302156", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-189e3693ec79c061", "level": "note", "message": {"text": "Very large file: src/pages/SouthAfricaApp.tsx (2574 lines)"}, "properties": {"repobilityId": "31033904da0eee0c", "scanner": "scanner-primary", "fingerprint": "189e3693ec79c061", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0afa67bf36632611", "level": "note", "message": {"text": "Very large file: src/pages/JapanApp.tsx (2757 lines)"}, "properties": {"repobilityId": "3bda2ddd5c216544", "scanner": "scanner-primary", "fingerprint": "0afa67bf36632611", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d6e4e68801a8dff", "level": "note", "message": {"text": "Very large file: src/pages/BelgiumApp.tsx (1929 lines)"}, "properties": {"repobilityId": "e684e7ea405f0f7a", "scanner": "scanner-primary", "fingerprint": "4d6e4e68801a8dff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9ac000c569a02388", "level": "note", "message": {"text": "Very large file: src/pages/IndiaApp.tsx (949 lines)"}, "properties": {"repobilityId": "ffe89fb590878d15", "scanner": "scanner-primary", "fingerprint": "9ac000c569a02388", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e4027b5df52e1a2d", "level": "note", "message": {"text": "Very large file: src/pages/GreeceApp.tsx (1968 lines)"}, "properties": {"repobilityId": "73e997392bb1cb95", "scanner": "scanner-primary", "fingerprint": "e4027b5df52e1a2d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d5a63855f999e7ac", "level": "note", "message": {"text": "Very large file: src/pages/ElSalvadorApp.tsx (1330 lines)"}, "properties": {"repobilityId": "c438ef3af78c6842", "scanner": "scanner-primary", "fingerprint": "d5a63855f999e7ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4df2f10e055f8ea5", "level": "note", "message": {"text": "Very large file: src/pages/EUApp.tsx (2099 lines)"}, "properties": {"repobilityId": "090027352bb37151", "scanner": "scanner-primary", "fingerprint": "4df2f10e055f8ea5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d0520c3310032dc0", "level": "note", "message": {"text": "Very large file: src/pages/USAHouseApp.tsx (1238 lines)"}, "properties": {"repobilityId": "58673fc6dc413008", "scanner": "scanner-primary", "fingerprint": "d0520c3310032dc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9f8114dfacc5218d", "level": "note", "message": {"text": "Very large file: src/pages/NorthernIrelandApp.tsx (1928 lines)"}, "properties": {"repobilityId": "800d380b9d754a7e", "scanner": "scanner-primary", "fingerprint": "9f8114dfacc5218d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-57f2dbae745cc00f", "level": "note", "message": {"text": "Very large file: src/pages/NamibiaApp.tsx (2450 lines)"}, "properties": {"repobilityId": "8298d65fe993ed20", "scanner": "scanner-primary", "fingerprint": "57f2dbae745cc00f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d0f3619ff46cb614", "level": "note", "message": {"text": "Very large file: src/pages/TaiwanApp.tsx (1356 lines)"}, "properties": {"repobilityId": "d1bc61f9d722861c", "scanner": "scanner-primary", "fingerprint": "d0f3619ff46cb614", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a35a8f1bf89b05d3", "level": "note", "message": {"text": "Very large file: src/pages/PolandApp.tsx (2033 lines)"}, "properties": {"repobilityId": "943bba570b58ebc2", "scanner": "scanner-primary", "fingerprint": "a35a8f1bf89b05d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-669fb02eb45fa932", "level": "note", "message": {"text": "Very large file: src/pages/WalesApp.tsx (1911 lines)"}, "properties": {"repobilityId": "ae4630dcc993b059", "scanner": "scanner-primary", "fingerprint": "669fb02eb45fa932", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-056aa9c57ee14789", "level": "note", "message": {"text": "Very large file: src/pages/NorwayApp.tsx (2325 lines)"}, "properties": {"repobilityId": "ab4be17f36fdc49e", "scanner": "scanner-primary", "fingerprint": "056aa9c57ee14789", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d930a26b801b8bff", "level": "note", "message": {"text": "Very large file: src/pages/SpainApp.tsx (2123 lines)"}, "properties": {"repobilityId": "9e12ae50602befba", "scanner": "scanner-primary", "fingerprint": "d930a26b801b8bff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-218d5fff2aacce2e", "level": "note", "message": {"text": "Very large file: src/pages/BulgariaApp.tsx (2030 lines)"}, "properties": {"repobilityId": "71f4bce17fea153a", "scanner": "scanner-primary", "fingerprint": "218d5fff2aacce2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-70be1df91b2fab27", "level": "note", "message": {"text": "Very large file: src/pages/CzechiaApp.tsx (2212 lines)"}, "properties": {"repobilityId": "63c44fe366abd9cd", "scanner": "scanner-primary", "fingerprint": "70be1df91b2fab27", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c0bf19d7dbf23530", "level": "note", "message": {"text": "Very large file: src/pages/PeruApp.tsx (3377 lines)"}, "properties": {"repobilityId": "a7cfb1ac43bad414", "scanner": "scanner-primary", "fingerprint": "c0bf19d7dbf23530", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-39ba840e2964e38e", "level": "note", "message": {"text": "Very large file: src/pages/MongoliaApp.tsx (3178 lines)"}, "properties": {"repobilityId": "ca8cfd3a021e2739", "scanner": "scanner-primary", "fingerprint": "39ba840e2964e38e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8612237e0502caeb", "level": "note", "message": {"text": "Very large file: src/pages/ScotlandApp.tsx (2490 lines)"}, "properties": {"repobilityId": "68cc605dbe8d1dcb", "scanner": "scanner-primary", "fingerprint": "8612237e0502caeb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c030e49fb5d655e0", "level": "note", "message": {"text": "Very large file: src/pages/LithuaniaApp.tsx (2154 lines)"}, "properties": {"repobilityId": "f80af0784635c3db", "scanner": "scanner-primary", "fingerprint": "c030e49fb5d655e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4397ade6bfd7e9d0", "level": "note", "message": {"text": "Very large file: src/pages/MaltaApp.tsx (1925 lines)"}, "properties": {"repobilityId": "7ed35dad69e68073", "scanner": "scanner-primary", "fingerprint": "4397ade6bfd7e9d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-10a06f4146d6a00a", "level": "note", "message": {"text": "Very large file: src/pages/NigeriaApp.tsx (1716 lines)"}, "properties": {"repobilityId": "ad052e8b387e8b1d", "scanner": "scanner-primary", "fingerprint": "10a06f4146d6a00a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4451d1847e24e232", "level": "note", "message": {"text": "Very large file: src/pages/IcelandApp.tsx (2239 lines)"}, "properties": {"repobilityId": "7c6f4ff9f2897676", "scanner": "scanner-primary", "fingerprint": "4451d1847e24e232", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-12fae027502193c1", "level": "note", "message": {"text": "Very large file: src/pages/DenmarkApp.tsx (2699 lines)"}, "properties": {"repobilityId": "3e8f3643c7338508", "scanner": "scanner-primary", "fingerprint": "12fae027502193c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fe22ffb385e4926e", "level": "note", "message": {"text": "Very large file: src/pages/PortugalApp.tsx (1903 lines)"}, "properties": {"repobilityId": "66a2e02535d0020d", "scanner": "scanner-primary", "fingerprint": "fe22ffb385e4926e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f2c106e4bd7ca6ba", "level": "note", "message": {"text": "Very large file: src/pages/FranceApp.tsx (3114 lines)"}, "properties": {"repobilityId": "bd0b835eda080388", "scanner": "scanner-primary", "fingerprint": "f2c106e4bd7ca6ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2507779aae93be2f", "level": "note", "message": {"text": "Very large file: src/pages/VenezuelaApp.tsx (1350 lines)"}, "properties": {"repobilityId": "a39cc36c57b80629", "scanner": "scanner-primary", "fingerprint": "2507779aae93be2f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d9186d819f160719", "level": "note", "message": {"text": "Very large file: src/pages/AustraliaApp.tsx (2861 lines)"}, "properties": {"repobilityId": "7adc1d233cb6da6e", "scanner": "scanner-primary", "fingerprint": "d9186d819f160719", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7fedac0e4bf40981", "level": "note", "message": {"text": "Very large file: src/pages/FranceLegislativeApp.tsx (1045 lines)"}, "properties": {"repobilityId": "06e23cfee5e4f20b", "scanner": "scanner-primary", "fingerprint": "7fedac0e4bf40981", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3ba0017bc0dbd2", "level": "note", "message": {"text": "Very large file: src/pages/GermanyApp.tsx (2539 lines)"}, "properties": {"repobilityId": "a0ff46ce1d51ea34", "scanner": "scanner-primary", "fingerprint": "ea3ba0017bc0dbd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-756eac1262a9ef0b", "level": "note", "message": {"text": "Very large file: src/pages/SwedenApp.tsx (2366 lines)"}, "properties": {"repobilityId": "886d199c8865c6fe", "scanner": "scanner-primary", "fingerprint": "756eac1262a9ef0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7175b8bce03050de", "level": "note", "message": {"text": "Very large file: src/pages/HungaryApp.tsx (2023 lines)"}, "properties": {"repobilityId": "5864cbf65061f6ba", "scanner": "scanner-primary", "fingerprint": "7175b8bce03050de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fac31cbc920f05c3", "level": "note", "message": {"text": "Very large file: src/pages/SouthKoreaApp.tsx (2359 lines)"}, "properties": {"repobilityId": "cc931121ea39d459", "scanner": "scanner-primary", "fingerprint": "fac31cbc920f05c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dc0cfaf866f43d72", "level": "note", "message": {"text": "Very large file: src/pages/AlbaniaApp.tsx (1975 lines)"}, "properties": {"repobilityId": "b5ac0ba171e2e2f3", "scanner": "scanner-primary", "fingerprint": "dc0cfaf866f43d72", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f46d266a0c0705b5", "level": "note", "message": {"text": "Very large file: src/pages/MexicoChamberApp.tsx (2510 lines)"}, "properties": {"repobilityId": "82cd9de6c728398e", "scanner": "scanner-primary", "fingerprint": "f46d266a0c0705b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7f0f7b5a6779581e", "level": "note", "message": {"text": "Very large file: src/pages/FinlandApp.tsx (2176 lines)"}, "properties": {"repobilityId": "3f6ae1df8713c38a", "scanner": "scanner-primary", "fingerprint": "7f0f7b5a6779581e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-581f16b19bcbe9af", "level": "note", "message": {"text": "Very large file: src/pages/RussiaApp.tsx (3026 lines)"}, "properties": {"repobilityId": "da5f344e70683e29", "scanner": "scanner-primary", "fingerprint": "581f16b19bcbe9af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e04747253e7c2fce", "level": "note", "message": {"text": "Very large file: src/pages/NetherlandsApp.tsx (1895 lines)"}, "properties": {"repobilityId": "38dbfac8e68556df", "scanner": "scanner-primary", "fingerprint": "e04747253e7c2fce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-00934c188964fb1d", "level": "note", "message": {"text": "Very large file: src/pages/ThailandApp.tsx (2577 lines)"}, "properties": {"repobilityId": "dfd703a8bd0dfc59", "scanner": "scanner-primary", "fingerprint": "00934c188964fb1d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ed21b245c2af76a1", "level": "note", "message": {"text": "Very large file: src/store/useElectionStore.ts (1455 lines)"}, "properties": {"repobilityId": "3241043990f9d962", "scanner": "scanner-primary", "fingerprint": "ed21b245c2af76a1", "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": "5d022cd7a6873983", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "8bb5da915ce0386d", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b1b42ec72bc43340", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "c33946991dfa56c8", "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": "791cf13b4aad44b6", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "4641f281177169e3", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "7d7d434d0adb7fd3", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "a8af845384e7cf34", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "306c0cbb0b514f6f", "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": "90bf76c987fc4f8e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e0ced46864f9f47f", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate-poland-geojson.cjs:263"}, "properties": {"repobilityId": "d275da2c50e16f80", "scanner": "scanner-primary", "fingerprint": "e0ced46864f9f47f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1345e9c5a698a93d", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate-india-geojson.cjs:1"}, "properties": {"repobilityId": "1329482178ae725b", "scanner": "scanner-primary", "fingerprint": "1345e9c5a698a93d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b4098c004f2eb29", "level": "none", "message": {"text": "Commented-code block (5 lines) in generate-nigeria-flag.cjs:1"}, "properties": {"repobilityId": "4628babd7f55d581", "scanner": "scanner-primary", "fingerprint": "8b4098c004f2eb29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64698657d8093dfb", "level": "none", "message": {"text": "Commented-code block (5 lines) in it_src/fix_engine.cjs:18"}, "properties": {"repobilityId": "496948372ed990e5", "scanner": "scanner-primary", "fingerprint": "64698657d8093dfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f95d55a8798cead", "level": "none", "message": {"text": "Commented-code block (5 lines) in cl_src/build.cjs:1"}, "properties": {"repobilityId": "7c96ad111cb47611", "scanner": "scanner-primary", "fingerprint": "4f95d55a8798cead", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1afccf46238416d0", "level": "none", "message": {"text": "Commented-code block (7 lines) in us_src/rebuild-us.cjs:1"}, "properties": {"repobilityId": "60af760bf296fd59", "scanner": "scanner-primary", "fingerprint": "1afccf46238416d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fe2b7ac4ce950e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in us_src/build-president-counties.cjs:3"}, "properties": {"repobilityId": "7d28e357c3ecde69", "scanner": "scanner-primary", "fingerprint": "8fe2b7ac4ce950e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84841b17ae35884d", "level": "none", "message": {"text": "Commented-code block (6 lines) in us_src/build-counties.cjs:5"}, "properties": {"repobilityId": "e1347b53c3b23b3b", "scanner": "scanner-primary", "fingerprint": "84841b17ae35884d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68053416a5134853", "level": "none", "message": {"text": "Commented-code block (6 lines) in us_src/apply-candidates.cjs:9"}, "properties": {"repobilityId": "7653ec2899ee5cac", "scanner": "scanner-primary", "fingerprint": "68053416a5134853", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-366065c4af061590", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/fetch-colors.cjs:14"}, "properties": {"repobilityId": "f6d671c7fa127a1e", "scanner": "scanner-primary", "fingerprint": "366065c4af061590", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83227c957c76d2dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in ie_src/gen-ireland.cjs:186"}, "properties": {"repobilityId": "fa6f47f23e0daefe", "scanner": "scanner-primary", "fingerprint": "83227c957c76d2dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-281e31c6c13b4545", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/probe-osm.cjs:6"}, "properties": {"repobilityId": "844695a7dad66f97", "scanner": "scanner-primary", "fingerprint": "281e31c6c13b4545", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c076fc9b3745702", "level": "none", "message": {"text": "Commented-code block (6 lines) in ie_src/make-app.cjs:1"}, "properties": {"repobilityId": "cf4ef7d697085f6c", "scanner": "scanner-primary", "fingerprint": "7c076fc9b3745702", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-743df3670ce615ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ie_src/fetch-boundaries.cjs:12"}, "properties": {"repobilityId": "4511ec53ea3487c1", "scanner": "scanner-primary", "fingerprint": "743df3670ce615ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95c73a5bc9f6fa76", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/fetch-districts.cjs:8"}, "properties": {"repobilityId": "341e089a018edaa6", "scanner": "scanner-primary", "fingerprint": "95c73a5bc9f6fa76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d27163f3189e0abd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/fetch-localities.cjs:11"}, "properties": {"repobilityId": "2c0e9c7718f5f2b3", "scanner": "scanner-primary", "fingerprint": "d27163f3189e0abd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef6bdd8cfa7e1f52", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mt_src/probe-osm.cjs:6"}, "properties": {"repobilityId": "40ad0b6d05568310", "scanner": "scanner-primary", "fingerprint": "ef6bdd8cfa7e1f52", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-947bcf76ba639026", "level": "none", "message": {"text": "Commented-code block (5 lines) in seo_src/prerender.cjs:1"}, "properties": {"repobilityId": "cff9851d1e37062d", "scanner": "scanner-primary", "fingerprint": "947bcf76ba639026", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f46c6e8f559a6ba", "level": "none", "message": {"text": "Commented-code block (6 lines) in kr_src/gen_data.cjs:93"}, "properties": {"repobilityId": "302546b8aef7ccb9", "scanner": "scanner-primary", "fingerprint": "8f46c6e8f559a6ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-940c7740bba355db", "level": "none", "message": {"text": "Commented-code block (5 lines) in mn_src/patch-app.cjs:34"}, "properties": {"repobilityId": "172eacffda6533a8", "scanner": "scanner-primary", "fingerprint": "940c7740bba355db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12b8e76202ab1c83", "level": "none", "message": {"text": "Commented-code block (5 lines) in mn_src/gen-mongolia.cjs:59"}, "properties": {"repobilityId": "7fb5623783c02af8", "scanner": "scanner-primary", "fingerprint": "12b8e76202ab1c83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17a3e6413191aae9", "level": "note", "message": {"text": "Legacy-named symbol `regionsOld` in mn_src/make-app.cjs:116"}, "properties": {"repobilityId": "40acba4526a21c15", "scanner": "scanner-primary", "fingerprint": "17a3e6413191aae9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7becd8ef09cb6fce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 kr_build/links.cjs:7"}, "properties": {"repobilityId": "8cf810a3b535bbde", "scanner": "scanner-primary", "fingerprint": "7becd8ef09cb6fce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e89b99d2a82124d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 kr_build/fetch_wt.cjs:6"}, "properties": {"repobilityId": "f76278bcf6cfd949", "scanner": "scanner-primary", "fingerprint": "e89b99d2a82124d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-673c2d4ac47b5164", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/fetch-coords.cjs:17"}, "properties": {"repobilityId": "70d87a927ca0f2e1", "scanner": "scanner-primary", "fingerprint": "673c2d4ac47b5164", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d343e9f946394f66", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/probe-cp2.cjs:2"}, "properties": {"repobilityId": "9b6c34a75e37e4a4", "scanner": "scanner-primary", "fingerprint": "d343e9f946394f66", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f1961b72afdcd6d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/fetch-coords-de.cjs:45"}, "properties": {"repobilityId": "cd1aaaeabe8ae4f5", "scanner": "scanner-primary", "fingerprint": "2f1961b72afdcd6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a7d5b2cb31ae455f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 na_src/probe-cp.cjs:2"}, "properties": {"repobilityId": "dff11208a4e117e3", "scanner": "scanner-primary", "fingerprint": "a7d5b2cb31ae455f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-769297428e2eff28", "level": "none", "message": {"text": "Commented-code block (5 lines) in na_src/gen-namibia.cjs:1"}, "properties": {"repobilityId": "da3ddb547030393c", "scanner": "scanner-primary", "fingerprint": "769297428e2eff28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8168c895540b63e", "level": "none", "message": {"text": "Commented-code block (5 lines) in na_src/build-constituencies.cjs:1"}, "properties": {"repobilityId": "1ef294dbee025eff", "scanner": "scanner-primary", "fingerprint": "f8168c895540b63e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-befdb6ec0aa7add5", "level": "none", "message": {"text": "Commented-code block (11 lines) in na_src/build-constituencies2.cjs:1"}, "properties": {"repobilityId": "16683dfbee9c1721", "scanner": "scanner-primary", "fingerprint": "befdb6ec0aa7add5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bca416a024a916c", "level": "none", "message": {"text": "Commented-code block (5 lines) in na_src/build-constituencies3.cjs:1"}, "properties": {"repobilityId": "77041afb21e5a3e2", "scanner": "scanner-primary", "fingerprint": "3bca416a024a916c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-406ca199b3530251", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/build-data.ts:229"}, "properties": {"repobilityId": "970e1c00b34bac73", "scanner": "scanner-primary", "fingerprint": "406ca199b3530251", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-630adffe2ef1d97d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-spain-geojson.mjs:59"}, "properties": {"repobilityId": "0d029f4932c5f756", "scanner": "scanner-primary", "fingerprint": "630adffe2ef1d97d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c72c66e532f6c91", "level": "none", "message": {"text": "Commented-code block (5 lines) in uk_src/reclassify-ind.cjs:1"}, "properties": {"repobilityId": "eebcf067ccc2127b", "scanner": "scanner-primary", "fingerprint": "3c72c66e532f6c91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3a93f95eed54205", "level": "none", "message": {"text": "Commented-code block (6 lines) in uk_src/clip-wards.cjs:1"}, "properties": {"repobilityId": "559509de5b8c3a18", "scanner": "scanner-primary", "fingerprint": "d3a93f95eed54205", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d83e863ae83fb9cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in uk_src/build-2026-wards.cjs:19"}, "properties": {"repobilityId": "0ca7cc5fb7ce61d8", "scanner": "scanner-primary", "fingerprint": "d83e863ae83fb9cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c81cb77d93c7c1e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in uk_src/inject-ward-res.cjs:1"}, "properties": {"repobilityId": "3bbc279372881804", "scanner": "scanner-primary", "fingerprint": "c81cb77d93c7c1e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2ff0beb84a5ae20", "level": "none", "message": {"text": "Commented-code block (5 lines) in ph_src/parse-2022.cjs:1"}, "properties": {"repobilityId": "75cbf8934787d89d", "scanner": "scanner-primary", "fingerprint": "c2ff0beb84a5ae20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-131f2764c3f04cc6", "level": "none", "message": {"text": "Commented-code block (6 lines) in ph_src/build-geo.cjs:1"}, "properties": {"repobilityId": "4ff854ddcedf466f", "scanner": "scanner-primary", "fingerprint": "131f2764c3f04cc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59e22e2025d0e120", "level": "none", "message": {"text": "Commented-code block (8 lines) in tr_src/fix_sliders.cjs:12"}, "properties": {"repobilityId": "cf1971fd306f39b4", "scanner": "scanner-primary", "fingerprint": "59e22e2025d0e120", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a7a5b2d66d92994", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hu_src/raw/hu_app.js:1"}, "properties": {"repobilityId": "dd9086fd2dfc3d28", "scanner": "scanner-primary", "fingerprint": "0a7a5b2d66d92994", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2fdfd6aae11b58d", "level": "none", "message": {"text": "Commented-code block (7 lines) in pe_src/gen-china.cjs:35"}, "properties": {"repobilityId": "0bfdd110982e3693", "scanner": "scanner-primary", "fingerprint": "b2fdfd6aae11b58d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41bca11f04794368", "level": "none", "message": {"text": "Commented-code block (5 lines) in pe_src/gen-data.cjs:52"}, "properties": {"repobilityId": "3d2bdfc874751f64", "scanner": "scanner-primary", "fingerprint": "41bca11f04794368", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6fa90f361ccf365", "level": "none", "message": {"text": "Commented-code block (5 lines) in ni_src/gen-ni.cjs:1"}, "properties": {"repobilityId": "925db3120195ede0", "scanner": "scanner-primary", "fingerprint": "f6fa90f361ccf365", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49b7ec26c7af7182", "level": "none", "message": {"text": "Commented-code block (5 lines) in il_src/build-districts.cjs:3"}, "properties": {"repobilityId": "4ab5fe281332ac53", "scanner": "scanner-primary", "fingerprint": "49b7ec26c7af7182", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d15fa2f292a1b873", "level": "none", "message": {"text": "Commented-code block (12 lines) in eu_src/gen-ts.cjs:22"}, "properties": {"repobilityId": "6d15377301ae242f", "scanner": "scanner-primary", "fingerprint": "d15fa2f292a1b873", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff4afc208d8ca92b", "level": "none", "message": {"text": "Commented-code block (10 lines) in eu_src/build.cjs:1"}, "properties": {"repobilityId": "6a32f688b8fb7465", "scanner": "scanner-primary", "fingerprint": "ff4afc208d8ca92b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5dd4c076e69e25b", "level": "none", "message": {"text": "Commented-code block (6 lines) in mx_src/gen-districts.cjs:1"}, "properties": {"repobilityId": "6beb7fcf1209018a", "scanner": "scanner-primary", "fingerprint": "f5dd4c076e69e25b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b05db2427f5f464", "level": "none", "message": {"text": "Commented-code block (6 lines) in mx_src/emit-ts.cjs:10"}, "properties": {"repobilityId": "f5b9075d98a5e8fe", "scanner": "scanner-primary", "fingerprint": "5b05db2427f5f464", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67ebfa586b2b7683", "level": "none", "message": {"text": "Commented-code block (5 lines) in sc_src/gen-scotland.cjs:1"}, "properties": {"repobilityId": "ab1b06cc24d222e9", "scanner": "scanner-primary", "fingerprint": "67ebfa586b2b7683", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da281c19e424760f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sc_src/fetch-boundaries.cjs:9"}, "properties": {"repobilityId": "a0704e21f7380bd1", "scanner": "scanner-primary", "fingerprint": "da281c19e424760f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d26329a5c95ccba5", "level": "none", "message": {"text": "Commented-code block (5 lines) in th_src/gen2.cjs:8"}, "properties": {"repobilityId": "ac60af107b32a181", "scanner": "scanner-primary", "fingerprint": "d26329a5c95ccba5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73739249d4948fdd", "level": "none", "message": {"text": "Commented-code block (5 lines) in be_src/build-belgium-data.cjs:1"}, "properties": {"repobilityId": "401297823064ba6c", "scanner": "scanner-primary", "fingerprint": "73739249d4948fdd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a32e3e1e25f7155b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ConstituencyPanel.tsx:50"}, "properties": {"repobilityId": "103df1141f7a0659", "scanner": "scanner-primary", "fingerprint": "a32e3e1e25f7155b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c44839ffd9b96160", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/WardPanel.tsx:9"}, "properties": {"repobilityId": "bee8e749838c834b", "scanner": "scanner-primary", "fingerprint": "c44839ffd9b96160", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1767a4da6b0a19e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/usSwing.ts:3"}, "properties": {"repobilityId": "4feccc7b5e2b57e0", "scanner": "scanner-primary", "fingerprint": "e1767a4da6b0a19e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ea0bd126f59fafa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/seo.tsx:4"}, "properties": {"repobilityId": "e468faeb9e834a69", "scanner": "scanner-primary", "fingerprint": "1ea0bd126f59fafa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e5fdf9c1ec0b9fe", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in src/lib/wikiPhotos.ts:7"}, "properties": {"repobilityId": "cac625f626f50f95", "scanner": "scanner-primary", "fingerprint": "7e5fdf9c1ec0b9fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aa3c8230fcfe5776", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/simClock.ts:1"}, "properties": {"repobilityId": "78e93ddb6ea777ea", "scanner": "scanner-primary", "fingerprint": "aa3c8230fcfe5776", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6c6e7f7d9eaf652", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/RomaniaApp.tsx:73"}, "properties": {"repobilityId": "5924eee559819fcf", "scanner": "scanner-primary", "fingerprint": "d6c6e7f7d9eaf652", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22cdbe9f65137fc7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/ItalyApp.tsx:351"}, "properties": {"repobilityId": "ec11c88ebd6b103a", "scanner": "scanner-primary", "fingerprint": "22cdbe9f65137fc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c6f2327c5799eb1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/ItalyApp.tsx:2321"}, "properties": {"repobilityId": "3f49a7bc876c73d6", "scanner": "scanner-primary", "fingerprint": "9c6f2327c5799eb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61a04f7378cdab1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/ArgentinaApp.tsx:1170"}, "properties": {"repobilityId": "2c985066d757e520", "scanner": "scanner-primary", "fingerprint": "61a04f7378cdab1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eaab8bd4683b4f7a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/IsraelApp.tsx:16"}, "properties": {"repobilityId": "2d1687b78588fe61", "scanner": "scanner-primary", "fingerprint": "eaab8bd4683b4f7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a04abd3e5ece2cc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/IrelandApp.tsx:121"}, "properties": {"repobilityId": "eb51252ffe88c70b", "scanner": "scanner-primary", "fingerprint": "9a04abd3e5ece2cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00aba5c2913f1d28", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/PhilippinesApp.tsx:1402"}, "properties": {"repobilityId": "004e61254722dcd8", "scanner": "scanner-primary", "fingerprint": "00aba5c2913f1d28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a13cc4adb9c70e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/PhilippinesApp.tsx:297"}, "properties": {"repobilityId": "4dc8060365cc6406", "scanner": "scanner-primary", "fingerprint": "8a13cc4adb9c70e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30e4edfdfffd1f71", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/NorthKoreaApp.tsx:1"}, "properties": {"repobilityId": "3c156d54225388dd", "scanner": "scanner-primary", "fingerprint": "30e4edfdfffd1f71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5eb3e6a28a89407", "level": "none", "message": {"text": "Commented-code block (16 lines) in src/pages/ColombiaApp.tsx:1236"}, "properties": {"repobilityId": "f1156f344c2b3b63", "scanner": "scanner-primary", "fingerprint": "b5eb3e6a28a89407", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92ea705915dc3475", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/LatviaApp.tsx:122"}, "properties": {"repobilityId": "71ad38a4b8fa2533", "scanner": "scanner-primary", "fingerprint": "92ea705915dc3475", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0f111a26c977880", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/HomePage.tsx:820"}, "properties": {"repobilityId": "c6f6b9c1713f6ff5", "scanner": "scanner-primary", "fingerprint": "c0f111a26c977880", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea281e446c85a08e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/HomePage.tsx:977"}, "properties": {"repobilityId": "d9d5e273b61bbfe2", "scanner": "scanner-primary", "fingerprint": "ea281e446c85a08e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db151e9172523917", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/USAApp.tsx:306"}, "properties": {"repobilityId": "87d2676b57f3b533", "scanner": "scanner-primary", "fingerprint": "db151e9172523917", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-850e67cef79e6e63", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/BrazilApp.tsx:891"}, "properties": {"repobilityId": "9a647c0ed35cca97", "scanner": "scanner-primary", "fingerprint": "850e67cef79e6e63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf2396923ceb2907", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/BrazilApp.tsx:395"}, "properties": {"repobilityId": "51986738fa515abc", "scanner": "scanner-primary", "fingerprint": "bf2396923ceb2907", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2a459a0ad477ff19", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/AustriaApp.tsx:807"}, "properties": {"repobilityId": "2bd87bb8bbc2cb21", "scanner": "scanner-primary", "fingerprint": "2a459a0ad477ff19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a028b2c061168a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/TurkeyApp.tsx:1344"}, "properties": {"repobilityId": "4020c4386d5a0970", "scanner": "scanner-primary", "fingerprint": "5a028b2c061168a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7806703916a9c3b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/LuxembourgApp.tsx:69"}, "properties": {"repobilityId": "856dd502bf3cc380", "scanner": "scanner-primary", "fingerprint": "7806703916a9c3b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccee3bd8fefa2a2b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/JapanApp.tsx:79"}, "properties": {"repobilityId": "a85a9cfabbd029f4", "scanner": "scanner-primary", "fingerprint": "ccee3bd8fefa2a2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8d3e097f8a4de70", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/IndiaApp.tsx:17"}, "properties": {"repobilityId": "bbab470c66047be8", "scanner": "scanner-primary", "fingerprint": "f8d3e097f8a4de70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58a06f13f799c3f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/GreeceApp.tsx:185"}, "properties": {"repobilityId": "e547294b2eb3f625", "scanner": "scanner-primary", "fingerprint": "58a06f13f799c3f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05b9eb3b20216b63", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/pages/EUApp.tsx:22"}, "properties": {"repobilityId": "b8498444e799d618", "scanner": "scanner-primary", "fingerprint": "05b9eb3b20216b63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0cb6c3334c14a14", "level": "note", "message": {"text": "Legacy-named symbol `geoOld` in src/pages/USAHouseApp.tsx:767"}, "properties": {"repobilityId": "eb73e4b61deccdbd", "scanner": "scanner-primary", "fingerprint": "e0cb6c3334c14a14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bd0d9ae633103d87", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/pages/USAHouseApp.tsx:19"}, "properties": {"repobilityId": "8048832577ec6a49", "scanner": "scanner-primary", "fingerprint": "bd0d9ae633103d87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52ab125aa80ad15c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/USAHouseApp.tsx:472"}, "properties": {"repobilityId": "47b6eaa0e54aa111", "scanner": "scanner-primary", "fingerprint": "52ab125aa80ad15c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe5b6f7936d14804", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/NorthernIrelandApp.tsx:169"}, "properties": {"repobilityId": "b1823a7bf0410a6e", "scanner": "scanner-primary", "fingerprint": "fe5b6f7936d14804", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-969cb27c4c60369e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/PolandApp.tsx:125"}, "properties": {"repobilityId": "26e239afebeabea4", "scanner": "scanner-primary", "fingerprint": "969cb27c4c60369e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f58db94377c23f13", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/ChinaApp.tsx:1"}, "properties": {"repobilityId": "c388d060cac5f4d5", "scanner": "scanner-primary", "fingerprint": "f58db94377c23f13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9b5d939df0f9b4c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/SpainApp.tsx:145"}, "properties": {"repobilityId": "95f929b19fe13783", "scanner": "scanner-primary", "fingerprint": "c9b5d939df0f9b4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95ee11d5896d92cb", "level": "none", "message": {"text": "Commented-code block (19 lines) in src/pages/PeruApp.tsx:1319"}, "properties": {"repobilityId": "b7151d81e83bbefd", "scanner": "scanner-primary", "fingerprint": "95ee11d5896d92cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2833bb6b73a7d2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/MongoliaApp.tsx:1140"}, "properties": {"repobilityId": "3fb813436de21f6b", "scanner": "scanner-primary", "fingerprint": "c2833bb6b73a7d2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e25a0fd41657c606", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/ScotlandApp.tsx:923"}, "properties": {"repobilityId": "5da7af29f944eec8", "scanner": "scanner-primary", "fingerprint": "e25a0fd41657c606", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-daa27387897a8a51", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/NigeriaApp.tsx:316"}, "properties": {"repobilityId": "890a8172df98c83d", "scanner": "scanner-primary", "fingerprint": "daa27387897a8a51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d906ed9ce6ec65ca", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/FranceApp.tsx:1320"}, "properties": {"repobilityId": "1db158cf4dc7dd5b", "scanner": "scanner-primary", "fingerprint": "d906ed9ce6ec65ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56b9ce2a20feaa29", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/SwedenApp.tsx:209"}, "properties": {"repobilityId": "77ad6992e9ae778c", "scanner": "scanner-primary", "fingerprint": "56b9ce2a20feaa29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5989359a8f6cf264", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/HungaryApp.tsx:235"}, "properties": {"repobilityId": "77d9b065a0c08715", "scanner": "scanner-primary", "fingerprint": "5989359a8f6cf264", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f3e5e9b0a39a288", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/SouthKoreaApp.tsx:1452"}, "properties": {"repobilityId": "6fdcac1d06fc5c19", "scanner": "scanner-primary", "fingerprint": "4f3e5e9b0a39a288", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03405ea0a8cedfc5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/MexicoApp.tsx:19"}, "properties": {"repobilityId": "b0ed5298e4875c97", "scanner": "scanner-primary", "fingerprint": "03405ea0a8cedfc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd9eb13b19a17b35", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/RussiaApp.tsx:351"}, "properties": {"repobilityId": "1e9a50df2dd4b653", "scanner": "scanner-primary", "fingerprint": "fd9eb13b19a17b35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e31c23b9c7ce8e56", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/store/useElectionStore.ts:792"}, "properties": {"repobilityId": "0817761089af9908", "scanner": "scanner-primary", "fingerprint": "e31c23b9c7ce8e56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}