{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4be750897ca720a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-missing-i18n.js:323", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-missing-i18n.js:323"}, "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-9f668fbd6211ef95", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-alpha-i18n.js:574", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-alpha-i18n.js:574"}, "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-da863cd925b7ff0f", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-alpha-entities.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-alpha-entities.ts:72"}, "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-7fd0c1b37207c7fa", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-verify-gate-i18n.js:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-verify-gate-i18n.js:93"}, "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-5b191bc88b2c844d", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-alpha-patterns.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-alpha-patterns.ts:27"}, "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-f75f295c46ec987f", "name": "Stray `console.log` in TS/JS \u2014 scripts/angle-monitor/index.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/angle-monitor/index.ts:116"}, "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-fd3045f7e0a4317e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Navbar.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Navbar.tsx:198"}, "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-947ad422db4ffa66", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/lottery/LotteryWheel.tsx:365", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/lottery/LotteryWheel.tsx:365"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3410a2cf16382c5a", "name": "Stray `console.log` in TS/JS \u2014 components/wallet/PermitSigner.tsx:435", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/wallet/PermitSigner.tsx:435"}, "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-1079244fd17c0cb1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:88", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:88"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ecc3486d54f5e97", "name": "Stray `console.log` in TS/JS \u2014 app/api/auth/wallet-login/route.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/auth/wallet-login/route.ts:97"}, "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-a3833fbd7869d62c", "name": "Stray `console.log` in TS/JS \u2014 app/api/test-wpol-swap/route.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/test-wpol-swap/route.ts:79"}, "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-38fe9e6a63cc2055", "name": "Stray `console.log` in TS/JS \u2014 app/api/profits/user/route.ts:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/profits/user/route.ts:122"}, "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-1b416b7c0fa2ac45", "name": "Stray `console.log` in TS/JS \u2014 app/api/withdraw/route.ts:355", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/withdraw/route.ts:355"}, "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-d72752a963c46f7c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/dashboard/DashboardClient.tsx:953", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/dashboard/DashboardClient.tsx:953"}, "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-6d079ca001bf97fd", "name": "\"active\" state uses light bg in a dark theme \u2014 app/(dashboard)/dashboard/modals/MomentumModal.tsx:61", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 app/(dashboard)/dashboard/modals/MomentumModal.tsx:61"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d952f142efcf659", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/team/page.tsx:785", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/team/page.tsx:785"}, "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-c77edb745ed29d49", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/tasks/page.tsx:330", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/tasks/page.tsx:330"}, "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-99be1e34a79ff17d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/AlphaClient.tsx:460", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/AlphaClient.tsx:460"}, "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-d0ac3504b688cec2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(dashboard)/alpha/AlphaClient.tsx:1238", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(dashboard)/alpha/AlphaClient.tsx:1238"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00dca69e20248634", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/SignalCard.tsx:260", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/SignalCard.tsx:260"}, "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-dbf3df37ec4eb681", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/TopEntitiesTable.tsx:36", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/TopEntitiesTable.tsx:36"}, "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-1b6660d076c30ceb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/TrackedWalletsModal.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/TrackedWalletsModal.tsx:87"}, "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-b31177d6991be7bd", "name": "`truncate` class without `title=` for hover reveal \u2014 app/lottery-mini/page.tsx:1233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lottery-mini/page.tsx:1233"}, "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-292dfc12aee1c681", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/lottery-mini/page.tsx:1177", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/lottery-mini/page.tsx:1177"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4791369b88dfed42", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/lottery-mini/layout.tsx:124", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/lottery-mini/layout.tsx:124"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1c6cadfefb30fef7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/academy/AcademyContent.tsx:366", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/academy/AcademyContent.tsx:366"}, "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-cbb931e0729aa084", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/polnation-technical-whitepaper/WhitepaperLanguageSwitc", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/polnation-technical-whitepaper/WhitepaperLanguageSwitcher.tsx:184"}, "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-25d0b93447b21d7b", "name": "Stray `console.log` in TS/JS \u2014 lib/dashboard-data.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/dashboard-data.ts:142"}, "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-40d964b8cb0c63e2", "name": "Stray `console.log` in TS/JS \u2014 executor/executor-contract.js:173", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 executor/executor-contract.js:173"}, "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-36800eecd6deac44", "name": "Stray `console.log` in TS/JS \u2014 executor/deploy-contract.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 executor/deploy-contract.js:33"}, "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-73cc33eeeff4decc", "name": "Stray `console.log` in TS/JS \u2014 executor/executor.js:164", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 executor/executor.js:164"}, "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-7e69dc8943c305fc", "name": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-merkle.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-merkle.js:4"}, "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-251e7a2a9ccc15a5", "name": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-alphastake.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-alphastake.js:9"}, "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-93d64a60cd3d8d00", "name": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-alphastake-continue.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-alphastake-continue.js:11"}, "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-1d4aeacb1ddd006e", "name": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy.js:4"}, "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-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98e2b470f82f1bb3", "name": "Possible secret in scripts/angle-monitor/ecosystem.config.js", "shortDescription": {"text": "Possible secret in scripts/angle-monitor/ecosystem.config.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-d3510aa7e9b598ba", "name": "Insecure pattern 'dangerous_innerhtml' in components/lottery/LotteryWheel.tsx:365", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/lottery/LotteryWheel.tsx:365"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4fb8e368758731d6", "name": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:88", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:88"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0cf22af675fc025", "name": "Insecure pattern 'dangerous_innerhtml' in app/(dashboard)/alpha/AlphaClient.tsx:1238", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(dashboard)/alpha/AlphaClient.tsx:1238"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00c5fe0cd6038780", "name": "Insecure pattern 'dangerous_innerhtml' in app/lottery-mini/page.tsx:1177", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/lottery-mini/page.tsx:1177"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8dab6dffdf743d6d", "name": "Insecure pattern 'dangerous_innerhtml' in app/lottery-mini/layout.tsx:124", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/lottery-mini/layout.tsx:124"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d66d21f788598a7", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/polnation-earning-guide.html:2491", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/polnation-earning-guide.html:2491"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e3f835473d849e7d", "name": "Very large file: app/(dashboard)/team/page.tsx (1108 lines)", "shortDescription": {"text": "Very large file: app/(dashboard)/team/page.tsx (1108 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-3ce02a1d8d9e6de2", "name": "Very large file: app/(dashboard)/alpha/AlphaClient.tsx (1329 lines)", "shortDescription": {"text": "Very large file: app/(dashboard)/alpha/AlphaClient.tsx (1329 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-a201236e81b91356", "name": "Very large file: app/(admin)/admin/users/[userId]/page.tsx (1230 lines)", "shortDescription": {"text": "Very large file: app/(admin)/admin/users/[userId]/page.tsx (1230 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-e16e8a4e36497ab0", "name": "Very large file: app/(admin)/admin/airdrop/page.tsx (1322 lines)", "shortDescription": {"text": "Very large file: app/(admin)/admin/airdrop/page.tsx (1322 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-319d3271bdab104b", "name": "Very large file: app/lottery-mini/page.tsx (2253 lines)", "shortDescription": {"text": "Very large file: app/lottery-mini/page.tsx (2253 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-9501a59ea53e1cbf", "name": "Very large file: app/lottery-mini/i18n.ts (2195 lines)", "shortDescription": {"text": "Very large file: app/lottery-mini/i18n.ts (2195 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": "2 test file(s) for 215 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 250 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 72 placeholder/mock markers across 22 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. 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-1b8ba2eb6f365f84", "name": "Commented-code block (5 lines) in components/auth/WalletAuthFlow.tsx:50", "shortDescription": {"text": "Commented-code block (5 lines) in components/auth/WalletAuthFlow.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-e92bc0c2372b78c3", "name": "Commented-code block (6 lines) in components/auth/WalletAuthSection.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in components/auth/WalletAuthSection.tsx: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-2449d8fef7bf59a9", "name": "Commented-code block (6 lines) in components/wallet/PermitSigner.tsx:30", "shortDescription": {"text": "Commented-code block (6 lines) in components/wallet/PermitSigner.tsx:30"}, "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-85842d18a826b3d4", "name": "Commented-code block (6 lines) in app/api/auth/bind-telegram/route.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/auth/bind-telegram/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30bdcd8304401b08", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/auth/twitter-callback/route.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/auth/twitter-callback/route.ts:37"}, "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-4185290b6c19f12b", "name": "Commented-code block (5 lines) in app/api/auth/telegram-widget/route.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/auth/telegram-widget/route.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e9d93590bfc0f26", "name": "Commented-code block (6 lines) in app/api/telegram/webhook/route.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/telegram/webhook/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01f3c2e87cb4fe0e", "name": "Commented-code block (5 lines) in app/api/telegram/check-membership/route.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/telegram/check-membership/route.ts:20"}, "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-2701d47260905e92", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/wallet/balance/route.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/wallet/balance/route.ts:25"}, "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-eea09820c871194f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/team/page.tsx:210", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/team/page.tsx:210"}, "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-9e85b7f95947bfd5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/share/page.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/share/page.tsx:99"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a18b773e405f5bb4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/alpha/AlphaClient.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/alpha/AlphaClient.tsx:69"}, "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-c21268690d53868e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/users/page.tsx:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/users/page.tsx:226"}, "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-099e317877441a25", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/alphastake/page.tsx:175", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/alphastake/page.tsx:175"}, "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-66ca08f6df727835", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/withdrawals/page.tsx:131", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/withdrawals/page.tsx:131"}, "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-6e6c37c46f873eba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/airdrop/page.tsx:210", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/airdrop/page.tsx:210"}, "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-9ad976b69172b7a5", "name": "Commented-code block (6 lines) in app/lottery-mini/page.tsx:518", "shortDescription": {"text": "Commented-code block (6 lines) in app/lottery-mini/page.tsx:518"}, "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-8d4fff30a6deb80e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lottery-mini/page.tsx:525", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lottery-mini/page.tsx:525"}, "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-4176612dbae7cf24", "name": "Commented-code block (5 lines) in app/lottery-mini/layout.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/lottery-mini/layout.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-d3a8caf86bfac591", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/polnation-technical-whitepaper/WhitepaperLanguageSwitcher.tsx", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/polnation-technical-whitepaper/WhitepaperLanguageSwitcher.tsx:145"}, "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-da0849ac813341fa", "name": "Commented-code block (5 lines) in lib/wallet-utils.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/wallet-utils.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-94a702e09f5f5ed2", "name": "Commented-code block (5 lines) in lib/auth/telegram.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in lib/auth/telegram.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9cac7ce15e72817b", "name": "31 env vars used in code but missing from .env.example", "shortDescription": {"text": "31 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_SESSION_SECRET`, `ALCHEMY_API_KEY`, `ARKHAM_API_KEY`, `CRON_SECRET`, `DISTRIBUTOR_CONTRACT`, `ETH_WS`, `EXECUTOR_PRIVATE_KEY`, `MIN_USDC` + 23 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18051"}, "properties": {"repository": "reshlola3-ai/polnation-web", "repoUrl": "https://github.com/reshlola3-ai/polnation-web", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-4be750897ca720a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-missing-i18n.js:323"}, "properties": {"repobilityId": "c0fc57a79522160d", "scanner": "scanner-primary", "fingerprint": "4be750897ca720a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f668fbd6211ef95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-alpha-i18n.js:574"}, "properties": {"repobilityId": "df4c97480f1de765", "scanner": "scanner-primary", "fingerprint": "9f668fbd6211ef95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da863cd925b7ff0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-alpha-entities.ts:72"}, "properties": {"repobilityId": "0fe6f2c9e59d0b87", "scanner": "scanner-primary", "fingerprint": "da863cd925b7ff0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7fd0c1b37207c7fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-verify-gate-i18n.js:93"}, "properties": {"repobilityId": "ae4278028bd1be6b", "scanner": "scanner-primary", "fingerprint": "7fd0c1b37207c7fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b191bc88b2c844d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-alpha-patterns.ts:27"}, "properties": {"repobilityId": "b96d9d807910be1e", "scanner": "scanner-primary", "fingerprint": "5b191bc88b2c844d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f75f295c46ec987f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/angle-monitor/index.ts:116"}, "properties": {"repobilityId": "2c4dbb71641c83a0", "scanner": "scanner-primary", "fingerprint": "f75f295c46ec987f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd3045f7e0a4317e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/layout/Navbar.tsx:198"}, "properties": {"repobilityId": "7fbb7f05ef2a1334", "scanner": "scanner-primary", "fingerprint": "fd3045f7e0a4317e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-947ad422db4ffa66", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/lottery/LotteryWheel.tsx:365"}, "properties": {"repobilityId": "c7cc894a631858f1", "scanner": "scanner-primary", "fingerprint": "947ad422db4ffa66", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3410a2cf16382c5a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/wallet/PermitSigner.tsx:435"}, "properties": {"repobilityId": "282060269bf10b61", "scanner": "scanner-primary", "fingerprint": "3410a2cf16382c5a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1079244fd17c0cb1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:88"}, "properties": {"repobilityId": "6779a4843a9d41ee", "scanner": "scanner-primary", "fingerprint": "1079244fd17c0cb1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4ecc3486d54f5e97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/auth/wallet-login/route.ts:97"}, "properties": {"repobilityId": "bee5118046382284", "scanner": "scanner-primary", "fingerprint": "4ecc3486d54f5e97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3833fbd7869d62c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/test-wpol-swap/route.ts:79"}, "properties": {"repobilityId": "9e651d054a447b45", "scanner": "scanner-primary", "fingerprint": "a3833fbd7869d62c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38fe9e6a63cc2055", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/profits/user/route.ts:122"}, "properties": {"repobilityId": "5bb02bbffdc13244", "scanner": "scanner-primary", "fingerprint": "38fe9e6a63cc2055", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b416b7c0fa2ac45", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/withdraw/route.ts:355"}, "properties": {"repobilityId": "50ebbd04e60a86e3", "scanner": "scanner-primary", "fingerprint": "1b416b7c0fa2ac45", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d72752a963c46f7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/dashboard/DashboardClient.tsx:953"}, "properties": {"repobilityId": "2b187b2caf9997d4", "scanner": "scanner-primary", "fingerprint": "d72752a963c46f7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d079ca001bf97fd", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 app/(dashboard)/dashboard/modals/MomentumModal.tsx:61"}, "properties": {"repobilityId": "74968a1f37f6c859", "scanner": "scanner-primary", "fingerprint": "6d079ca001bf97fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-1d952f142efcf659", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/team/page.tsx:785"}, "properties": {"repobilityId": "4534e2c21ef731c1", "scanner": "scanner-primary", "fingerprint": "1d952f142efcf659", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c77edb745ed29d49", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/tasks/page.tsx:330"}, "properties": {"repobilityId": "1a6b679ad3eb5dff", "scanner": "scanner-primary", "fingerprint": "c77edb745ed29d49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-99be1e34a79ff17d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/AlphaClient.tsx:460"}, "properties": {"repobilityId": "df56957108847b79", "scanner": "scanner-primary", "fingerprint": "99be1e34a79ff17d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d0ac3504b688cec2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/(dashboard)/alpha/AlphaClient.tsx:1238"}, "properties": {"repobilityId": "a8222a19addce1d3", "scanner": "scanner-primary", "fingerprint": "d0ac3504b688cec2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-00dca69e20248634", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/SignalCard.tsx:260"}, "properties": {"repobilityId": "1d79e60b15d060a0", "scanner": "scanner-primary", "fingerprint": "00dca69e20248634", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dbf3df37ec4eb681", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/TopEntitiesTable.tsx:36"}, "properties": {"repobilityId": "3c06ac22dcc02b50", "scanner": "scanner-primary", "fingerprint": "dbf3df37ec4eb681", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b6660d076c30ceb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(dashboard)/alpha/components/TrackedWalletsModal.tsx:87"}, "properties": {"repobilityId": "112a03362ee04450", "scanner": "scanner-primary", "fingerprint": "1b6660d076c30ceb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b31177d6991be7bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lottery-mini/page.tsx:1233"}, "properties": {"repobilityId": "263294dd4c9e6e3f", "scanner": "scanner-primary", "fingerprint": "b31177d6991be7bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-292dfc12aee1c681", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/lottery-mini/page.tsx:1177"}, "properties": {"repobilityId": "d68df6f8cd7c78e4", "scanner": "scanner-primary", "fingerprint": "292dfc12aee1c681", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4791369b88dfed42", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/lottery-mini/layout.tsx:124"}, "properties": {"repobilityId": "3e7b861b7f249175", "scanner": "scanner-primary", "fingerprint": "4791369b88dfed42", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1c6cadfefb30fef7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/academy/AcademyContent.tsx:366"}, "properties": {"repobilityId": "d4203c9acad86165", "scanner": "scanner-primary", "fingerprint": "1c6cadfefb30fef7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cbb931e0729aa084", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(public)/polnation-technical-whitepaper/WhitepaperLanguageSwitcher.tsx:184"}, "properties": {"repobilityId": "e885e15b978d1492", "scanner": "scanner-primary", "fingerprint": "cbb931e0729aa084", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25d0b93447b21d7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/dashboard-data.ts:142"}, "properties": {"repobilityId": "6d298df319943aef", "scanner": "scanner-primary", "fingerprint": "25d0b93447b21d7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-40d964b8cb0c63e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 executor/executor-contract.js:173"}, "properties": {"repobilityId": "97f37371acee4570", "scanner": "scanner-primary", "fingerprint": "40d964b8cb0c63e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36800eecd6deac44", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 executor/deploy-contract.js:33"}, "properties": {"repobilityId": "b9f02981b4f86f8d", "scanner": "scanner-primary", "fingerprint": "36800eecd6deac44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-73cc33eeeff4decc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 executor/executor.js:164"}, "properties": {"repobilityId": "07e96852e28edc4d", "scanner": "scanner-primary", "fingerprint": "73cc33eeeff4decc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e69dc8943c305fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-merkle.js:4"}, "properties": {"repobilityId": "3acfb680e4d6a912", "scanner": "scanner-primary", "fingerprint": "7e69dc8943c305fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-251e7a2a9ccc15a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-alphastake.js:9"}, "properties": {"repobilityId": "d5ac0766c924f464", "scanner": "scanner-primary", "fingerprint": "251e7a2a9ccc15a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93d64a60cd3d8d00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy-alphastake-continue.js:11"}, "properties": {"repobilityId": "2f04a96364561dfa", "scanner": "scanner-primary", "fingerprint": "93d64a60cd3d8d00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d4aeacb1ddd006e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 contracts/scripts/deploy.js:4"}, "properties": {"repobilityId": "d4bf4ec2c07658e7", "scanner": "scanner-primary", "fingerprint": "1d4aeacb1ddd006e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-98e2b470f82f1bb3", "level": "error", "message": {"text": "Possible secret in scripts/angle-monitor/ecosystem.config.js"}, "properties": {"repobilityId": "cf2464e8f5063776", "scanner": "scanner-primary", "fingerprint": "98e2b470f82f1bb3", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/angle-monitor/ecosystem.config.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-d3510aa7e9b598ba", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/lottery/LotteryWheel.tsx:365"}, "properties": {"repobilityId": "567f276f04bb2605", "scanner": "scanner-primary", "fingerprint": "d3510aa7e9b598ba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/lottery/LotteryWheel.tsx"}, "region": {"startLine": 365}}}]}, {"ruleId": "scanner-4fb8e368758731d6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:88"}, "properties": {"repobilityId": "cfec9d1837258177", "scanner": "scanner-primary", "fingerprint": "4fb8e368758731d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/page.tsx"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-e0cf22af675fc025", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/(dashboard)/alpha/AlphaClient.tsx:1238"}, "properties": {"repobilityId": "c773c23c3a653337", "scanner": "scanner-primary", "fingerprint": "e0cf22af675fc025", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/(dashboard)/alpha/AlphaClient.tsx"}, "region": {"startLine": 1238}}}]}, {"ruleId": "scanner-00c5fe0cd6038780", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/lottery-mini/page.tsx:1177"}, "properties": {"repobilityId": "1a8382df5404cd98", "scanner": "scanner-primary", "fingerprint": "00c5fe0cd6038780", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/lottery-mini/page.tsx"}, "region": {"startLine": 1177}}}]}, {"ruleId": "scanner-8dab6dffdf743d6d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/lottery-mini/layout.tsx:124"}, "properties": {"repobilityId": "0e7d435ee7ae1dff", "scanner": "scanner-primary", "fingerprint": "8dab6dffdf743d6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/lottery-mini/layout.tsx"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-2d66d21f788598a7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/polnation-earning-guide.html:2491"}, "properties": {"repobilityId": "3188be542ee60e4d", "scanner": "scanner-primary", "fingerprint": "2d66d21f788598a7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/polnation-earning-guide.html"}, "region": {"startLine": 2491}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-e3f835473d849e7d", "level": "note", "message": {"text": "Very large file: app/(dashboard)/team/page.tsx (1108 lines)"}, "properties": {"repobilityId": "6643da809d73b487", "scanner": "scanner-primary", "fingerprint": "e3f835473d849e7d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ce02a1d8d9e6de2", "level": "note", "message": {"text": "Very large file: app/(dashboard)/alpha/AlphaClient.tsx (1329 lines)"}, "properties": {"repobilityId": "4335ff72d49656fd", "scanner": "scanner-primary", "fingerprint": "3ce02a1d8d9e6de2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a201236e81b91356", "level": "note", "message": {"text": "Very large file: app/(admin)/admin/users/[userId]/page.tsx (1230 lines)"}, "properties": {"repobilityId": "0219e40e0cbc4426", "scanner": "scanner-primary", "fingerprint": "a201236e81b91356", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e16e8a4e36497ab0", "level": "note", "message": {"text": "Very large file: app/(admin)/admin/airdrop/page.tsx (1322 lines)"}, "properties": {"repobilityId": "5ce646c4a123a2d0", "scanner": "scanner-primary", "fingerprint": "e16e8a4e36497ab0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-319d3271bdab104b", "level": "note", "message": {"text": "Very large file: app/lottery-mini/page.tsx (2253 lines)"}, "properties": {"repobilityId": "81a2cb9dec4abb4c", "scanner": "scanner-primary", "fingerprint": "319d3271bdab104b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9501a59ea53e1cbf", "level": "note", "message": {"text": "Very large file: app/lottery-mini/i18n.ts (2195 lines)"}, "properties": {"repobilityId": "953359b2b5b0307d", "scanner": "scanner-primary", "fingerprint": "9501a59ea53e1cbf", "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": "43c325f45dbbb479", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "344e749142ef6e50", "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": "579cb2dacd8a13bd", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "9448844540aae505", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "32cd00dc7561bb83", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "37d4fcdb1a35ec53", "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": "f78ea62a6ef5a836", "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": "45662d5b7d2565db", "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": "c94fe7d2df0cac1b", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-1b8ba2eb6f365f84", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/auth/WalletAuthFlow.tsx:50"}, "properties": {"repobilityId": "40fc61137632177e", "scanner": "scanner-primary", "fingerprint": "1b8ba2eb6f365f84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e92bc0c2372b78c3", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/auth/WalletAuthSection.tsx:5"}, "properties": {"repobilityId": "5a0a5090e321afe4", "scanner": "scanner-primary", "fingerprint": "e92bc0c2372b78c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2449d8fef7bf59a9", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/wallet/PermitSigner.tsx:30"}, "properties": {"repobilityId": "3d40b38c4d39711e", "scanner": "scanner-primary", "fingerprint": "2449d8fef7bf59a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85842d18a826b3d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/auth/bind-telegram/route.ts:7"}, "properties": {"repobilityId": "ca47aa95f873d833", "scanner": "scanner-primary", "fingerprint": "85842d18a826b3d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30bdcd8304401b08", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/auth/twitter-callback/route.ts:37"}, "properties": {"repobilityId": "819b776881829468", "scanner": "scanner-primary", "fingerprint": "30bdcd8304401b08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4185290b6c19f12b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/auth/telegram-widget/route.ts:93"}, "properties": {"repobilityId": "e13e1393b7d0dace", "scanner": "scanner-primary", "fingerprint": "4185290b6c19f12b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e9d93590bfc0f26", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/telegram/webhook/route.ts:7"}, "properties": {"repobilityId": "1e19e5d976755e71", "scanner": "scanner-primary", "fingerprint": "5e9d93590bfc0f26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01f3c2e87cb4fe0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/telegram/check-membership/route.ts:20"}, "properties": {"repobilityId": "8f7fa77593e9f605", "scanner": "scanner-primary", "fingerprint": "01f3c2e87cb4fe0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2701d47260905e92", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/wallet/balance/route.ts:25"}, "properties": {"repobilityId": "7fe16b4d92733607", "scanner": "scanner-primary", "fingerprint": "2701d47260905e92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eea09820c871194f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/team/page.tsx:210"}, "properties": {"repobilityId": "d7d53f786d29d299", "scanner": "scanner-primary", "fingerprint": "eea09820c871194f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e85b7f95947bfd5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/share/page.tsx:99"}, "properties": {"repobilityId": "399c9549a84041d0", "scanner": "scanner-primary", "fingerprint": "9e85b7f95947bfd5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a18b773e405f5bb4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/alpha/AlphaClient.tsx:69"}, "properties": {"repobilityId": "c26adfcda16947f2", "scanner": "scanner-primary", "fingerprint": "a18b773e405f5bb4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c21268690d53868e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/users/page.tsx:226"}, "properties": {"repobilityId": "43c3a9c4b0014844", "scanner": "scanner-primary", "fingerprint": "c21268690d53868e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-099e317877441a25", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/alphastake/page.tsx:175"}, "properties": {"repobilityId": "59ec7e590499bee1", "scanner": "scanner-primary", "fingerprint": "099e317877441a25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-66ca08f6df727835", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/withdrawals/page.tsx:131"}, "properties": {"repobilityId": "a072521bd17aa7b9", "scanner": "scanner-primary", "fingerprint": "66ca08f6df727835", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e6c37c46f873eba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(admin)/admin/airdrop/page.tsx:210"}, "properties": {"repobilityId": "c1de1a2ab74e35a7", "scanner": "scanner-primary", "fingerprint": "6e6c37c46f873eba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ad976b69172b7a5", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lottery-mini/page.tsx:518"}, "properties": {"repobilityId": "ce2f3c73558b44b1", "scanner": "scanner-primary", "fingerprint": "9ad976b69172b7a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d4fff30a6deb80e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lottery-mini/page.tsx:525"}, "properties": {"repobilityId": "9de3837f82aab800", "scanner": "scanner-primary", "fingerprint": "8d4fff30a6deb80e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4176612dbae7cf24", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lottery-mini/layout.tsx:9"}, "properties": {"repobilityId": "885fd5151ad32162", "scanner": "scanner-primary", "fingerprint": "4176612dbae7cf24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3a8caf86bfac591", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(public)/polnation-technical-whitepaper/WhitepaperLanguageSwitcher.tsx:145"}, "properties": {"repobilityId": "6555cf419dbcdb31", "scanner": "scanner-primary", "fingerprint": "d3a8caf86bfac591", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da0849ac813341fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/wallet-utils.ts:1"}, "properties": {"repobilityId": "ee940ce91b6ce783", "scanner": "scanner-primary", "fingerprint": "da0849ac813341fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94a702e09f5f5ed2", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/auth/telegram.ts:7"}, "properties": {"repobilityId": "f02be2428d181eb5", "scanner": "scanner-primary", "fingerprint": "94a702e09f5f5ed2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cac7ce15e72817b", "level": "note", "message": {"text": "31 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "1a52e2d4d46a6e40", "scanner": "scanner-primary", "fingerprint": "9cac7ce15e72817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}