{"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-bcb1824907832117", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/offer/[id]/page.js:121", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/offer/[id]/page.js:121"}, "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-dc5c01138ed087e8", "name": "Stray `console.log` in TS/JS \u2014 src/lib/email.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email.ts:45"}, "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-fcfa3746e4a4e678", "name": "Insecure pattern 'node_child_process' in src/scripts/populate-all-categories.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/scripts/populate-all-categories.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bc49d920202a8e6e", "name": "Insecure pattern 'node_child_process' in src/scripts/batch-parse-masoutis.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/scripts/batch-parse-masoutis.mjs:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f791919c8c8a885", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/offer/[id]/page.js:121", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/offer/[id]/page.js:121"}, "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-e7babb2044d6c0cf", "name": "Very large file: src/components/AdminPanel.js (1115 lines)", "shortDescription": {"text": "Very large file: src/components/AdminPanel.js (1115 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": "19 test file(s) for 225 source file(s) (ratio 0.08). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 839 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 22 placeholder/mock markers across 14 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-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. 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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19fd4a9550efe410", "name": "Commented-code block (6 lines) in capacitor.config.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in capacitor.config.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-26c8740622067b5f", "name": "Commented-code block (7 lines) in next.config.mjs:6", "shortDescription": {"text": "Commented-code block (7 lines) in next.config.mjs: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-a4bf6fc1b4f6256c", "name": "Commented-code block (9 lines) in src/auth.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in src/auth.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-c2500124950e5690", "name": "Legacy-named symbol `lowest_price_v2` in src/scripts/probe-mono-offers.mjs:55", "shortDescription": {"text": "Legacy-named symbol `lowest_price_v2` in src/scripts/probe-mono-offers.mjs:55"}, "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-496f1362d04f21e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-mono-offers.mjs:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-mono-offers.mjs: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-5e0c81060ac7de58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/investigate-wolt-barcode-dupes.mjs:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/investigate-wolt-barcode-dupes.mjs:18"}, "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-8ef70d0de163d454", "name": "Commented-code block (5 lines) in src/scripts/audit-mappings.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/audit-mappings.mjs: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-65485a07062ca2db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-fullcatalog.mjs:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-fullcatalog.mjs:18"}, "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-81169015b0f1fcb8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-kritikos-current.mjs:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-kritikos-current.mjs:13"}, "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-16ff6b914acee9d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-masoutis-jsbundle.mjs:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-masoutis-jsbundle.mjs: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-07d943f14da204ad", "name": "Commented-code block (8 lines) in src/scripts/mymarket-catalog.mjs:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/scripts/mymarket-catalog.mjs: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-5557fde08248d70b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/mymarket-catalog.mjs:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/mymarket-catalog.mjs:47"}, "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-c2c817822f31de77", "name": "Commented-code block (5 lines) in src/scripts/wolt-canonical-scraper.mjs:57", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/wolt-canonical-scraper.mjs:57"}, "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-5a997550016bb7bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/wolt-canonical-scraper.mjs:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/wolt-canonical-scraper.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-d389dd653916e733", "name": "Commented-code block (5 lines) in src/scripts/probe-ab-catalog.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/probe-ab-catalog.mjs: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-6aca5213900616fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-ab-catalog.mjs:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-ab-catalog.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-4bd769de411447f2", "name": "Commented-code block (6 lines) in src/scripts/recompute-categories.mjs:69", "shortDescription": {"text": "Commented-code block (6 lines) in src/scripts/recompute-categories.mjs:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7f4c0929d37a6a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-pagination.mjs:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-pagination.mjs:21"}, "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-171577a4f9e35553", "name": "Commented-code block (7 lines) in src/scripts/recompute-hotness.mjs:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/scripts/recompute-hotness.mjs: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-a5c131f75b95179b", "name": "Legacy-named symbol `lowest_price_v2` in src/scripts/probe-mono-signals.mjs:52", "shortDescription": {"text": "Legacy-named symbol `lowest_price_v2` in src/scripts/probe-mono-signals.mjs:52"}, "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-5e704dacc46da468", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-mono-signals.mjs:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-mono-signals.mjs:13"}, "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-bfab1636a507b530", "name": "Commented-code block (7 lines) in src/scripts/ab-catalog.mjs:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/scripts/ab-catalog.mjs: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-39359d8c73abdd5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/ab-catalog.mjs:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/ab-catalog.mjs:58"}, "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-bf646027860446d1", "name": "Commented-code block (9 lines) in src/scripts/kritikos-canonical-scraper.mjs:17", "shortDescription": {"text": "Commented-code block (9 lines) in src/scripts/kritikos-canonical-scraper.mjs:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d39e1de742f70b20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/kritikos-canonical-scraper.mjs:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/kritikos-canonical-scraper.mjs:76"}, "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-b35468455e08ee66", "name": "Commented-code block (5 lines) in src/scripts/probe-other-chains.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/probe-other-chains.mjs: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-9f6c51388d7cbe10", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-assortment.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-assortment.mjs: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-d75e2e3b9c4c6453", "name": "Commented-code block (5 lines) in src/scripts/mirror-catalog.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/mirror-catalog.mjs: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-8645702a11db5bdc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-openfoodfacts.mjs:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-openfoodfacts.mjs:29"}, "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-a04b5c93fd927964", "name": "Commented-code block (5 lines) in src/scripts/lidl-catalog.mjs:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/lidl-catalog.mjs: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-78ad4eb79e57d7c4", "name": "Commented-code block (5 lines) in src/scripts/probe-masoutis-catalog.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/probe-masoutis-catalog.mjs: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-4498880f89d1c71a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-kritikos-deep.mjs:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-kritikos-deep.mjs:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53459a80f0c7090e", "name": "Commented-code block (6 lines) in src/scripts/probe-masoutis-scannshop.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/scripts/probe-masoutis-scannshop.mjs: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-a546b4b5188fc736", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-lidl-catalog.mjs:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-lidl-catalog.mjs: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-c217bead295b964a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/test-prompt-fix.mjs:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/test-prompt-fix.mjs:63"}, "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-ec25dce070aa69a4", "name": "Commented-code block (5 lines) in src/scripts/backfill-lidl-images.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/backfill-lidl-images.mjs: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-153f188a6bfa0bcc", "name": "Commented-code block (5 lines) in src/scripts/resolve-pending-matches.mjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/resolve-pending-matches.mjs: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-829ff76a3af28745", "name": "Commented-code block (6 lines) in src/scripts/probe-masoutis-deep.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/scripts/probe-masoutis-deep.mjs: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-6859631a3e8eccc2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-masoutis-deep.mjs:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-masoutis-deep.mjs:109"}, "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-38214a5cd0a6009a", "name": "Commented-code block (13 lines) in src/scripts/adapters/mymarket.mjs:11", "shortDescription": {"text": "Commented-code block (13 lines) in src/scripts/adapters/mymarket.mjs: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-31a4954dfdc36188", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/mymarket.mjs:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/mymarket.mjs:77"}, "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-23b00aac5307a481", "name": "Commented-code block (7 lines) in src/scripts/adapters/ab.mjs:11", "shortDescription": {"text": "Commented-code block (7 lines) in src/scripts/adapters/ab.mjs: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-a2c21fbdd74ac9a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/ab.mjs:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/ab.mjs:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33ba145cff013282", "name": "Commented-code block (6 lines) in src/scripts/adapters/lidl.mjs:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/scripts/adapters/lidl.mjs: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-7266497c25fe20a2", "name": "Commented-code block (13 lines) in src/scripts/adapters/sklavenitis.mjs:12", "shortDescription": {"text": "Commented-code block (13 lines) in src/scripts/adapters/sklavenitis.mjs:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84dacd7411d3ca0d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/sklavenitis.mjs:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/sklavenitis.mjs:81"}, "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-315305a2ce777bdc", "name": "Commented-code block (7 lines) in src/scripts/adapters/kritikos.mjs:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/scripts/adapters/kritikos.mjs:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d1144774ccdf223", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/kritikos.mjs:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/kritikos.mjs:36"}, "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-d780b9ad0cad7091", "name": "Commented-code block (5 lines) in src/scripts/adapters/masoutis.mjs:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/adapters/masoutis.mjs:15"}, "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-4e04088e6c811e86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/masoutis.mjs:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/masoutis.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-a4c2614274dd2199", "name": "Commented-code block (6 lines) in src/scripts/lib/proxy-fetch.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/scripts/lib/proxy-fetch.mjs: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-0e87f24a799c13cc", "name": "Commented-code block (5 lines) in src/scripts/lib/lidl-image-backfill.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/lib/lidl-image-backfill.mjs: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-f9f60f68cb0bca38", "name": "Commented-code block (7 lines) in src/scripts/lib/lidl-eshop.mjs:13", "shortDescription": {"text": "Commented-code block (7 lines) in src/scripts/lib/lidl-eshop.mjs:13"}, "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-c59c3c174f920ede", "name": "Commented-code block (5 lines) in src/scripts/lib/ingest-offers.mjs:112", "shortDescription": {"text": "Commented-code block (5 lines) in src/scripts/lib/ingest-offers.mjs:112"}, "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-ca21c89c1b74192a", "name": "Commented-code block (8 lines) in src/scripts/lib/ingest-catalog.mjs:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/scripts/lib/ingest-catalog.mjs: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-e358d148257c8747", "name": "Commented-code block (7 lines) in src/scripts/lib/mirror-images.mjs:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/scripts/lib/mirror-images.mjs: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-35b083a32711eb42", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/lib/mirror-images.mjs:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/lib/mirror-images.mjs:51"}, "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-fbfeae109ca741c0", "name": "Commented-code block (6 lines) in src/scripts/matchers/groq-matcher.mjs:230", "shortDescription": {"text": "Commented-code block (6 lines) in src/scripts/matchers/groq-matcher.mjs:230"}, "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-8b55cde29b748907", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/matchers/ollama-matcher.mjs:232", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/matchers/ollama-matcher.mjs:232"}, "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-137295046a5a2a36", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/matchers/gemini-matcher.mjs:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/matchers/gemini-matcher.mjs:35"}, "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-6aa3795ba50d9cdd", "name": "Commented-code block (6 lines) in src/components/CookieConsent.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/CookieConsent.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-599e91e741b29b3f", "name": "Commented-code block (8 lines) in src/components/ProductSheet.js:20", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/ProductSheet.js:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c894a08012ea683b", "name": "Commented-code block (5 lines) in src/components/HomeClient.js:79", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/HomeClient.js:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3471b082a4330bc7", "name": "Commented-code block (6 lines) in src/components/DealGrid.js:39", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/DealGrid.js: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-330dcf36d2ac64bb", "name": "Commented-code block (6 lines) in src/components/PreferredStoresSheet.js:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/PreferredStoresSheet.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-0dbcc1454f8c3fc5", "name": "Commented-code block (6 lines) in src/components/DiscountCard.js:50", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/DiscountCard.js:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3f3e3c5f7d37756", "name": "Commented-code block (7 lines) in src/app/api/cron/scrape-lidl/route.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/cron/scrape-lidl/route.ts: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-d8751b9df91b5751", "name": "Commented-code block (6 lines) in src/app/supermarket/[id]/page.tsx:32", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/supermarket/[id]/page.tsx:32"}, "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-30001be5af995316", "name": "Commented-code block (7 lines) in src/lib/email.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/email.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-153b4f5f58247723", "name": "Commented-code block (7 lines) in src/lib/hotness.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/hotness.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-2d5f528a8051ae35", "name": "Commented-code block (9 lines) in src/lib/search-rank.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/search-rank.ts: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-7ed60a0080065580", "name": "Commented-code block (5 lines) in src/lib/consent.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/consent.js: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-65b2095d5eaf940f", "name": "Commented-code block (7 lines) in src/lib/offer-similarity.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/offer-similarity.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-818a817fc03ddf64", "name": "Commented-code block (8 lines) in src/lib/interest-profile.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/interest-profile.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-3a5213f7e6bf1f63", "name": "Commented-code block (6 lines) in src/lib/native-category-maps.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/native-category-maps.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-601048b4e3a02b69", "name": "Commented-code block (5 lines) in src/lib/packaging.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/packaging.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-12fd680c150b0249", "name": "Commented-code block (5 lines) in src/lib/pipeline-health.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pipeline-health.ts:27"}, "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-5d675773b09a9f28", "name": "Commented-code block (7 lines) in src/lib/categories.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/categories.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-6eb4e3ed0a332b6b", "name": "Commented-code block (10 lines) in src/lib/dedupe-deals.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/dedupe-deals.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-8b5d960e160b6145", "name": "Commented-code block (5 lines) in src/lib/price-verdict.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/price-verdict.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-8b83801ae482119f", "name": "Commented-code block (9 lines) in src/lib/constants.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/constants.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-0e7bba63b0a08a19", "name": "Commented-code block (6 lines) in src/actions/get-price-history.ts:20", "shortDescription": {"text": "Commented-code block (6 lines) in src/actions/get-price-history.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16944cdf28b67e0a", "name": "Commented-code block (5 lines) in src/actions/get-active-deals.ts:152", "shortDescription": {"text": "Commented-code block (5 lines) in src/actions/get-active-deals.ts:152"}, "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-0d38fdb50e76179f", "name": "Commented-code block (5 lines) in src/actions/track-event.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/actions/track-event.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8b0c47bd1ae5aa3", "name": "Commented-code block (5 lines) in src/actions/register-push-token.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/actions/register-push-token.ts:13"}, "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-743c1abd399f7a6e", "name": "Commented-code block (7 lines) in src/actions/search-deals.ts:16", "shortDescription": {"text": "Commented-code block (7 lines) in src/actions/search-deals.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39f8ebfe57a6f60f", "name": "35 env vars used in code but missing from .env.example", "shortDescription": {"text": "35 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APPLY`, `AUTH_APPLE_ID`, `AUTH_APPLE_SECRET`, `AUTH_GOOGLE_ID`, `AUTH_GOOGLE_SECRET`, `BASELINE`, `CAP_SERVER_URL`, `CHAIN` + 27 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/23510"}, "properties": {"repository": "zaimiwork-dev/prosforespantou", "repoUrl": "https://github.com/zaimiwork-dev/prosforespantou", "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-bcb1824907832117", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/offer/[id]/page.js:121"}, "properties": {"repobilityId": "6f103d494d9d6ac3", "scanner": "scanner-primary", "fingerprint": "bcb1824907832117", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-dc5c01138ed087e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email.ts:45"}, "properties": {"repobilityId": "bdf73540c4990d36", "scanner": "scanner-primary", "fingerprint": "dc5c01138ed087e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fcfa3746e4a4e678", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/scripts/populate-all-categories.mjs:2"}, "properties": {"repobilityId": "8a8a2e2054424282", "scanner": "scanner-primary", "fingerprint": "fcfa3746e4a4e678", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scripts/populate-all-categories.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-bc49d920202a8e6e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/scripts/batch-parse-masoutis.mjs:1"}, "properties": {"repobilityId": "5960535db112e128", "scanner": "scanner-primary", "fingerprint": "bc49d920202a8e6e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scripts/batch-parse-masoutis.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7f791919c8c8a885", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/offer/[id]/page.js:121"}, "properties": {"repobilityId": "0b337a387f8310d6", "scanner": "scanner-primary", "fingerprint": "7f791919c8c8a885", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/offer/[id]/page.js"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-e7babb2044d6c0cf", "level": "note", "message": {"text": "Very large file: src/components/AdminPanel.js (1115 lines)"}, "properties": {"repobilityId": "3591888558b7e6cc", "scanner": "scanner-primary", "fingerprint": "e7babb2044d6c0cf", "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": "b07e7b755aa63398", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "64b6d58c73901194", "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": "42dd2ee326b9056c", "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": "21dee05ac813570d", "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": "d713dd218ffb6b31", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "408f0dace0a2165b", "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": "0616d3d0bf5392e4", "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": "c824d0d20f01e11e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-19fd4a9550efe410", "level": "none", "message": {"text": "Commented-code block (6 lines) in capacitor.config.ts:3"}, "properties": {"repobilityId": "c738ba4b74520ec2", "scanner": "scanner-primary", "fingerprint": "19fd4a9550efe410", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26c8740622067b5f", "level": "none", "message": {"text": "Commented-code block (7 lines) in next.config.mjs:6"}, "properties": {"repobilityId": "b2a3d839a0ba1aa0", "scanner": "scanner-primary", "fingerprint": "26c8740622067b5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4bf6fc1b4f6256c", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/auth.ts:8"}, "properties": {"repobilityId": "fc15559d3cb0e2eb", "scanner": "scanner-primary", "fingerprint": "a4bf6fc1b4f6256c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2500124950e5690", "level": "note", "message": {"text": "Legacy-named symbol `lowest_price_v2` in src/scripts/probe-mono-offers.mjs:55"}, "properties": {"repobilityId": "b7899f1e802d64be", "scanner": "scanner-primary", "fingerprint": "c2500124950e5690", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-496f1362d04f21e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-mono-offers.mjs:16"}, "properties": {"repobilityId": "c9a80f6ddaa5f478", "scanner": "scanner-primary", "fingerprint": "496f1362d04f21e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e0c81060ac7de58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/investigate-wolt-barcode-dupes.mjs:18"}, "properties": {"repobilityId": "b3263a10c83f1c3a", "scanner": "scanner-primary", "fingerprint": "5e0c81060ac7de58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8ef70d0de163d454", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/audit-mappings.mjs:1"}, "properties": {"repobilityId": "62d87094e5c4a474", "scanner": "scanner-primary", "fingerprint": "8ef70d0de163d454", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65485a07062ca2db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-fullcatalog.mjs:18"}, "properties": {"repobilityId": "2e31d23b3c29a5be", "scanner": "scanner-primary", "fingerprint": "65485a07062ca2db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81169015b0f1fcb8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-kritikos-current.mjs:13"}, "properties": {"repobilityId": "37a94d19365339f2", "scanner": "scanner-primary", "fingerprint": "81169015b0f1fcb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-16ff6b914acee9d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-masoutis-jsbundle.mjs:22"}, "properties": {"repobilityId": "6ccf31555a11e47d", "scanner": "scanner-primary", "fingerprint": "16ff6b914acee9d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07d943f14da204ad", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/scripts/mymarket-catalog.mjs:3"}, "properties": {"repobilityId": "7d888c5c5c581732", "scanner": "scanner-primary", "fingerprint": "07d943f14da204ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5557fde08248d70b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/mymarket-catalog.mjs:47"}, "properties": {"repobilityId": "ea81a14c2c32c96c", "scanner": "scanner-primary", "fingerprint": "5557fde08248d70b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2c817822f31de77", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/wolt-canonical-scraper.mjs:57"}, "properties": {"repobilityId": "ab94bfd6593e6e50", "scanner": "scanner-primary", "fingerprint": "c2c817822f31de77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a997550016bb7bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/wolt-canonical-scraper.mjs:74"}, "properties": {"repobilityId": "5d45fba3bb6ee331", "scanner": "scanner-primary", "fingerprint": "5a997550016bb7bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d389dd653916e733", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/probe-ab-catalog.mjs:1"}, "properties": {"repobilityId": "1d5dd337f875ac23", "scanner": "scanner-primary", "fingerprint": "d389dd653916e733", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aca5213900616fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-ab-catalog.mjs:39"}, "properties": {"repobilityId": "7b69c3a29c8a1e5c", "scanner": "scanner-primary", "fingerprint": "6aca5213900616fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4bd769de411447f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scripts/recompute-categories.mjs:69"}, "properties": {"repobilityId": "443d0ee14542bf07", "scanner": "scanner-primary", "fingerprint": "4bd769de411447f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7f4c0929d37a6a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-pagination.mjs:21"}, "properties": {"repobilityId": "8df90dbcbacf0146", "scanner": "scanner-primary", "fingerprint": "f7f4c0929d37a6a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-171577a4f9e35553", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scripts/recompute-hotness.mjs:3"}, "properties": {"repobilityId": "b941666a30cc9836", "scanner": "scanner-primary", "fingerprint": "171577a4f9e35553", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5c131f75b95179b", "level": "note", "message": {"text": "Legacy-named symbol `lowest_price_v2` in src/scripts/probe-mono-signals.mjs:52"}, "properties": {"repobilityId": "c66261e7f15a0072", "scanner": "scanner-primary", "fingerprint": "a5c131f75b95179b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5e704dacc46da468", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-mono-signals.mjs:13"}, "properties": {"repobilityId": "b0244623889397f2", "scanner": "scanner-primary", "fingerprint": "5e704dacc46da468", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfab1636a507b530", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scripts/ab-catalog.mjs:3"}, "properties": {"repobilityId": "cbcd891d94a22361", "scanner": "scanner-primary", "fingerprint": "bfab1636a507b530", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39359d8c73abdd5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/ab-catalog.mjs:58"}, "properties": {"repobilityId": "c935a255e5e14b94", "scanner": "scanner-primary", "fingerprint": "39359d8c73abdd5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf646027860446d1", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/scripts/kritikos-canonical-scraper.mjs:17"}, "properties": {"repobilityId": "545f46b80ba81e0a", "scanner": "scanner-primary", "fingerprint": "bf646027860446d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d39e1de742f70b20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/kritikos-canonical-scraper.mjs:76"}, "properties": {"repobilityId": "a7362cfbd7e47db2", "scanner": "scanner-primary", "fingerprint": "d39e1de742f70b20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b35468455e08ee66", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/probe-other-chains.mjs:1"}, "properties": {"repobilityId": "db1fac3b56d1b436", "scanner": "scanner-primary", "fingerprint": "b35468455e08ee66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f6c51388d7cbe10", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-wolt-assortment.mjs:6"}, "properties": {"repobilityId": "eac049482be8ed93", "scanner": "scanner-primary", "fingerprint": "9f6c51388d7cbe10", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d75e2e3b9c4c6453", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/mirror-catalog.mjs:3"}, "properties": {"repobilityId": "cb89f150855fcda2", "scanner": "scanner-primary", "fingerprint": "d75e2e3b9c4c6453", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8645702a11db5bdc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-openfoodfacts.mjs:29"}, "properties": {"repobilityId": "fb3be8c708fc7272", "scanner": "scanner-primary", "fingerprint": "8645702a11db5bdc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a04b5c93fd927964", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/lidl-catalog.mjs:8"}, "properties": {"repobilityId": "c1f507ca838117d1", "scanner": "scanner-primary", "fingerprint": "a04b5c93fd927964", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78ad4eb79e57d7c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/probe-masoutis-catalog.mjs:1"}, "properties": {"repobilityId": "0267e58b59433bb5", "scanner": "scanner-primary", "fingerprint": "78ad4eb79e57d7c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4498880f89d1c71a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-kritikos-deep.mjs:17"}, "properties": {"repobilityId": "70d0d697eb07498a", "scanner": "scanner-primary", "fingerprint": "4498880f89d1c71a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53459a80f0c7090e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scripts/probe-masoutis-scannshop.mjs:1"}, "properties": {"repobilityId": "2de0b3421aa79675", "scanner": "scanner-primary", "fingerprint": "53459a80f0c7090e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a546b4b5188fc736", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-lidl-catalog.mjs:33"}, "properties": {"repobilityId": "ae2e433ea4ebf785", "scanner": "scanner-primary", "fingerprint": "a546b4b5188fc736", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c217bead295b964a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/test-prompt-fix.mjs:63"}, "properties": {"repobilityId": "c6046e8819af01f7", "scanner": "scanner-primary", "fingerprint": "c217bead295b964a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec25dce070aa69a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/backfill-lidl-images.mjs:1"}, "properties": {"repobilityId": "ba94419e5f635c52", "scanner": "scanner-primary", "fingerprint": "ec25dce070aa69a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-153f188a6bfa0bcc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/resolve-pending-matches.mjs:9"}, "properties": {"repobilityId": "0e9adea7ec6b8882", "scanner": "scanner-primary", "fingerprint": "153f188a6bfa0bcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-829ff76a3af28745", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scripts/probe-masoutis-deep.mjs:1"}, "properties": {"repobilityId": "72d5112be0673558", "scanner": "scanner-primary", "fingerprint": "829ff76a3af28745", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6859631a3e8eccc2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/probe-masoutis-deep.mjs:109"}, "properties": {"repobilityId": "6d741bc2d181d6c8", "scanner": "scanner-primary", "fingerprint": "6859631a3e8eccc2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-38214a5cd0a6009a", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/scripts/adapters/mymarket.mjs:11"}, "properties": {"repobilityId": "08994c5c384403ab", "scanner": "scanner-primary", "fingerprint": "38214a5cd0a6009a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31a4954dfdc36188", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/mymarket.mjs:77"}, "properties": {"repobilityId": "c62c5053117d1e73", "scanner": "scanner-primary", "fingerprint": "31a4954dfdc36188", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-23b00aac5307a481", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scripts/adapters/ab.mjs:11"}, "properties": {"repobilityId": "7a643307d542dbce", "scanner": "scanner-primary", "fingerprint": "23b00aac5307a481", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2c21fbdd74ac9a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/ab.mjs:69"}, "properties": {"repobilityId": "4ac6d37575b2417e", "scanner": "scanner-primary", "fingerprint": "a2c21fbdd74ac9a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33ba145cff013282", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scripts/adapters/lidl.mjs:3"}, "properties": {"repobilityId": "a39ed5a5553c3d14", "scanner": "scanner-primary", "fingerprint": "33ba145cff013282", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7266497c25fe20a2", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/scripts/adapters/sklavenitis.mjs:12"}, "properties": {"repobilityId": "287e869fac78288e", "scanner": "scanner-primary", "fingerprint": "7266497c25fe20a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84dacd7411d3ca0d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/sklavenitis.mjs:81"}, "properties": {"repobilityId": "b8ed5e08d64f8b39", "scanner": "scanner-primary", "fingerprint": "84dacd7411d3ca0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-315305a2ce777bdc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scripts/adapters/kritikos.mjs:12"}, "properties": {"repobilityId": "b259c27856dec371", "scanner": "scanner-primary", "fingerprint": "315305a2ce777bdc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d1144774ccdf223", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/kritikos.mjs:36"}, "properties": {"repobilityId": "aebc10589d6ca442", "scanner": "scanner-primary", "fingerprint": "0d1144774ccdf223", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d780b9ad0cad7091", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/adapters/masoutis.mjs:15"}, "properties": {"repobilityId": "7e0b83f38ede2b02", "scanner": "scanner-primary", "fingerprint": "d780b9ad0cad7091", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e04088e6c811e86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/adapters/masoutis.mjs:38"}, "properties": {"repobilityId": "2f658a775618d78d", "scanner": "scanner-primary", "fingerprint": "4e04088e6c811e86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a4c2614274dd2199", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scripts/lib/proxy-fetch.mjs:1"}, "properties": {"repobilityId": "66305aaf1a96e982", "scanner": "scanner-primary", "fingerprint": "a4c2614274dd2199", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e87f24a799c13cc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/lib/lidl-image-backfill.mjs:3"}, "properties": {"repobilityId": "71c28a85671b3ead", "scanner": "scanner-primary", "fingerprint": "0e87f24a799c13cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9f60f68cb0bca38", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scripts/lib/lidl-eshop.mjs:13"}, "properties": {"repobilityId": "121003e9653322d2", "scanner": "scanner-primary", "fingerprint": "f9f60f68cb0bca38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c59c3c174f920ede", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scripts/lib/ingest-offers.mjs:112"}, "properties": {"repobilityId": "4c87be64b9c4cfe1", "scanner": "scanner-primary", "fingerprint": "c59c3c174f920ede", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca21c89c1b74192a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/scripts/lib/ingest-catalog.mjs:3"}, "properties": {"repobilityId": "fde22e5537fc8ee4", "scanner": "scanner-primary", "fingerprint": "ca21c89c1b74192a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e358d148257c8747", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scripts/lib/mirror-images.mjs:3"}, "properties": {"repobilityId": "26547ae7c6e7300b", "scanner": "scanner-primary", "fingerprint": "e358d148257c8747", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35b083a32711eb42", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/lib/mirror-images.mjs:51"}, "properties": {"repobilityId": "e64a7a1092e36d3b", "scanner": "scanner-primary", "fingerprint": "35b083a32711eb42", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fbfeae109ca741c0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scripts/matchers/groq-matcher.mjs:230"}, "properties": {"repobilityId": "33dceb81460c9b6e", "scanner": "scanner-primary", "fingerprint": "fbfeae109ca741c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b55cde29b748907", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/matchers/ollama-matcher.mjs:232"}, "properties": {"repobilityId": "9946da5fd18665ed", "scanner": "scanner-primary", "fingerprint": "8b55cde29b748907", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-137295046a5a2a36", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/matchers/gemini-matcher.mjs:35"}, "properties": {"repobilityId": "988a2b7375e5b8e7", "scanner": "scanner-primary", "fingerprint": "137295046a5a2a36", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6aa3795ba50d9cdd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/CookieConsent.js:5"}, "properties": {"repobilityId": "995b4908c389a454", "scanner": "scanner-primary", "fingerprint": "6aa3795ba50d9cdd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-599e91e741b29b3f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/ProductSheet.js:20"}, "properties": {"repobilityId": "25c1bde5f6dcb777", "scanner": "scanner-primary", "fingerprint": "599e91e741b29b3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c894a08012ea683b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/HomeClient.js:79"}, "properties": {"repobilityId": "a838ecfa0c94b118", "scanner": "scanner-primary", "fingerprint": "c894a08012ea683b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3471b082a4330bc7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/DealGrid.js:39"}, "properties": {"repobilityId": "4ba5d4b0ca9a65cc", "scanner": "scanner-primary", "fingerprint": "3471b082a4330bc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-330dcf36d2ac64bb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/PreferredStoresSheet.js:8"}, "properties": {"repobilityId": "fd37061f6b188790", "scanner": "scanner-primary", "fingerprint": "330dcf36d2ac64bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dbcc1454f8c3fc5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/DiscountCard.js:50"}, "properties": {"repobilityId": "950efaa3b64c6483", "scanner": "scanner-primary", "fingerprint": "0dbcc1454f8c3fc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3f3e3c5f7d37756", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/cron/scrape-lidl/route.ts:5"}, "properties": {"repobilityId": "aa0cd52e80d1b60a", "scanner": "scanner-primary", "fingerprint": "c3f3e3c5f7d37756", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8751b9df91b5751", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/supermarket/[id]/page.tsx:32"}, "properties": {"repobilityId": "ca11a3dd58fc9ca1", "scanner": "scanner-primary", "fingerprint": "d8751b9df91b5751", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30001be5af995316", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/email.ts:7"}, "properties": {"repobilityId": "0695273ab7607081", "scanner": "scanner-primary", "fingerprint": "30001be5af995316", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-153b4f5f58247723", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/hotness.ts:3"}, "properties": {"repobilityId": "427f6008ec0d07d9", "scanner": "scanner-primary", "fingerprint": "153b4f5f58247723", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d5f528a8051ae35", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/search-rank.ts:5"}, "properties": {"repobilityId": "2e340b3545cb64a8", "scanner": "scanner-primary", "fingerprint": "2d5f528a8051ae35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ed60a0080065580", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/consent.js:3"}, "properties": {"repobilityId": "08142ca92a43a7a1", "scanner": "scanner-primary", "fingerprint": "7ed60a0080065580", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65b2095d5eaf940f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/offer-similarity.ts:3"}, "properties": {"repobilityId": "c98768690910cf16", "scanner": "scanner-primary", "fingerprint": "65b2095d5eaf940f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-818a817fc03ddf64", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/interest-profile.ts:3"}, "properties": {"repobilityId": "f3eb6e329315c1ce", "scanner": "scanner-primary", "fingerprint": "818a817fc03ddf64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a5213f7e6bf1f63", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/native-category-maps.ts:1"}, "properties": {"repobilityId": "1805ce5a05f006ad", "scanner": "scanner-primary", "fingerprint": "3a5213f7e6bf1f63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-601048b4e3a02b69", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/packaging.ts:1"}, "properties": {"repobilityId": "aab994e2116438a4", "scanner": "scanner-primary", "fingerprint": "601048b4e3a02b69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12fd680c150b0249", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pipeline-health.ts:27"}, "properties": {"repobilityId": "d3b8498ec89917a4", "scanner": "scanner-primary", "fingerprint": "12fd680c150b0249", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d675773b09a9f28", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/categories.ts:1"}, "properties": {"repobilityId": "afa48442bcbd38a1", "scanner": "scanner-primary", "fingerprint": "5d675773b09a9f28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6eb4e3ed0a332b6b", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/dedupe-deals.ts:3"}, "properties": {"repobilityId": "79c518353482e69c", "scanner": "scanner-primary", "fingerprint": "6eb4e3ed0a332b6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b5d960e160b6145", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/price-verdict.ts:1"}, "properties": {"repobilityId": "1df2792e99470749", "scanner": "scanner-primary", "fingerprint": "8b5d960e160b6145", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b83801ae482119f", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/constants.js:1"}, "properties": {"repobilityId": "1f62aa7a2d4efac0", "scanner": "scanner-primary", "fingerprint": "8b83801ae482119f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e7bba63b0a08a19", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/actions/get-price-history.ts:20"}, "properties": {"repobilityId": "c4d8b3f7bf76498f", "scanner": "scanner-primary", "fingerprint": "0e7bba63b0a08a19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16944cdf28b67e0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/actions/get-active-deals.ts:152"}, "properties": {"repobilityId": "5950f70986eb3905", "scanner": "scanner-primary", "fingerprint": "16944cdf28b67e0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d38fdb50e76179f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/actions/track-event.ts:10"}, "properties": {"repobilityId": "9025a7f1b853439a", "scanner": "scanner-primary", "fingerprint": "0d38fdb50e76179f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8b0c47bd1ae5aa3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/actions/register-push-token.ts:13"}, "properties": {"repobilityId": "d93eab8a064c2392", "scanner": "scanner-primary", "fingerprint": "d8b0c47bd1ae5aa3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-743c1abd399f7a6e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/actions/search-deals.ts:16"}, "properties": {"repobilityId": "5fec3aed93e83a77", "scanner": "scanner-primary", "fingerprint": "743c1abd399f7a6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39f8ebfe57a6f60f", "level": "note", "message": {"text": "35 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d6a41686c51dc14b", "scanner": "scanner-primary", "fingerprint": "39f8ebfe57a6f60f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}