{"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-6e6dc78f17eff704", "name": "Stray `console.log` in TS/JS \u2014 apps/mobile/src/lib/logger.ts:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile/src/lib/logger.ts:171"}, "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-398e4b609b2077cd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/theme-toggle.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/theme-toggle.tsx:112"}, "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-2659f563f97d66dd", "name": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/components/theme-toggle.tsx:100", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/components/theme-toggle.tsx:100"}, "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-4bfe563903b52d1a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/post-composer.tsx:235", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/post-composer.tsx:235"}, "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-b56881d34f0f8380", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/post-card.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/post-card.tsx:42"}, "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-14d29032da9fb01b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/pages/pessoas.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/pages/pessoas.tsx:92"}, "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-a37e97d7da23a764", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/layout.tsx:53", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/layout.tsx:53"}, "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-1e934fe0dc47e9e2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/indicacao/[slug]/page.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/indicacao/[slug]/page.tsx:86"}, "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-2ab20b0b2d6b4a54", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/page.tsx:251", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/page.tsx:251"}, "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-9ab2e448fb3bc0bd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/corretoras/_components/invite-link-c", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/corretoras/_components/invite-link-card.tsx:43"}, "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-9f5ee0319bcc166d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/automacoes/page.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/automacoes/page.tsx:295"}, "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-fa6ff1ff9819579c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/_components/command-palette.tsx:234", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/_components/command-palette.tsx:234"}, "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-4c6e1bd0fd4aa1f3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/_components/activity-feed.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/_components/activity-feed.tsx:181"}, "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-dacdecef118ce12c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/page.tsx:424", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/page.tsx:424"}, "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-1ba852e48823c927", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/cotacoes/page.tsx:552", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/cotacoes/page.tsx:552"}, "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-6cf108421a2000c3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/vendas/page.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/vendas/page.tsx:126"}, "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-149522e271edd4cf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/negociacoes/page.tsx:256", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/negociacoes/page.tsx:256"}, "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-893bfcf25806f93a", "name": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/produtor/negociacoes/page.tsx:163", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/produtor/negociacoes/page.tsx:163"}, "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-5196c2b73578513e", "name": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/produtor/_components/sidebar.tsx:96", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/produtor/_components/sidebar.tsx:96"}, "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-c4e2ae43dbd0b89b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/_components/bottom-nav.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/_components/bottom-nav.tsx:63"}, "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-b432985b36dab2b7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/page.tsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/page.tsx:266"}, "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-2e1206c743a4d90e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/convidar/_components/convite-prod", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/convidar/_components/convite-produtores.tsx:31"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02ce22f8e142ed42", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/perfil/page.tsx:290", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/perfil/page.tsx:290"}, "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-bd31bb965c5bebd4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/pagamentos/_components/pagamentos", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/pagamentos/_components/pagamentos-view.tsx:289"}, "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-f1acc333d55d83a8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/tarefas/page.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/tarefas/page.tsx:242"}, "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-58822ba8695d74d1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/agenda/page.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/agenda/page.tsx:91"}, "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-7601a3842179e5ce", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/equipe/page.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/equipe/page.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-df1917ecc5357fea", "name": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/corretora/_components/sidebar.tsx:241", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/corretora/_components/sidebar.tsx:241"}, "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-f6fb5021243c2683", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/ranking-produtores.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/ranking-produtores.tsx:46"}, "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-62e329ac76407cef", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/subscription-banner.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/subscription-banner.tsx:79"}, "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-9b0db94c63b048ad", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/comando.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/comando.tsx:100"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e3561ab88864409", "name": "Stray `console.log` in TS/JS \u2014 apps/web/src/lib/logger.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/lib/logger.ts:168"}, "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-e1364a55ee6026d6", "name": "TODO/FIXME marker in shipping code \u2014 supabase/functions/sync-cotacoes/_lib/adapters.ts:323", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 supabase/functions/sync-cotacoes/_lib/adapters.ts:323"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d8677fb664978dc", "name": "Possible secret in apps/web/scripts/smoke-rbac.mjs", "shortDescription": {"text": "Possible secret in apps/web/scripts/smoke-rbac.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ee99fc958dc8f16f", "name": "Possible secret in apps/web/scripts/smoke-aprovacao.mjs", "shortDescription": {"text": "Possible secret in apps/web/scripts/smoke-aprovacao.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-56ec75813d4ee107", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/layout.tsx:53", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/layout.tsx:53"}, "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-5e9d4a7e1b0eabc1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@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-2a776c16dd0fe7d7", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3701b65670f52f16", "name": "Very large file: packages/types/src/database.ts (3855 lines)", "shortDescription": {"text": "Very large file: packages/types/src/database.ts (3855 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": "12 test file(s) for 495 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-d0c2205560692580", "name": "Node manifest has dependencies but no lockfile: apps/mobile/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/mobile/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb3e52667c84fb86", "name": "Node manifest has dependencies but no lockfile: packages/types/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/types/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f65e1ca9b00183a", "name": "Node manifest has dependencies but no lockfile: packages/eslint-config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/eslint-config/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41d7d99bc546473c", "name": "Node manifest has dependencies but no lockfile: packages/cob/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/cob/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b16ae2bd0fca524", "name": "Node manifest has dependencies but no lockfile: packages/db/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/db/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 140 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 282 placeholder/mock markers across 92 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, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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, lockfile. 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-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff97eb72e5042944", "name": "Agent authority lacks a verifier contract: .claude/commands/revisao-milsaca.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/revisao-milsaca.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0618abe2849004d0", "name": "Agent authority lacks a verifier contract: .claude/agents/milsaca-admin-auditor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/milsaca-admin-auditor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed67a49ed3df6036", "name": "Agent authority lacks a verifier contract: .claude/agents/milsaca-corretora-auditor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/milsaca-corretora-auditor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebc8fc54ca3cc0b6", "name": "Agent authority lacks a verifier contract: .claude/agents/milsaca-produtor-auditor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/milsaca-produtor-auditor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9512f9180eb84d2f", "name": "Commented-code block (6 lines) in apps/mobile/metro.config.js:26", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/metro.config.js:26"}, "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-1ffc70c3a00d969b", "name": "Commented-code block (5 lines) in apps/mobile/src/lib/auth.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/auth.tsx: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-3c406d272c14194d", "name": "Commented-code block (7 lines) in apps/mobile/src/lib/use-list.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/lib/use-list.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-3ea2a328f9149d4f", "name": "Commented-code block (6 lines) in apps/mobile/src/lib/queries.ts:389", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/lib/queries.ts:389"}, "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-a55c2e075d13bd36", "name": "Commented-code block (5 lines) in apps/mobile/src/lib/supabase.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/supabase.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ccdc6ece801bc2a", "name": "Commented-code block (5 lines) in apps/mobile/src/lib/logger.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/logger.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-4667ff69472cc9f5", "name": "Commented-code block (5 lines) in apps/web/instrumentation-client.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/instrumentation-client.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-cfd9e1f7ac7779a0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/rotate-cron-secret.mjs:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/rotate-cron-secret.mjs:38"}, "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-041253d1651a64aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/seed-conilon-now.mjs:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/seed-conilon-now.mjs:39"}, "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-cf7bf0b955781650", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/apply-cron.mjs:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/apply-cron.mjs:117"}, "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-1a55d0cbf69198ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/apply-migration.mjs:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/apply-migration.mjs:74"}, "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-34099425d7b8cb0c", "name": "Commented-code block (5 lines) in apps/web/scripts/seed-remote.mjs:207", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/scripts/seed-remote.mjs:207"}, "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-b9157a4ad1516119", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/wipe-storage.mjs:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/wipe-storage.mjs:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2af149a80d806b0f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/smoke-fundadora.mjs:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/smoke-fundadora.mjs:65"}, "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-6db4fb4933f2b1b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/municipio-autocomplete.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/municipio-autocomplete.tsx:28"}, "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-c783957d692c3d9d", "name": "Commented-code block (6 lines) in apps/web/src/app/cadastrar/_actions.ts:204", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/app/cadastrar/_actions.ts:204"}, "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-0fa688583cace937", "name": "Commented-code block (5 lines) in apps/web/src/app/laudos/[id]/pdf/route.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/laudos/[id]/pdf/route.tsx:47"}, "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-1b62d44fe2f11252", "name": "Commented-code block (5 lines) in apps/web/src/app/admin/(panel)/assinaturas/_actions.ts:39", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/admin/(panel)/assinaturas/_actions.ts:39"}, "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-f1ebf53a316b90d1", "name": "Commented-code block (7 lines) in apps/web/src/app/admin/(panel)/_lib/metricas.ts:369", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/app/admin/(panel)/_lib/metricas.ts:369"}, "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-fa044c41e49f04ac", "name": "Commented-code block (5 lines) in apps/web/src/app/painel/produtor/_components/mercado-compacto.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/produtor/_components/mercado-compacto.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-c0cdfaa00c82615d", "name": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/cotacoes/_lib/queries.ts:151", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/cotacoes/_lib/queries.ts:151"}, "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-bd023da5c4628845", "name": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/analytics/_lib/queries.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/analytics/_lib/queries.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-84722378ec2d6bcd", "name": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/propostas/_actions.ts:132", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/propostas/_actions.ts:132"}, "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-51f8881edbfbaf4a", "name": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/produtores/_actions.ts:136", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/produtores/_actions.ts:136"}, "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-cb8b99da1077dbaf", "name": "Commented-code block (7 lines) in apps/web/src/app/painel/corretora/contratos/_actions.ts:368", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/app/painel/corretora/contratos/_actions.ts:368"}, "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-a89044f27e93bc64", "name": "Commented-code block (5 lines) in apps/web/src/app/contratos/_lib/queries.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/contratos/_lib/queries.ts:36"}, "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-7cebf5f27fe4b248", "name": "Commented-code block (6 lines) in apps/web/src/lib/utils.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/lib/utils.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfb9e0233e62ca54", "name": "Commented-code block (6 lines) in apps/web/src/lib/logger.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/lib/logger.ts:11"}, "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-09d6a58f15c896f4", "name": "Commented-code block (6 lines) in apps/web/src/hooks/use-local-search-sort.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/hooks/use-local-search-sort.ts: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-2e37f90d2dc6c19a", "name": "Commented-code block (6 lines) in apps/web/src/hooks/use-debounced-value.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/hooks/use-debounced-value.ts: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-7eaf832bfe45c0b4", "name": "Commented-code block (5 lines) in packages/config-tailwind/tokens.js:47", "shortDescription": {"text": "Commented-code block (5 lines) in packages/config-tailwind/tokens.js:47"}, "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-31f44a69edac35b8", "name": "Commented-code block (8 lines) in supabase/functions/sync-cotacoes/_lib/adapters.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/sync-cotacoes/_lib/adapters.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a88fe9b7794f0873", "name": "Commented-code block (6 lines) in supabase/functions/send-dispatch/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/send-dispatch/index.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-cc881fdff1f388c3", "name": "Commented-code block (5 lines) in supabase/functions/_shared/log.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/log.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-cc0f9d8e41b33b0e", "name": "11 env vars used in code but missing from .env.example", "shortDescription": {"text": "11 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `DEMO_EMAIL`, `EXPO_PUBLIC_QUOTES_MODE`, `EXPO_PUBLIC_SITE_URL`, `NEXT_PUBLIC_QUOTES_MODE`, `NEXT_RUNTIME`, `NODE_ENV`, `QUOTES_MODE` + 3 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18143"}, "properties": {"repository": "rickjs2005/milsaca", "repoUrl": "https://github.com/rickjs2005/milsaca", "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-6e6dc78f17eff704", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile/src/lib/logger.ts:171"}, "properties": {"repobilityId": "948183cabee5de4b", "scanner": "scanner-primary", "fingerprint": "6e6dc78f17eff704", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-398e4b609b2077cd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/theme-toggle.tsx:112"}, "properties": {"repobilityId": "cb295b65d3b5fd34", "scanner": "scanner-primary", "fingerprint": "398e4b609b2077cd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2659f563f97d66dd", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/components/theme-toggle.tsx:100"}, "properties": {"repobilityId": "8d9908e8d493e8fc", "scanner": "scanner-primary", "fingerprint": "2659f563f97d66dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-4bfe563903b52d1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/post-composer.tsx:235"}, "properties": {"repobilityId": "aca7e52145407c19", "scanner": "scanner-primary", "fingerprint": "4bfe563903b52d1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b56881d34f0f8380", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/post-card.tsx:42"}, "properties": {"repobilityId": "8eaed048b8574cb5", "scanner": "scanner-primary", "fingerprint": "b56881d34f0f8380", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14d29032da9fb01b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/pages/pessoas.tsx:92"}, "properties": {"repobilityId": "0c50665428490d92", "scanner": "scanner-primary", "fingerprint": "14d29032da9fb01b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a37e97d7da23a764", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/layout.tsx:53"}, "properties": {"repobilityId": "eff0c5cb869a98ef", "scanner": "scanner-primary", "fingerprint": "a37e97d7da23a764", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1e934fe0dc47e9e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/indicacao/[slug]/page.tsx:86"}, "properties": {"repobilityId": "0825dba9f53f0601", "scanner": "scanner-primary", "fingerprint": "1e934fe0dc47e9e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2ab20b0b2d6b4a54", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/page.tsx:251"}, "properties": {"repobilityId": "8571c9d2816ae32c", "scanner": "scanner-primary", "fingerprint": "2ab20b0b2d6b4a54", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ab2e448fb3bc0bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/corretoras/_components/invite-link-card.tsx:43"}, "properties": {"repobilityId": "884723b12d2cc6b7", "scanner": "scanner-primary", "fingerprint": "9ab2e448fb3bc0bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f5ee0319bcc166d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/automacoes/page.tsx:295"}, "properties": {"repobilityId": "dfe1b4ac2726d818", "scanner": "scanner-primary", "fingerprint": "9f5ee0319bcc166d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa6ff1ff9819579c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/_components/command-palette.tsx:234"}, "properties": {"repobilityId": "3dab91dc190b479d", "scanner": "scanner-primary", "fingerprint": "fa6ff1ff9819579c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c6e1bd0fd4aa1f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/(panel)/_components/activity-feed.tsx:181"}, "properties": {"repobilityId": "57e5b5dbf661c7bc", "scanner": "scanner-primary", "fingerprint": "4c6e1bd0fd4aa1f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dacdecef118ce12c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/page.tsx:424"}, "properties": {"repobilityId": "f0325d601fc8089d", "scanner": "scanner-primary", "fingerprint": "dacdecef118ce12c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ba852e48823c927", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/cotacoes/page.tsx:552"}, "properties": {"repobilityId": "13437f9df3682f9c", "scanner": "scanner-primary", "fingerprint": "1ba852e48823c927", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6cf108421a2000c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/vendas/page.tsx:126"}, "properties": {"repobilityId": "c1fae6a50f6a0531", "scanner": "scanner-primary", "fingerprint": "6cf108421a2000c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-149522e271edd4cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/negociacoes/page.tsx:256"}, "properties": {"repobilityId": "44e6ce9f92c4a9d7", "scanner": "scanner-primary", "fingerprint": "149522e271edd4cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-893bfcf25806f93a", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/produtor/negociacoes/page.tsx:163"}, "properties": {"repobilityId": "e408f6215ce9866c", "scanner": "scanner-primary", "fingerprint": "893bfcf25806f93a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-5196c2b73578513e", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/produtor/_components/sidebar.tsx:96"}, "properties": {"repobilityId": "14224c022a05c432", "scanner": "scanner-primary", "fingerprint": "5196c2b73578513e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-c4e2ae43dbd0b89b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/produtor/_components/bottom-nav.tsx:63"}, "properties": {"repobilityId": "935cf9ab7a7e1fd1", "scanner": "scanner-primary", "fingerprint": "c4e2ae43dbd0b89b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b432985b36dab2b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/page.tsx:266"}, "properties": {"repobilityId": "3acf8ff89fa7d43f", "scanner": "scanner-primary", "fingerprint": "b432985b36dab2b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2e1206c743a4d90e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/convidar/_components/convite-produtores.tsx:31"}, "properties": {"repobilityId": "57923f9dbbba5f15", "scanner": "scanner-primary", "fingerprint": "2e1206c743a4d90e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02ce22f8e142ed42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/perfil/page.tsx:290"}, "properties": {"repobilityId": "f6497b8eb4f8185b", "scanner": "scanner-primary", "fingerprint": "02ce22f8e142ed42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd31bb965c5bebd4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/pagamentos/_components/pagamentos-view.tsx:289"}, "properties": {"repobilityId": "694850a6132dfa48", "scanner": "scanner-primary", "fingerprint": "bd31bb965c5bebd4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f1acc333d55d83a8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/tarefas/page.tsx:242"}, "properties": {"repobilityId": "6e335b71c6ab900c", "scanner": "scanner-primary", "fingerprint": "f1acc333d55d83a8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58822ba8695d74d1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/agenda/page.tsx:91"}, "properties": {"repobilityId": "baf5f60add7b3c52", "scanner": "scanner-primary", "fingerprint": "58822ba8695d74d1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7601a3842179e5ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/equipe/page.tsx:198"}, "properties": {"repobilityId": "20c842c2f9038b9b", "scanner": "scanner-primary", "fingerprint": "7601a3842179e5ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df1917ecc5357fea", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/web/src/app/painel/corretora/_components/sidebar.tsx:241"}, "properties": {"repobilityId": "b948e4c4f3fea106", "scanner": "scanner-primary", "fingerprint": "df1917ecc5357fea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-f6fb5021243c2683", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/ranking-produtores.tsx:46"}, "properties": {"repobilityId": "d3f89b0c1c0862dd", "scanner": "scanner-primary", "fingerprint": "f6fb5021243c2683", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62e329ac76407cef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/subscription-banner.tsx:79"}, "properties": {"repobilityId": "85cda1c62f316bcc", "scanner": "scanner-primary", "fingerprint": "62e329ac76407cef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b0db94c63b048ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/painel/corretora/_components/comando.tsx:100"}, "properties": {"repobilityId": "d3236a41347fd436", "scanner": "scanner-primary", "fingerprint": "9b0db94c63b048ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2e3561ab88864409", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/lib/logger.ts:168"}, "properties": {"repobilityId": "a834728d72c07a8c", "scanner": "scanner-primary", "fingerprint": "2e3561ab88864409", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1364a55ee6026d6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 supabase/functions/sync-cotacoes/_lib/adapters.ts:323"}, "properties": {"repobilityId": "1aa3bea7efb37e60", "scanner": "scanner-primary", "fingerprint": "e1364a55ee6026d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2d8677fb664978dc", "level": "error", "message": {"text": "Possible secret in apps/web/scripts/smoke-rbac.mjs"}, "properties": {"repobilityId": "4cd05a97b7f68dbc", "scanner": "scanner-primary", "fingerprint": "2d8677fb664978dc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/scripts/smoke-rbac.mjs"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-ee99fc958dc8f16f", "level": "error", "message": {"text": "Possible secret in apps/web/scripts/smoke-aprovacao.mjs"}, "properties": {"repobilityId": "8846ac32f6a50707", "scanner": "scanner-primary", "fingerprint": "ee99fc958dc8f16f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/scripts/smoke-aprovacao.mjs"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-56ec75813d4ee107", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/layout.tsx:53"}, "properties": {"repobilityId": "346ebefd3b315f3f", "scanner": "scanner-primary", "fingerprint": "56ec75813d4ee107", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/app/layout.tsx"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-5e9d4a7e1b0eabc1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e6c3a7843406f079", "scanner": "scanner-primary", "fingerprint": "5e9d4a7e1b0eabc1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/backup.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-2a776c16dd0fe7d7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "25ff783bfc74c2fb", "scanner": "scanner-primary", "fingerprint": "2a776c16dd0fe7d7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cd.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-2a776c16dd0fe7d7", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3d7ce57e3915757b", "scanner": "scanner-primary", "fingerprint": "2a776c16dd0fe7d7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/cd.yml"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54597edb7f5bad38", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-3701b65670f52f16", "level": "note", "message": {"text": "Very large file: packages/types/src/database.ts (3855 lines)"}, "properties": {"repobilityId": "e804aa8140aeebf4", "scanner": "scanner-primary", "fingerprint": "3701b65670f52f16", "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": "9aaf0ca25fed40cb", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-d0c2205560692580", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/mobile/package.json"}, "properties": {"repobilityId": "b3dfed7bb3d70ed3", "scanner": "scanner-primary", "fingerprint": "d0c2205560692580", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/mobile/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb3e52667c84fb86", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/types/package.json"}, "properties": {"repobilityId": "b5e2784f829944e6", "scanner": "scanner-primary", "fingerprint": "cb3e52667c84fb86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/types/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3f65e1ca9b00183a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/eslint-config/package.json"}, "properties": {"repobilityId": "7374bbf66cd702ed", "scanner": "scanner-primary", "fingerprint": "3f65e1ca9b00183a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/eslint-config/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41d7d99bc546473c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/cob/package.json"}, "properties": {"repobilityId": "e3332eb0c9b713f0", "scanner": "scanner-primary", "fingerprint": "41d7d99bc546473c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cob/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b16ae2bd0fca524", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/db/package.json"}, "properties": {"repobilityId": "2bddd295d559a9b6", "scanner": "scanner-primary", "fingerprint": "7b16ae2bd0fca524", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/db/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "676cb5095ccf3e1f", "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": "52882bebf4749c85", "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": "c2f88fb7efa8721f", "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": "56cf9d47b50772c0", "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": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "b5c22d201789851a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "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": "b4c02d64467ca392", "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": "f98e630b472edb23", "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": "145f20efff6570fe", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff97eb72e5042944", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/revisao-milsaca.md"}, "properties": {"repobilityId": "932342c3361ba051", "scanner": "scanner-primary", "fingerprint": "ff97eb72e5042944", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/revisao-milsaca.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0618abe2849004d0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/milsaca-admin-auditor.md"}, "properties": {"repobilityId": "d90cf79316d841b3", "scanner": "scanner-primary", "fingerprint": "0618abe2849004d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/milsaca-admin-auditor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ed67a49ed3df6036", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/milsaca-corretora-auditor.md"}, "properties": {"repobilityId": "ab383f76f98eae03", "scanner": "scanner-primary", "fingerprint": "ed67a49ed3df6036", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/milsaca-corretora-auditor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ebc8fc54ca3cc0b6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/milsaca-produtor-auditor.md"}, "properties": {"repobilityId": "c5c57433b95500bd", "scanner": "scanner-primary", "fingerprint": "ebc8fc54ca3cc0b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/milsaca-produtor-auditor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9512f9180eb84d2f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/metro.config.js:26"}, "properties": {"repobilityId": "6a67d7994881264b", "scanner": "scanner-primary", "fingerprint": "9512f9180eb84d2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ffc70c3a00d969b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/auth.tsx:3"}, "properties": {"repobilityId": "d2f5cf8ee91d8dc6", "scanner": "scanner-primary", "fingerprint": "1ffc70c3a00d969b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c406d272c14194d", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/lib/use-list.ts:3"}, "properties": {"repobilityId": "6ad60477c8c856af", "scanner": "scanner-primary", "fingerprint": "3c406d272c14194d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ea2a328f9149d4f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/lib/queries.ts:389"}, "properties": {"repobilityId": "4cb1618dadc87b67", "scanner": "scanner-primary", "fingerprint": "3ea2a328f9149d4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a55c2e075d13bd36", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/supabase.ts:21"}, "properties": {"repobilityId": "7c00a4ee335d338a", "scanner": "scanner-primary", "fingerprint": "a55c2e075d13bd36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ccdc6ece801bc2a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/logger.ts:3"}, "properties": {"repobilityId": "310d025c102b19a7", "scanner": "scanner-primary", "fingerprint": "9ccdc6ece801bc2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4667ff69472cc9f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/instrumentation-client.ts:1"}, "properties": {"repobilityId": "6d9aebd191e43f9f", "scanner": "scanner-primary", "fingerprint": "4667ff69472cc9f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfd9e1f7ac7779a0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/rotate-cron-secret.mjs:38"}, "properties": {"repobilityId": "1e7d7808dc0bd31d", "scanner": "scanner-primary", "fingerprint": "cfd9e1f7ac7779a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-041253d1651a64aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/seed-conilon-now.mjs:39"}, "properties": {"repobilityId": "682ee712894bf448", "scanner": "scanner-primary", "fingerprint": "041253d1651a64aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf7bf0b955781650", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/apply-cron.mjs:117"}, "properties": {"repobilityId": "4a470ad1ccc457b9", "scanner": "scanner-primary", "fingerprint": "cf7bf0b955781650", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a55d0cbf69198ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/apply-migration.mjs:74"}, "properties": {"repobilityId": "dfda26d66a4021e0", "scanner": "scanner-primary", "fingerprint": "1a55d0cbf69198ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34099425d7b8cb0c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/scripts/seed-remote.mjs:207"}, "properties": {"repobilityId": "acd195f286a8a1e5", "scanner": "scanner-primary", "fingerprint": "34099425d7b8cb0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9157a4ad1516119", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/wipe-storage.mjs:43"}, "properties": {"repobilityId": "8ba4cfd199f54950", "scanner": "scanner-primary", "fingerprint": "b9157a4ad1516119", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2af149a80d806b0f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/scripts/smoke-fundadora.mjs:65"}, "properties": {"repobilityId": "1b288058bcf8710d", "scanner": "scanner-primary", "fingerprint": "2af149a80d806b0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6db4fb4933f2b1b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/municipio-autocomplete.tsx:28"}, "properties": {"repobilityId": "0ec026d8bf4df0f3", "scanner": "scanner-primary", "fingerprint": "6db4fb4933f2b1b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c783957d692c3d9d", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/app/cadastrar/_actions.ts:204"}, "properties": {"repobilityId": "f921de99eafbf238", "scanner": "scanner-primary", "fingerprint": "c783957d692c3d9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fa688583cace937", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/laudos/[id]/pdf/route.tsx:47"}, "properties": {"repobilityId": "eeba8e049a1d84bc", "scanner": "scanner-primary", "fingerprint": "0fa688583cace937", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b62d44fe2f11252", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/admin/(panel)/assinaturas/_actions.ts:39"}, "properties": {"repobilityId": "46985d86406614c3", "scanner": "scanner-primary", "fingerprint": "1b62d44fe2f11252", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1ebf53a316b90d1", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/app/admin/(panel)/_lib/metricas.ts:369"}, "properties": {"repobilityId": "b780932714a5cb73", "scanner": "scanner-primary", "fingerprint": "f1ebf53a316b90d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa044c41e49f04ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/produtor/_components/mercado-compacto.tsx:1"}, "properties": {"repobilityId": "c5bfe033b126cf48", "scanner": "scanner-primary", "fingerprint": "fa044c41e49f04ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0cdfaa00c82615d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/cotacoes/_lib/queries.ts:151"}, "properties": {"repobilityId": "d7573c9e1ca7f98d", "scanner": "scanner-primary", "fingerprint": "c0cdfaa00c82615d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd023da5c4628845", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/analytics/_lib/queries.ts:1"}, "properties": {"repobilityId": "bc175e0fb530b895", "scanner": "scanner-primary", "fingerprint": "bd023da5c4628845", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84722378ec2d6bcd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/propostas/_actions.ts:132"}, "properties": {"repobilityId": "c8c805f1a49ad6a5", "scanner": "scanner-primary", "fingerprint": "84722378ec2d6bcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51f8881edbfbaf4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/painel/corretora/produtores/_actions.ts:136"}, "properties": {"repobilityId": "b22f8e655abca09f", "scanner": "scanner-primary", "fingerprint": "51f8881edbfbaf4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb8b99da1077dbaf", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/app/painel/corretora/contratos/_actions.ts:368"}, "properties": {"repobilityId": "9e51cfa92a3fdc43", "scanner": "scanner-primary", "fingerprint": "cb8b99da1077dbaf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a89044f27e93bc64", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/contratos/_lib/queries.ts:36"}, "properties": {"repobilityId": "898ba79d61952bd7", "scanner": "scanner-primary", "fingerprint": "a89044f27e93bc64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cebf5f27fe4b248", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/lib/utils.ts:4"}, "properties": {"repobilityId": "7116a169c09b85a3", "scanner": "scanner-primary", "fingerprint": "7cebf5f27fe4b248", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfb9e0233e62ca54", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/lib/logger.ts:11"}, "properties": {"repobilityId": "7c40289ded58f303", "scanner": "scanner-primary", "fingerprint": "cfb9e0233e62ca54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09d6a58f15c896f4", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/hooks/use-local-search-sort.ts:8"}, "properties": {"repobilityId": "32dac58aee63079e", "scanner": "scanner-primary", "fingerprint": "09d6a58f15c896f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e37f90d2dc6c19a", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/hooks/use-debounced-value.ts:8"}, "properties": {"repobilityId": "7cd7d1c6d10efacf", "scanner": "scanner-primary", "fingerprint": "2e37f90d2dc6c19a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7eaf832bfe45c0b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/config-tailwind/tokens.js:47"}, "properties": {"repobilityId": "9a6d25aedffa2295", "scanner": "scanner-primary", "fingerprint": "7eaf832bfe45c0b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31f44a69edac35b8", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/sync-cotacoes/_lib/adapters.ts:9"}, "properties": {"repobilityId": "1f8c1a58aec233e7", "scanner": "scanner-primary", "fingerprint": "31f44a69edac35b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a88fe9b7794f0873", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/send-dispatch/index.ts:1"}, "properties": {"repobilityId": "aefa46a1e11810d7", "scanner": "scanner-primary", "fingerprint": "a88fe9b7794f0873", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc881fdff1f388c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/log.ts:7"}, "properties": {"repobilityId": "51d47a9ab025a2d6", "scanner": "scanner-primary", "fingerprint": "cc881fdff1f388c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0f9d8e41b33b0e", "level": "note", "message": {"text": "11 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c82cd8cd626c3599", "scanner": "scanner-primary", "fingerprint": "cc0f9d8e41b33b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}