{"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-c039234bb8d3da2a", "name": "Possibly dead Python function: bg_canvas", "shortDescription": {"text": "Possibly dead Python function: bg_canvas"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56c9c4ba1e1de62c", "name": "Possibly dead Python function: B", "shortDescription": {"text": "Possibly dead Python function: B"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5502718386470fdf", "name": "Possibly dead Python function: bg_canvas", "shortDescription": {"text": "Possibly dead Python function: bg_canvas"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e96f8c792f840d4", "name": "Stray `console.log` in TS/JS \u2014 app/api/tracking/sync/route.js:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/tracking/sync/route.js:99"}, "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-e921277e1164966b", "name": "Icon-only button without accessible name \u2014 app/ccfinanciera/page.js:633", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/ccfinanciera/page.js:633"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a360f3ebb1981a6", "name": "Icon-only button without accessible name \u2014 app/agente/page.js:1487", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/agente/page.js:1487"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-019400ccd7b23f95", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/agente/page.js:659", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/agente/page.js:659"}, "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-87ca7c8a9f1e387e", "name": "TODO/FIXME marker in shipping code \u2014 app/feedback/page.js:6", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/feedback/page.js:6"}, "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-e677cc9c68bc521a", "name": "Icon-only button without accessible name \u2014 app/cinabrio/page.js:1554", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/cinabrio/page.js:1554"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ede14ce6b14363d2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/cinabrio/page.js:219", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/cinabrio/page.js:219"}, "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-50c180e240ac9ec4", "name": "Icon-only button without accessible name \u2014 app/gi/page.js:2551", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/gi/page.js:2551"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f6aa5e7d2954dc29", "name": "Icon-only button without accessible name \u2014 app/mkt/page.js:514", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/mkt/page.js:514"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a184d441d26ee304", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/portal/page.js:127", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/portal/page.js:127"}, "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-964aa95971145dce", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/ui.js:50", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/ui.js:50"}, "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-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd2135c3b2d14b37", "name": "Insecure pattern 'direct_innerhtml_assignment' in presupuesto-underwave.html:105", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in presupuesto-underwave.html:105"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-afdf148a96bae3f0", "name": "Insecure pattern 'document_write' in app/agente/page.js:1181", "shortDescription": {"text": "Insecure pattern 'document_write' in app/agente/page.js:1181"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e69fe808068a38a0", "name": "Insecure pattern 'dangerous_innerhtml' in app/agente/page.js:659", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/agente/page.js:659"}, "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-80c50676561d5361", "name": "Insecure pattern 'dangerous_innerhtml' in app/cinabrio/page.js:219", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/cinabrio/page.js:219"}, "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-beac18bac01df61e", "name": "Possible secret in app/portal/page.js", "shortDescription": {"text": "Possible secret in app/portal/page.js"}, "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-86126ea5cfb19d2d", "name": "Insecure pattern 'document_write' in app/portal/page.js:1008", "shortDescription": {"text": "Insecure pattern 'document_write' in app/portal/page.js:1008"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9467eea2a57004bf", "name": "Insecure pattern 'dangerous_innerhtml' in app/portal/page.js:127", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/portal/page.js:127"}, "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-e2ef826b346bb960", "name": "Insecure pattern 'dangerous_innerhtml' in lib/ui.js:50", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in lib/ui.js:50"}, "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-f8d1800b91dc8c95", "name": "Very large file: app/agente/page.js (2294 lines)", "shortDescription": {"text": "Very large file: app/agente/page.js (2294 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-2b5ce8781b47eb4b", "name": "Very large file: app/cinabrio/page.js (1804 lines)", "shortDescription": {"text": "Very large file: app/cinabrio/page.js (1804 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-56900ac66cee1709", "name": "Very large file: app/gi/page.js (2829 lines)", "shortDescription": {"text": "Very large file: app/gi/page.js (2829 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-99b90dfd6dfeaedd", "name": "Very large file: app/mkt/page.js (868 lines)", "shortDescription": {"text": "Very large file: app/mkt/page.js (868 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-da819fde368eb73c", "name": "Very large file: app/portal/page.js (3213 lines)", "shortDescription": {"text": "Very large file: app/portal/page.js (3213 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-470f609e8e32faca", "name": "Very large file: lib/pdf-templates.js (1779 lines)", "shortDescription": {"text": "Very large file: lib/pdf-templates.js (1779 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "2 test file(s) for 84 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3ed68815bca2f8c", "name": "Node manifest has dependencies but no lockfile: package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 129 placeholder/mock markers across 11 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, operator-readme, 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": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, operator-readme, 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-deb1a142c7d7d015", "name": "Commented-code block (5 lines) in app/layout.js:68", "shortDescription": {"text": "Commented-code block (5 lines) in app/layout.js:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d11a90f62a18c5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cotizacion/[token]/page.js:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cotizacion/[token]/page.js:91"}, "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-11d1adc1690d60a0", "name": "Commented-code block (5 lines) in app/api/notify/route.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/notify/route.js: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-ce85d9f7ce78ecf3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/route.js:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/route.js:71"}, "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-ba90cc3b61d9e37d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/test/route.js:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/test/route.js:78"}, "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-c1ca4c6793f02cc4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/preview/route.js:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/preview/route.js:44"}, "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-afec5f7480c3266d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ncm/route.js:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ncm/route.js:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e49397c5ecd3670d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/mkt-scraper/route.js:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/mkt-scraper/route.js:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6bd7598e2ddc625b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/monthly-report/route.js:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/monthly-report/route.js:16"}, "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-8030df13032382b3", "name": "Commented-code block (6 lines) in app/api/cron/client-nudges/route.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/cron/client-nudges/route.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee3151a94af055ab", "name": "Commented-code block (5 lines) in app/api/cron/mkt-generate-month/route.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cron/mkt-generate-month/route.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb3d20d17e4fdd76", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/mkt-generate-month/route.js:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/mkt-generate-month/route.js:15"}, "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-36a2f11e4dafde84", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/intelligence/route.js:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/intelligence/route.js:10"}, "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-870090be2f25ec63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tracking/_helpers.js:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tracking/_helpers.js:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3339f2cb5649ffdd", "name": "Legacy-named symbol `skippedOld` in app/api/tracking/sync/route.js:79", "shortDescription": {"text": "Legacy-named symbol `skippedOld` in app/api/tracking/sync/route.js:79"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00baa2394f44cb45", "name": "Commented-code block (6 lines) in app/api/tracking/sync/route.js:115", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/tracking/sync/route.js:115"}, "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-d607de023f758ad1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tracking/sync/route.js:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tracking/sync/route.js: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-32e4bca1104cc731", "name": "Commented-code block (5 lines) in app/api/compress-items/route.js:83", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/compress-items/route.js:83"}, "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-1f2da9c394bbb653", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/feedback/route.js:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/feedback/route.js:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-769b607de1d2d352", "name": "Commented-code block (5 lines) in app/api/points/expire/route.js:31", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/points/expire/route.js:31"}, "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-0664218020937881", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/marketing/optout/route.js:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/marketing/optout/route.js:16"}, "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-7d4abcaeee5d67ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cleanup/photos/route.js:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cleanup/photos/route.js:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2aba8478c6cede03", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/push/send/route.js:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/push/send/route.js:162"}, "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-e31aac21c9a13e02", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/push/subscribe/route.js:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/push/subscribe/route.js:15"}, "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-03eaa346f30581e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/reminders/route.js:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/reminders/route.js:104"}, "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-4380cdecafc492db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tickets/route.js:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tickets/route.js:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d82afd6323274f83", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tickets/[id]/route.js:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tickets/[id]/route.js:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74d8ea7a2ad64502", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/track/[code]/route.js:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/track/[code]/route.js:10"}, "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-0927fbf025d2299c", "name": "Commented-code block (6 lines) in app/ccfinanciera/page.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in app/ccfinanciera/page.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b845967ced1c5c47", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/components/TicketsPanel.js:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/components/TicketsPanel.js:27"}, "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-0919f59514b43ae0", "name": "Commented-code block (6 lines) in app/agente/page.js:2161", "shortDescription": {"text": "Commented-code block (6 lines) in app/agente/page.js:2161"}, "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-7011d85397e54096", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/agente/page.js:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/agente/page.js:62"}, "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-47a2e863595dda52", "name": "Commented-code block (5 lines) in app/cinabrio/page.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/cinabrio/page.js:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14cc3fbb960cd6f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cinabrio/page.js:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cinabrio/page.js:91"}, "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-20c9e2f95913cde6", "name": "Commented-code block (9 lines) in app/gi/page.js:1074", "shortDescription": {"text": "Commented-code block (9 lines) in app/gi/page.js:1074"}, "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-3b2e0bd17469a019", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/gi/page.js:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/gi/page.js:48"}, "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-cbd46aa74f1049b5", "name": "Commented-code block (5 lines) in app/portal/page.js:1102", "shortDescription": {"text": "Commented-code block (5 lines) in app/portal/page.js:1102"}, "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-4f18779a68830a5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/portal/page.js:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/portal/page.js:30"}, "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-047a317b9ff7ec75", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/portal/components/SupportPage.js:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/portal/components/SupportPage.js:22"}, "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-1251cdf87c0997f4", "name": "Commented-code block (6 lines) in lib/pdf-templates.js:83", "shortDescription": {"text": "Commented-code block (6 lines) in lib/pdf-templates.js:83"}, "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-bd1f51873db5adc7", "name": "Commented-code block (7 lines) in lib/offline-queue.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in lib/offline-queue.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba3dc72a06ddeb1c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/offline-queue.js:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/offline-queue.js:121"}, "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-5e51734178072256", "name": "Commented-code block (6 lines) in lib/ui.js:404", "shortDescription": {"text": "Commented-code block (6 lines) in lib/ui.js:404"}, "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-6dec458d44d46cf3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/sb-client.js:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/sb-client.js:53"}, "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-9f8744d7a2e89b9d", "name": "Commented-code block (8 lines) in lib/calc.js:4", "shortDescription": {"text": "Commented-code block (8 lines) in lib/calc.js: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-cb2b444ad7ae5524", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/anthropic.js:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/anthropic.js:33"}, "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-5dd26ba5c175b142", "name": "Commented-code block (5 lines) in lib/i18n-portal.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in lib/i18n-portal.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae25fc31b6cd5b78", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/tracking/carriers.js:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/tracking/carriers.js:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ngenerate-manual-zh.py:build, generate-manual.py:build\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24496"}, "properties": {"repository": "bautiartuso/argencargo", "repoUrl": "https://github.com/bautiartuso/argencargo", "branch": "main"}, "results": [{"ruleId": "scanner-c039234bb8d3da2a", "level": "note", "message": {"text": "Possibly dead Python function: bg_canvas"}, "properties": {"repobilityId": "cca8ce72cda0f7a0", "scanner": "scanner-primary", "fingerprint": "c039234bb8d3da2a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "generate-manual-zh.py:43"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56c9c4ba1e1de62c", "level": "note", "message": {"text": "Possibly dead Python function: B"}, "properties": {"repobilityId": "23aca9a55c343e56", "scanner": "scanner-primary", "fingerprint": "56c9c4ba1e1de62c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "generate-manual-zh.py:59"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5502718386470fdf", "level": "note", "message": {"text": "Possibly dead Python function: bg_canvas"}, "properties": {"repobilityId": "cca8ce72cda0f7a0", "scanner": "scanner-primary", "fingerprint": "5502718386470fdf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "generate-manual.py:36"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e96f8c792f840d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/tracking/sync/route.js:99"}, "properties": {"repobilityId": "8ce2954419a9206f", "scanner": "scanner-primary", "fingerprint": "9e96f8c792f840d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e921277e1164966b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/ccfinanciera/page.js:633"}, "properties": {"repobilityId": "ebe990258ef72f3b", "scanner": "scanner-primary", "fingerprint": "e921277e1164966b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0a360f3ebb1981a6", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/agente/page.js:1487"}, "properties": {"repobilityId": "ec26608e14e0d1da", "scanner": "scanner-primary", "fingerprint": "0a360f3ebb1981a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-019400ccd7b23f95", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/agente/page.js:659"}, "properties": {"repobilityId": "9e72876cf75ea0a6", "scanner": "scanner-primary", "fingerprint": "019400ccd7b23f95", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-87ca7c8a9f1e387e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/feedback/page.js:6"}, "properties": {"repobilityId": "e37ca4aaafce8329", "scanner": "scanner-primary", "fingerprint": "87ca7c8a9f1e387e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e677cc9c68bc521a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/cinabrio/page.js:1554"}, "properties": {"repobilityId": "91fb147d3c6e1767", "scanner": "scanner-primary", "fingerprint": "e677cc9c68bc521a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ede14ce6b14363d2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/cinabrio/page.js:219"}, "properties": {"repobilityId": "7124400e1e81fa3d", "scanner": "scanner-primary", "fingerprint": "ede14ce6b14363d2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-50c180e240ac9ec4", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/gi/page.js:2551"}, "properties": {"repobilityId": "585bc376b99060f3", "scanner": "scanner-primary", "fingerprint": "50c180e240ac9ec4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f6aa5e7d2954dc29", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/mkt/page.js:514"}, "properties": {"repobilityId": "3281f51272191de2", "scanner": "scanner-primary", "fingerprint": "f6aa5e7d2954dc29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a184d441d26ee304", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/portal/page.js:127"}, "properties": {"repobilityId": "45a7a1c0a95cb087", "scanner": "scanner-primary", "fingerprint": "a184d441d26ee304", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-964aa95971145dce", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 lib/ui.js:50"}, "properties": {"repobilityId": "ba2751784b371022", "scanner": "scanner-primary", "fingerprint": "964aa95971145dce", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-cd2135c3b2d14b37", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in presupuesto-underwave.html:105"}, "properties": {"repobilityId": "c8d090527de0dced", "scanner": "scanner-primary", "fingerprint": "cd2135c3b2d14b37", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "presupuesto-underwave.html"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-afdf148a96bae3f0", "level": "note", "message": {"text": "Insecure pattern 'document_write' in app/agente/page.js:1181"}, "properties": {"repobilityId": "4014e4907eaf0434", "scanner": "scanner-primary", "fingerprint": "afdf148a96bae3f0", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/agente/page.js"}, "region": {"startLine": 1181}}}]}, {"ruleId": "scanner-e69fe808068a38a0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/agente/page.js:659"}, "properties": {"repobilityId": "9ec40c0664f7cee2", "scanner": "scanner-primary", "fingerprint": "e69fe808068a38a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/agente/page.js"}, "region": {"startLine": 659}}}]}, {"ruleId": "scanner-80c50676561d5361", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/cinabrio/page.js:219"}, "properties": {"repobilityId": "89fca9011d29450f", "scanner": "scanner-primary", "fingerprint": "80c50676561d5361", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/cinabrio/page.js"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-beac18bac01df61e", "level": "error", "message": {"text": "Possible secret in app/portal/page.js"}, "properties": {"repobilityId": "86ea7e5b9b5405a2", "scanner": "scanner-primary", "fingerprint": "beac18bac01df61e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/portal/page.js"}, "region": {"startLine": 3040}}}]}, {"ruleId": "scanner-beac18bac01df61e", "level": "error", "message": {"text": "Possible secret in app/portal/page.js"}, "properties": {"repobilityId": "86ea7e5b9b5405a2", "scanner": "scanner-primary", "fingerprint": "beac18bac01df61e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/portal/page.js"}, "region": {"startLine": 3040}}}]}, {"ruleId": "scanner-beac18bac01df61e", "level": "error", "message": {"text": "Possible secret in app/portal/page.js"}, "properties": {"repobilityId": "86ea7e5b9b5405a2", "scanner": "scanner-primary", "fingerprint": "beac18bac01df61e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/portal/page.js"}, "region": {"startLine": 3040}}}]}, {"ruleId": "scanner-86126ea5cfb19d2d", "level": "note", "message": {"text": "Insecure pattern 'document_write' in app/portal/page.js:1008"}, "properties": {"repobilityId": "3163be8667314c30", "scanner": "scanner-primary", "fingerprint": "86126ea5cfb19d2d", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/portal/page.js"}, "region": {"startLine": 1008}}}]}, {"ruleId": "scanner-9467eea2a57004bf", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/portal/page.js:127"}, "properties": {"repobilityId": "e1bcf0c5bad5a886", "scanner": "scanner-primary", "fingerprint": "9467eea2a57004bf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/portal/page.js"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-e2ef826b346bb960", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in lib/ui.js:50"}, "properties": {"repobilityId": "63d3543a04dd36e7", "scanner": "scanner-primary", "fingerprint": "e2ef826b346bb960", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/ui.js"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-f8d1800b91dc8c95", "level": "note", "message": {"text": "Very large file: app/agente/page.js (2294 lines)"}, "properties": {"repobilityId": "68c9d971a4c5cad1", "scanner": "scanner-primary", "fingerprint": "f8d1800b91dc8c95", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2b5ce8781b47eb4b", "level": "note", "message": {"text": "Very large file: app/cinabrio/page.js (1804 lines)"}, "properties": {"repobilityId": "6fafdf8f2ae8b940", "scanner": "scanner-primary", "fingerprint": "2b5ce8781b47eb4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-56900ac66cee1709", "level": "note", "message": {"text": "Very large file: app/gi/page.js (2829 lines)"}, "properties": {"repobilityId": "056a9edf3c48c878", "scanner": "scanner-primary", "fingerprint": "56900ac66cee1709", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-99b90dfd6dfeaedd", "level": "note", "message": {"text": "Very large file: app/mkt/page.js (868 lines)"}, "properties": {"repobilityId": "5ccb15e19a89904b", "scanner": "scanner-primary", "fingerprint": "99b90dfd6dfeaedd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-da819fde368eb73c", "level": "note", "message": {"text": "Very large file: app/portal/page.js (3213 lines)"}, "properties": {"repobilityId": "e32f0fbc35e2c943", "scanner": "scanner-primary", "fingerprint": "da819fde368eb73c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-470f609e8e32faca", "level": "note", "message": {"text": "Very large file: lib/pdf-templates.js (1779 lines)"}, "properties": {"repobilityId": "3e288f13781ddb6b", "scanner": "scanner-primary", "fingerprint": "470f609e8e32faca", "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": "140579a37e154869", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "37f9f2aded587576", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b3ed68815bca2f8c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: package.json"}, "properties": {"repobilityId": "7edae0550c126386", "scanner": "scanner-primary", "fingerprint": "b3ed68815bca2f8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "60b04944dc06b0db", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "fbea36d7f63d5b25", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "ed9da9f26030123c", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "0e6866d4a79227a4", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-deb1a142c7d7d015", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/layout.js:68"}, "properties": {"repobilityId": "57061f5d02ef6408", "scanner": "scanner-primary", "fingerprint": "deb1a142c7d7d015", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d11a90f62a18c5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cotizacion/[token]/page.js:91"}, "properties": {"repobilityId": "36799af374e39aa7", "scanner": "scanner-primary", "fingerprint": "8d11a90f62a18c5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-11d1adc1690d60a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/notify/route.js:8"}, "properties": {"repobilityId": "941dd1545c334f6b", "scanner": "scanner-primary", "fingerprint": "11d1adc1690d60a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce85d9f7ce78ecf3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/route.js:71"}, "properties": {"repobilityId": "e6f3b69abbad32a4", "scanner": "scanner-primary", "fingerprint": "ce85d9f7ce78ecf3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ba90cc3b61d9e37d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/test/route.js:78"}, "properties": {"repobilityId": "ae7f232585c8ec73", "scanner": "scanner-primary", "fingerprint": "ba90cc3b61d9e37d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c1ca4c6793f02cc4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/notify/preview/route.js:44"}, "properties": {"repobilityId": "2cf8d171990f64ba", "scanner": "scanner-primary", "fingerprint": "c1ca4c6793f02cc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-afec5f7480c3266d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ncm/route.js:11"}, "properties": {"repobilityId": "c1b5d5711624a3c0", "scanner": "scanner-primary", "fingerprint": "afec5f7480c3266d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e49397c5ecd3670d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/mkt-scraper/route.js:12"}, "properties": {"repobilityId": "fcb5e82541ea77d6", "scanner": "scanner-primary", "fingerprint": "e49397c5ecd3670d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6bd7598e2ddc625b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/monthly-report/route.js:16"}, "properties": {"repobilityId": "c0d01ae6aafecdd3", "scanner": "scanner-primary", "fingerprint": "6bd7598e2ddc625b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8030df13032382b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/cron/client-nudges/route.js:1"}, "properties": {"repobilityId": "a53c96b38d2fa85d", "scanner": "scanner-primary", "fingerprint": "8030df13032382b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee3151a94af055ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cron/mkt-generate-month/route.js:1"}, "properties": {"repobilityId": "981e80b5061e6082", "scanner": "scanner-primary", "fingerprint": "ee3151a94af055ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb3d20d17e4fdd76", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/mkt-generate-month/route.js:15"}, "properties": {"repobilityId": "78a7465622b446a6", "scanner": "scanner-primary", "fingerprint": "bb3d20d17e4fdd76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-36a2f11e4dafde84", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/intelligence/route.js:10"}, "properties": {"repobilityId": "d459e4729f85834e", "scanner": "scanner-primary", "fingerprint": "36a2f11e4dafde84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-870090be2f25ec63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tracking/_helpers.js:12"}, "properties": {"repobilityId": "1ea47186038a1233", "scanner": "scanner-primary", "fingerprint": "870090be2f25ec63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3339f2cb5649ffdd", "level": "note", "message": {"text": "Legacy-named symbol `skippedOld` in app/api/tracking/sync/route.js:79"}, "properties": {"repobilityId": "6fee2cbfbca15247", "scanner": "scanner-primary", "fingerprint": "3339f2cb5649ffdd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-00baa2394f44cb45", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/tracking/sync/route.js:115"}, "properties": {"repobilityId": "99bb367947d3480a", "scanner": "scanner-primary", "fingerprint": "00baa2394f44cb45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d607de023f758ad1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tracking/sync/route.js:43"}, "properties": {"repobilityId": "7d91b994eac3eaff", "scanner": "scanner-primary", "fingerprint": "d607de023f758ad1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32e4bca1104cc731", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/compress-items/route.js:83"}, "properties": {"repobilityId": "487b12b66c88dcf9", "scanner": "scanner-primary", "fingerprint": "32e4bca1104cc731", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f2da9c394bbb653", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/feedback/route.js:12"}, "properties": {"repobilityId": "5fe8ff78fba0672b", "scanner": "scanner-primary", "fingerprint": "1f2da9c394bbb653", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-769b607de1d2d352", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/points/expire/route.js:31"}, "properties": {"repobilityId": "73352b805600b650", "scanner": "scanner-primary", "fingerprint": "769b607de1d2d352", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0664218020937881", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/marketing/optout/route.js:16"}, "properties": {"repobilityId": "d5b3327be33943be", "scanner": "scanner-primary", "fingerprint": "0664218020937881", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d4abcaeee5d67ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cleanup/photos/route.js:11"}, "properties": {"repobilityId": "f42e3c743e9e6777", "scanner": "scanner-primary", "fingerprint": "7d4abcaeee5d67ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2aba8478c6cede03", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/push/send/route.js:162"}, "properties": {"repobilityId": "f9fd82cf101a1a27", "scanner": "scanner-primary", "fingerprint": "2aba8478c6cede03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e31aac21c9a13e02", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/push/subscribe/route.js:15"}, "properties": {"repobilityId": "7222579a0a4ea811", "scanner": "scanner-primary", "fingerprint": "e31aac21c9a13e02", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03eaa346f30581e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/reminders/route.js:104"}, "properties": {"repobilityId": "1402c433d4d3ec2d", "scanner": "scanner-primary", "fingerprint": "03eaa346f30581e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4380cdecafc492db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tickets/route.js:6"}, "properties": {"repobilityId": "60004452e418e9d7", "scanner": "scanner-primary", "fingerprint": "4380cdecafc492db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d82afd6323274f83", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/tickets/[id]/route.js:6"}, "properties": {"repobilityId": "6d0b4f06bc99fd67", "scanner": "scanner-primary", "fingerprint": "d82afd6323274f83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74d8ea7a2ad64502", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/track/[code]/route.js:10"}, "properties": {"repobilityId": "1f21cf557db78c49", "scanner": "scanner-primary", "fingerprint": "74d8ea7a2ad64502", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0927fbf025d2299c", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/ccfinanciera/page.js:6"}, "properties": {"repobilityId": "072327578541aa74", "scanner": "scanner-primary", "fingerprint": "0927fbf025d2299c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b845967ced1c5c47", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/components/TicketsPanel.js:27"}, "properties": {"repobilityId": "9a1bc9aa3006df5c", "scanner": "scanner-primary", "fingerprint": "b845967ced1c5c47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0919f59514b43ae0", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/agente/page.js:2161"}, "properties": {"repobilityId": "7b57f08dcca3ff6c", "scanner": "scanner-primary", "fingerprint": "0919f59514b43ae0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7011d85397e54096", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/agente/page.js:62"}, "properties": {"repobilityId": "765b9c754d6f6674", "scanner": "scanner-primary", "fingerprint": "7011d85397e54096", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-47a2e863595dda52", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/cinabrio/page.js:5"}, "properties": {"repobilityId": "42cd493df0e12820", "scanner": "scanner-primary", "fingerprint": "47a2e863595dda52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14cc3fbb960cd6f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cinabrio/page.js:91"}, "properties": {"repobilityId": "77f20b3e7c2b4437", "scanner": "scanner-primary", "fingerprint": "14cc3fbb960cd6f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20c9e2f95913cde6", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/gi/page.js:1074"}, "properties": {"repobilityId": "f22eff277ee8627b", "scanner": "scanner-primary", "fingerprint": "20c9e2f95913cde6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b2e0bd17469a019", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/gi/page.js:48"}, "properties": {"repobilityId": "6ddb973bebc13c1a", "scanner": "scanner-primary", "fingerprint": "3b2e0bd17469a019", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbd46aa74f1049b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/portal/page.js:1102"}, "properties": {"repobilityId": "5243c36900b4e225", "scanner": "scanner-primary", "fingerprint": "cbd46aa74f1049b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f18779a68830a5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/portal/page.js:30"}, "properties": {"repobilityId": "f385d37d2a06fbf0", "scanner": "scanner-primary", "fingerprint": "4f18779a68830a5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-047a317b9ff7ec75", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/portal/components/SupportPage.js:22"}, "properties": {"repobilityId": "52075584c07f48b4", "scanner": "scanner-primary", "fingerprint": "047a317b9ff7ec75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1251cdf87c0997f4", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/pdf-templates.js:83"}, "properties": {"repobilityId": "503b416f1ee26963", "scanner": "scanner-primary", "fingerprint": "1251cdf87c0997f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd1f51873db5adc7", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/offline-queue.js:1"}, "properties": {"repobilityId": "0f4a6c02ee014fb0", "scanner": "scanner-primary", "fingerprint": "bd1f51873db5adc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba3dc72a06ddeb1c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/offline-queue.js:121"}, "properties": {"repobilityId": "13e6f7dc63086bc4", "scanner": "scanner-primary", "fingerprint": "ba3dc72a06ddeb1c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e51734178072256", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/ui.js:404"}, "properties": {"repobilityId": "95b53c301d790e43", "scanner": "scanner-primary", "fingerprint": "5e51734178072256", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dec458d44d46cf3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/sb-client.js:53"}, "properties": {"repobilityId": "9e31695b6aa70458", "scanner": "scanner-primary", "fingerprint": "6dec458d44d46cf3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f8744d7a2e89b9d", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/calc.js:4"}, "properties": {"repobilityId": "8c857e7a80a2c745", "scanner": "scanner-primary", "fingerprint": "9f8744d7a2e89b9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb2b444ad7ae5524", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/anthropic.js:33"}, "properties": {"repobilityId": "9ae5c46e4797065c", "scanner": "scanner-primary", "fingerprint": "cb2b444ad7ae5524", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5dd26ba5c175b142", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/i18n-portal.js:1"}, "properties": {"repobilityId": "f1ff990ce8706184", "scanner": "scanner-primary", "fingerprint": "5dd26ba5c175b142", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae25fc31b6cd5b78", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/tracking/carriers.js:25"}, "properties": {"repobilityId": "3f35eef5c9629c30", "scanner": "scanner-primary", "fingerprint": "ae25fc31b6cd5b78", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ffc1ebbf33257074", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}