{"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-042da211ffb5be76", "name": "Possibly dead Python function: replacer", "shortDescription": {"text": "Possibly dead Python function: replacer"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1b5d5504b441864", "name": "Possibly dead Python function: hook", "shortDescription": {"text": "Possibly dead Python function: hook"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25a442b848c5be63", "name": "Stray `console.log` in TS/JS \u2014 server-wrapper.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server-wrapper.js:17"}, "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-ab189125f8463b49", "name": "Stray `console.log` in TS/JS \u2014 server-production.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server-production.js:25"}, "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-b2f3521a03968b21", "name": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/orchestrator/fallback-handler.ts:324", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/orchestrator/fallback-handler.ts:324"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d670fb543b6d8eb", "name": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:274", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:274"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5371092338085b1", "name": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/agent-core/memory-manager.ts:110", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/agent-core/memory-manager.ts:110"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eefc3b1666225943", "name": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/agent-core/tool-registry.ts:191", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/agent-core/tool-registry.ts:191"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15549eda4efc6a1d", "name": "Stray `console.log` in TS/JS \u2014 tests/test-unified-fandom.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/test-unified-fandom.js:6"}, "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-826a7f8765bed6c1", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/test-fire-force-parser.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/test-fire-force-parser.js:6"}, "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-a95f18f2a4cb4bfe", "name": "Stray `console.log` in TS/JS \u2014 tests/integration/test-axios-auth.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/test-axios-auth.js:8"}, "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-307a21b268a3cf80", "name": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:25"}, "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-b8f1dd956f44e455", "name": "Stray `console.log` in TS/JS \u2014 docs/examples/auth-service-with-notifications.ts:226", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/examples/auth-service-with-notifications.ts:226"}, "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-7388ed36ebadbac2", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-all-procedure-imports.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-all-procedure-imports.ts:31"}, "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-0152228c4ad00fb3", "name": "Stray `console.log` in TS/JS \u2014 scripts/implement-output-validation.ts:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/implement-output-validation.ts:167"}, "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-a7525c4b02c311e1", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-unused-vars.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-unused-vars.ts:114"}, "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-ffa38013b774d72e", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-prisma-imports.ts:172", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-prisma-imports.ts:172"}, "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-c1ab41cc4e330108", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-ts-errors.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-ts-errors.ts:14"}, "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-521ba2e3152e910c", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts7053-index-access.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts7053-index-access.ts:28"}, "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-2782001322087630", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-95-errors.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-95-errors.ts:26"}, "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-5d522b656690c3b4", "name": "Stray `console.log` in TS/JS \u2014 scripts/convert-multiline-procedures.ts:147", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-multiline-procedures.ts:147"}, "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-0799c95185df65e6", "name": "Stray `console.log` in TS/JS \u2014 scripts/convert-remaining-procedures.ts:194", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-remaining-procedures.ts:194"}, "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-9a4e36302eb50d5d", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-64-auto.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-64-auto.ts:14"}, "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-1def70e6a316f5d9", "name": "Stray `console.log` in TS/JS \u2014 scripts/final-critical-fixes.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-critical-fixes.ts:14"}, "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-6206a982ca6d1e10", "name": "Stray `console.log` in TS/JS \u2014 scripts/server-lifecycle-wrapper.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/server-lifecycle-wrapper.js:23"}, "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-ee395d07be3c099c", "name": "Stray `console.log` in TS/JS \u2014 scripts/convert-trpc-procedures.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-trpc-procedures.ts:70"}, "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-d07941a1c4bd846c", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-output-validation-all.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-output-validation-all.ts:82"}, "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-60ebeabc0264aea4", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-fire-force-volumes.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-fire-force-volumes.ts:14"}, "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-8b2f9989237d9ef3", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-65-errors.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-65-errors.ts:39"}, "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-6ed61bb2ab9b406b", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-trpc-imports.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-trpc-imports.ts:108"}, "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-a395a61055678126", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts4111-index-signatures.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts4111-index-signatures.ts:28"}, "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-e3e645a48b48b3c9", "name": "Stray `console.log` in TS/JS \u2014 scripts/quick-search-test.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/quick-search-test.ts:14"}, "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-1f2d3862eb556093", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-broken-error-patterns.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-broken-error-patterns.ts:14"}, "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-f1cb1370941b5906", "name": "Stray `console.log` in TS/JS \u2014 scripts/transform-mantine-props.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/transform-mantine-props.ts:59"}, "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-ab230ad97f7557aa", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-comicvine-series.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-comicvine-series.ts:15"}, "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-a00cc140d0f3340a", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-prisma-enum-usage.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-prisma-enum-usage.ts:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5029f2c698e3ef64", "name": "Stray `console.log` in TS/JS \u2014 scripts/loadtest.js:355", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/loadtest.js:355"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-996f584a14ef398c", "name": "Stray `console.log` in TS/JS \u2014 scripts/phase4-fix-validation-functions.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase4-fix-validation-functions.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8caa41dd61b99593", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-fire-force-chapters.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-fire-force-chapters.ts:18"}, "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-3eca7cfa286cf8b6", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-81-errors.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-81-errors.ts:14"}, "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-0c0f1d359f566ad8", "name": "Stray `console.log` in TS/JS \u2014 scripts/deduplicate-code.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deduplicate-code.ts:43"}, "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-866d89360846a496", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-138.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-138.ts:52"}, "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-f48112f1d50619f7", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-64-errors.ts:158", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-64-errors.ts:158"}, "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-969147d880d5a1eb", "name": "Stray `console.log` in TS/JS \u2014 scripts/eslint-validator.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eslint-validator.js:59"}, "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-64b7497cde47d31e", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-output-validation.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-output-validation.ts:39"}, "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-19fbec4b3548c61b", "name": "Stray `console.log` in TS/JS \u2014 scripts/consolidate-async-result.ts:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidate-async-result.ts:113"}, "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-ff647f7f7e07847e", "name": "Stray `console.log` in TS/JS \u2014 scripts/strict-typing-enforcer.js:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/strict-typing-enforcer.js:91"}, "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-f94a38b26e40e439", "name": "Stray `console.log` in TS/JS \u2014 scripts/enable-suwayomi.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enable-suwayomi.js:14"}, "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-412cea0dacb2d911", "name": "Stray `console.log` in TS/JS \u2014 scripts/replace-error-with-trpc.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/replace-error-with-trpc.ts:118"}, "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-517b1d42e7ca2494", "name": "Stray `console.log` in TS/JS \u2014 scripts/force-opm-parse.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/force-opm-parse.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3b569432bed43bc", "name": "Stray `console.log` in TS/JS \u2014 scripts/clear-wikipedia-cache.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clear-wikipedia-cache.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cc84b9c7cef64b5", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-error-handling.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-error-handling.ts:36"}, "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-ed7b8a57448d01cc", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-empty-imports.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-empty-imports.ts:14"}, "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-da501c54428142c5", "name": "Stray `console.log` in TS/JS \u2014 scripts/modernize-trpc-patterns.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/modernize-trpc-patterns.ts:25"}, "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-0c2ee286b536ad31", "name": "Stray `console.log` in TS/JS \u2014 scripts/final-success-rate-test.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-success-rate-test.ts:29"}, "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-6f925b58a696076e", "name": "Stray `console.log` in TS/JS \u2014 scripts/convert-all-procedures.ts:178", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-all-procedures.ts:178"}, "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-8439e665f76418c0", "name": "Stray `console.log` in TS/JS \u2014 scripts/phase4-update-type-guards.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase4-update-type-guards.ts:26"}, "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-bd5059e76dfa24c6", "name": "Stray `console.log` in TS/JS \u2014 scripts/ts-error-categorizer.js:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ts-error-categorizer.js:137"}, "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-d921e02350817bed", "name": "Stray `console.log` in TS/JS \u2014 scripts/lint-tests.js:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/lint-tests.js:114"}, "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-82e53e90cf25070d", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-async-result-violations.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-async-result-violations.ts:145"}, "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-83f754fcd1c0338c", "name": "Stray `console.log` in TS/JS \u2014 scripts/search-dragon-ball-links.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/search-dragon-ball-links.ts:10"}, "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-0cdedbb858dd03ab", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-ts-errors.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-ts-errors.ts:14"}, "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-8ee3f2dcb62a3122", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-syntax-errors.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-syntax-errors.ts:14"}, "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-b530e2017501a999", "name": "Stray `console.log` in TS/JS \u2014 scripts/final-comprehensive-test.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-comprehensive-test.ts:29"}, "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-cbfaa063c3cfe18a", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-catch-errors.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-catch-errors.ts:68"}, "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-7c2eb80d8d26e2fb", "name": "Stray `console.log` in TS/JS \u2014 scripts/merge-async-result-functions.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/merge-async-result-functions.ts:123"}, "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-a513fa73872a9f10", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-helper-imports.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-helper-imports.ts:14"}, "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-fd9ccf5bfbf99d3e", "name": "Stray `console.log` in TS/JS \u2014 scripts/convert-final-procedures.ts:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-final-procedures.ts:146"}, "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-20d92c379ddcf50c", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-null-safety.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-null-safety.ts:46"}, "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-822e8b4d0c4013c7", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts7053-v2.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts7053-v2.ts:44"}, "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-65024818b7fdb616", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-procedures.ts:159", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-procedures.ts:159"}, "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-63ffd3c55c302f49", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-publisher-simple.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-publisher-simple.ts:21"}, "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-ac0dcdcdc2c65b6d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/security/config.ts:157", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/security/config.ts:157"}, "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-816c3f75060ec725", "name": "Stray `console.log` in TS/JS \u2014 scripts/security/check-architectural-drift.ts:319", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-architectural-drift.ts:319"}, "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-19ff25aad3043817", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/security/check-architectural-drift.ts:185", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/security/check-architectural-drift.ts:185"}, "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-b73afe58253ab01a", "name": "TODO/FIXME marker in shipping code \u2014 scripts/security/scan-secrets.ts:148", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/security/scan-secrets.ts:148"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bc4f7f1f829fda3", "name": "Stray `console.log` in TS/JS \u2014 scripts/security/scan-secrets.ts:244", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/scan-secrets.ts:244"}, "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-418ca82032b6e53d", "name": "Stray `console.log` in TS/JS \u2014 scripts/security/check-business-logic.ts:365", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-business-logic.ts:365"}, "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-f752cc1068b0fab1", "name": "Stray `console.log` in TS/JS \u2014 scripts/security/check-auth-patterns.ts:295", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-auth-patterns.ts:295"}, "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-06f373528e078562", "name": "Stray `console.log` in TS/JS \u2014 scripts/security/index.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/index.ts:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d5491dd0b80774d", "name": "Stray `console.log` in TS/JS \u2014 scripts/security/check-race-conditions.ts:280", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-race-conditions.ts:280"}, "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-549daa2710450486", "name": "Stray `console.log` in TS/JS \u2014 scripts/security/reporters/console-reporter.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/reporters/console-reporter.ts:61"}, "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-a8808e0988ad6fd6", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-comicvine-flow.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-comicvine-flow.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df00f998aae710be", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-provider-integration.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-provider-integration.ts:15"}, "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-67142e90223e47d3", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-java-detection.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-java-detection.js:6"}, "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-89e9f155d16caa1f", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-adapter-refactoring.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-adapter-refactoring.ts:14"}, "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-6d374c87f66bba1a", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-comicvine-api-data.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-comicvine-api-data.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a6c7aa56c573653", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-prowlarr-api.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-prowlarr-api.js:28"}, "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-34397657bb609b19", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-image-processing.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-image-processing.ts:22"}, "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-345a21b1c7cbc322", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-anilist-fire-force.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-anilist-fire-force.js:13"}, "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-803151ffcefad010", "name": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-shutdown.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-shutdown.js:13"}, "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-ca31bedccba73e34", "name": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-google-discovery.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-google-discovery.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1cd0480f7c58f24", "name": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-id-discovery.ts:320", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-id-discovery.ts:320"}, "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-3a4443a5e150c7bf", "name": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-comicvine-search.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-comicvine-search.ts:8"}, "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-0120bb9af5f9a0fc", "name": "Stray `console.log` in TS/JS \u2014 scripts/database/seed-wanted-data.js:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/database/seed-wanted-data.js:48"}, "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-73337e126e0ab3b8", "name": "Stray `console.log` in TS/JS \u2014 scripts/database/seed-api-key.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/database/seed-api-key.js:17"}, "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-ab06eb92cc97332a", "name": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-documentation.js:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-documentation.js:153"}, "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-18bbbad902e09241", "name": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-cross-references.js:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-cross-references.js:144"}, "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-c43ac0d6174feae2", "name": "Stray `console.log` in TS/JS \u2014 scripts/utilities/create-admin-simple.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/utilities/create-admin-simple.js:13"}, "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-abe8f3b76b5bdd7c", "name": "Stray `console.log` in TS/JS \u2014 scripts/utilities/create-admin.js:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/utilities/create-admin.js:63"}, "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-b961d0c9a6413cea", "name": "Stray `console.log` in TS/JS \u2014 scripts/utilities/check-manga-db.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/utilities/check-manga-db.js:13"}, "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-bd5a997bbf6735bf", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrations/migrate-provider-metadata.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrations/migrate-provider-metadata.ts:32"}, "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-aba6d0d2139edcf6", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrations/rollback-provider-metadata.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrations/rollback-provider-metadata.ts:32"}, "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-5ad20f790ad16a7d", "name": "Stray `console.log` in TS/JS \u2014 public/sw.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/sw.js:19"}, "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-9da7ec809d4474aa", "name": "Stray `console.log` in TS/JS \u2014 public/disable-sw.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/disable-sw.js:6"}, "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-b5206466928b7269", "name": "TODO/FIXME marker in shipping code \u2014 src/test/e2e/mobile-optimization.spec.ts:115", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/test/e2e/mobile-optimization.spec.ts:115"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba4a8d9db48c0b00", "name": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:61"}, "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-6cf37373ee9eb6e8", "name": "Stray `console.log` in TS/JS \u2014 src/utils/async-result/types.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/async-result/types.ts:31"}, "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-e2917d77d2194498", "name": "TODO/FIXME marker in shipping code \u2014 src/components/fixOutOfSyncChaptersButton.tsx:49", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/fixOutOfSyncChaptersButton.tsx:49"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6cde05f4a608b57", "name": "TODO/FIXME marker in shipping code \u2014 src/components/settings/calendar/CalendarProviderSettings.tsx:121", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/settings/calendar/CalendarProviderSettings.tsx:121"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf11e9d3cda0b5bc", "name": "TODO/FIXME marker in shipping code \u2014 src/components/manga/MangaGrid.tsx:200", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/MangaGrid.tsx:200"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e265571b87d6285", "name": "TODO/FIXME marker in shipping code \u2014 src/components/manga/DownloadOptionsModal.tsx:136", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/DownloadOptionsModal.tsx:136"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76e9a964fed5d3d9", "name": "TODO/FIXME marker in shipping code \u2014 src/components/manga/native-download/NativeDownloadMangaDetails.tsx:33", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/native-download/NativeDownloadMangaDetails.tsx:33"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38715fcae75cde4b", "name": "TODO/FIXME marker in shipping code \u2014 src/components/manga/native-download/NativeDownloadSearch.tsx:45", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/native-download/NativeDownloadSearch.tsx:45"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-300f85bf20097fac", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/manga/volume-detail-modal/VolumeDetailsTab.tsx:167", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/manga/volume-detail-modal/VolumeDetailsTab.tsx:167"}, "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-e4ea83ceb82c7590", "name": "TODO/FIXME marker in shipping code \u2014 src/components/library/ResponsiveLibraryList.tsx:292", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/library/ResponsiveLibraryList.tsx:292"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-528f791efcffb974", "name": "TODO/FIXME marker in shipping code \u2014 src/components/library/rules/PatternManager.tsx:16", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/library/rules/PatternManager.tsx:16"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-783cdc77d1185697", "name": "TODO/FIXME marker in shipping code \u2014 src/components/addManga/context/ErrorHandlingContext.tsx:227", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/addManga/context/ErrorHandlingContext.tsx:227"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76eaeffeb63823ee", "name": "TODO/FIXME marker in shipping code \u2014 src/components/notifications/NotificationPreferences.tsx:82", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/notifications/NotificationPreferences.tsx:82"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4f883ce7057c828", "name": "Custom React Flow node registered without explicit width/height \u2014 src/components/events/EventNotifications.tsx:50", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/components/events/EventNotifications.tsx:50"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce5eea0112d67b8c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/html-sanitizer.ts:105", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/html-sanitizer.ts:105"}, "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-a7c149ae756cd386", "name": "Stray `console.log` in TS/JS \u2014 src/lib/safe-wrappers/json.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/safe-wrappers/json.ts:19"}, "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-2c83d7826b9ea594", "name": "Stray `console.log` in TS/JS \u2014 src/lib/validation/common-schemas.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/validation/common-schemas.ts:20"}, "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-8c4a0386f61d5f1a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/type-guards/index.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/type-guards/index.ts:13"}, "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-634d2882a53ba031", "name": "TODO/FIXME marker in shipping code \u2014 src/pages/settings/backup.tsx:165", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/settings/backup.tsx:165"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-357d10e729566e15", "name": "TODO/FIXME marker in shipping code \u2014 src/pages/api/v1/webhooks/[id].ts:76", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/api/v1/webhooks/[id].ts:76"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-589b6697065f2786", "name": "TODO/FIXME marker in shipping code \u2014 src/pages/api/v1/webhooks/index.ts:54", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/api/v1/webhooks/index.ts:54"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95b0d11ec6b10705", "name": "TODO/FIXME marker in shipping code \u2014 src/hooks/useLibraryScanner.ts:37", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useLibraryScanner.ts:37"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-845f3c4f36f4c4be", "name": "TODO/FIXME marker in shipping code \u2014 src/hooks/useCalendar.ts:171", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useCalendar.ts:171"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-025c18a90c0b94af", "name": "TODO/FIXME marker in shipping code \u2014 src/hooks/manga/index.ts:235", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/manga/index.ts:235"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-025f637f59ebd5a3", "name": "Stray `console.log` in TS/JS \u2014 src/server/parsers/__tests__/Performance.benchmark.test.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/__tests__/Performance.benchmark.test.ts:62"}, "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-d0fad900f0929cfe", "name": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/__tests__/adapters/WikipediaAdapter.test.ts:52", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/__tests__/adapters/WikipediaAdapter.test.ts:52"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10b16129ecc2e516", "name": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/__tests__/core/ContentExtractor.test.ts:143", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/__tests__/core/ContentExtractor.test.ts:143"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8df124b21e762528", "name": "Stray `console.log` in TS/JS \u2014 src/server/parsers/migration/file-operations.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/migration/file-operations.ts:66"}, "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-9f02668a80f81d83", "name": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/migration/migration-operations.ts:128", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/migration/migration-operations.ts:128"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c822835b12d2bf1", "name": "Stray `console.log` in TS/JS \u2014 src/server/parsers/patterns/PatternLibrary.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/patterns/PatternLibrary.ts:42"}, "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-f4b1158a2203087f", "name": "Stray `console.log` in TS/JS \u2014 src/server/parsers/unified-metadata-parser/image-extractors.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/unified-metadata-parser/image-extractors.ts:74"}, "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-4977f1fab356a9d6", "name": "TODO/FIXME marker in shipping code \u2014 src/server/config/feature-flags.ts:194", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/config/feature-flags.ts:194"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c5e20dbf3a06870", "name": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/WebSocketMessageHandlers.ts:16", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/WebSocketMessageHandlers.ts:167"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0074dc448e6f012b", "name": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/connection-m", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/connection-manager.ts:206"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8944ebc9f55e0f4c", "name": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/message-rout", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/message-router.ts:152"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c78e8b962be1aee4", "name": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/subscription", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/subscription-manager.ts:167"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4d9b3a40fcae465", "name": "TODO/FIXME marker in shipping code \u2014 src/server/shared/source-knowledge/selectors/index.ts:45", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/shared/source-knowledge/selectors/index.ts:45"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba43a393677278d9", "name": "Stray `console.log` in TS/JS \u2014 src/server/utils/batch-query/create.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/utils/batch-query/create.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-59b47b80aa69442f", "name": "Stray `console.log` in TS/JS \u2014 src/server/utils/batch-query/delete.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/utils/batch-query/delete.ts:48"}, "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-ea4c2861911c164a", "name": "TODO/FIXME marker in shipping code \u2014 src/server/trpc/procedures.ts:267", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/trpc/procedures.ts:267"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d83ab77490412e78", "name": "TODO/FIXME marker in shipping code \u2014 src/server/trpc/routers/bulk.ts:191", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/trpc/routers/bulk.ts:191"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b82a3d4f459f748e", "name": "TODO/FIXME marker in shipping code \u2014 src/server/ml/training/bootstrap-labeler/pattern-detector/index.ts:29", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/ml/training/bootstrap-labeler/pattern-detector/index.ts:29"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a6b38850efea9cc", "name": "TODO/FIXME marker in shipping code \u2014 src/server/queue/workers/autoDownloadWorker.ts:2", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/queue/workers/autoDownloadWorker.ts:2"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-306c56fa35fb17c2", "name": "TODO/FIXME marker in shipping code \u2014 src/server/queue/workers/releaseDetectionWorker.ts:442", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/queue/workers/releaseDetectionWorker.ts:442"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b1dd535f1c654bb", "name": "TODO/FIXME marker in shipping code \u2014 src/server/queue/handlers/native-download.ts:54", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/queue/handlers/native-download.ts:54"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2f489b103b25405", "name": "TODO/FIXME marker in shipping code \u2014 src/server/services/metadataUrlsService.ts:81", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/metadataUrlsService.ts:81"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c98c91fe48cbe029", "name": "TODO/FIXME marker in shipping code \u2014 src/server/services/notifications/factory/notificationFactory.ts:249", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/notifications/factory/notificationFactory.ts:249"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-94c200df74b6878a", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/comicvine/comicvine/batch-operations.ts:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/comicvine/comicvine/batch-operations.ts:199"}, "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-dbd3ef99be558a9a", "name": "TODO/FIXME marker in shipping code \u2014 src/server/services/search/configService.ts:2", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/search/configService.ts:2"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-541b32d351b8be1b", "name": "TODO/FIXME marker in shipping code \u2014 src/server/services/search/providers/AniListProvider.ts:108", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/search/providers/AniListProvider.ts:108"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f16cc97a7ba8a490", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/wikipedia/wikipedia-extractor/index.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/wikipedia/wikipedia-extractor/index.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-41785c7ef20304de", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/metadata/unified-merger/quality.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/metadata/unified-merger/quality.ts:72"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6d663d634261eef", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/metadata/provider-matching/metadata-operations.ts:275", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/metadata/provider-matching/metadata-operations.ts:275"}, "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-39a8c397326ea07f", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/anilist/validated-client.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/anilist/validated-client.ts:61"}, "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-a5d1b22729cab766", "name": "TODO/FIXME marker in shipping code \u2014 src/server/services/suwayomi/configService.ts:2", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/suwayomi/configService.ts:2"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c5ae15a2539ba48", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/suwayomi/suwayomi-service/java-manager.ts:302", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/suwayomi/suwayomi-service/java-manager.ts:302"}, "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-2b4b9bb4caa83102", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/chapter-detail/index.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/chapter-detail/index.ts:57"}, "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-e24e797164fcb635", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/chapter-detail/circuit-breaker.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/chapter-detail/circuit-breaker.ts:37"}, "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-9e75dcfc01f8a1d2", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/patterns/PatternLibraryBridge.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/patterns/PatternLibraryBridge.ts:68"}, "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-981628febe9830c5", "name": "TODO/FIXME marker in shipping code \u2014 src/server/services/fandom/fandom/metadata/index.ts:70", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/fandom/fandom/metadata/index.ts:70"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3d9229b0f711ad5", "name": "Stray `console.log` in TS/JS \u2014 src/server/services/calendar/calendar-provider-integration/schedule-detection.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/calendar/calendar-provider-integration/schedule-detection.ts:63"}, "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-f824e5aa7f01ab53", "name": "Stray `console.log` in TS/JS \u2014 src/services/image-extractor/types.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/image-extractor/types.ts:151"}, "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-7b161dfd1b82cc50", "name": "Stray `console.log` in TS/JS \u2014 src/services/image-extractor/extractors/wizard.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/image-extractor/extractors/wizard.ts:35"}, "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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-144f3e77c92a295f", "name": "Docker base image is tag-pinned but not digest-pinned: ubuntu:22.04", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: ubuntu:22.04"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cfcac8f5cb0e520f", "name": "Insecure pattern 'weak_hash' in CLAUDE.md:558", "shortDescription": {"text": "Insecure pattern 'weak_hash' in CLAUDE.md:558"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3db7189ae9c82320", "name": "Insecure pattern 'node_child_process' in scripts/fix-unused-vars.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-unused-vars.ts:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9b60a3a8a447f4f", "name": "Insecure pattern 'node_child_process' in scripts/fix-ts7053-index-access.ts:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-ts7053-index-access.ts:15"}, "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-31210ca165fd41ff", "name": "Insecure pattern 'node_child_process' in scripts/server-lifecycle-wrapper.js:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/server-lifecycle-wrapper.js:10"}, "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-6ed260396188eb6d", "name": "Insecure pattern 'node_child_process' in scripts/convert-nullish-coalescing.cjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/convert-nullish-coalescing.cjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ba48de4062fae18", "name": "Insecure pattern 'node_child_process' in scripts/fix-ts4111-index-signatures.ts:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-ts4111-index-signatures.ts:15"}, "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-26f4f09ff87aac68", "name": "Insecure pattern 'node_child_process' in scripts/deduplicate-code.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/deduplicate-code.ts:14"}, "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-54614cd590e9a23f", "name": "Insecure pattern 'node_child_process' in scripts/eslint-validator.js:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/eslint-validator.js:11"}, "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-ad03469f97710274", "name": "Insecure pattern 'exec_used' in scripts/consolidate-async-result.ts:177", "shortDescription": {"text": "Insecure pattern 'exec_used' in scripts/consolidate-async-result.ts:177"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a90c98ab1160196", "name": "Insecure pattern 'node_child_process' in scripts/consolidate-async-result.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/consolidate-async-result.ts:16"}, "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-5196402a178e161e", "name": "Insecure pattern 'node_child_process' in scripts/strict-typing-enforcer.js:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/strict-typing-enforcer.js:11"}, "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-a4423791457c7244", "name": "Insecure pattern 'node_child_process' in scripts/fix-null-safety.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-null-safety.ts:17"}, "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-1547f6784adf445c", "name": "Insecure pattern 'node_child_process' in scripts/fix-ts7053-v2.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-ts7053-v2.ts:16"}, "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-a3415b116afc8006", "name": "Insecure pattern 'eval_used' in scripts/security/config.ts:224", "shortDescription": {"text": "Insecure pattern 'eval_used' in scripts/security/config.ts:224"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3a508e5d7867ffb", "name": "Insecure pattern 'dangerous_innerhtml' in scripts/security/config.ts:157", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in scripts/security/config.ts:157"}, "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-4958fca39e256c29", "name": "Insecure pattern 'weak_hash' in scripts/security/config.ts:187", "shortDescription": {"text": "Insecure pattern 'weak_hash' in scripts/security/config.ts:187"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8fb5fca1f644ea80", "name": "Insecure pattern 'node_child_process' in scripts/security/utils.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/security/utils.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d63ce436c1972c01", "name": "Insecure pattern 'node_child_process' in scripts/security/verify-dependencies.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/security/verify-dependencies.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf628e4aeae6e0f1", "name": "Possible secret in scripts/testing/test-logout.mjs", "shortDescription": {"text": "Possible secret in scripts/testing/test-logout.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-446de8afc344c903", "name": "Possible secret in scripts/testing/test-shutdown.js", "shortDescription": {"text": "Possible secret in scripts/testing/test-shutdown.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-154763a668fb02ac", "name": "Insecure pattern 'node_child_process' in scripts/optimization/migrate-prisma-imports.cjs:149", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/optimization/migrate-prisma-imports.cjs:149"}, "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-43055690993a8a4a", "name": "Possible secret in scripts/utilities/create-admin-simple.js", "shortDescription": {"text": "Possible secret in scripts/utilities/create-admin-simple.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1c21bad0f6424379", "name": "Insecure pattern 'node_child_process' in scripts/utilities/install-suwayomi.mjs:39", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/utilities/install-suwayomi.mjs:39"}, "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-96157aad19fb4db0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/csp-test.html:107", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/csp-test.html:107"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a414234da820478c", "name": "Insecure pattern 'exec_used' in src/types/browser-apis/native-bridge.d.ts:24", "shortDescription": {"text": "Insecure pattern 'exec_used' in src/types/browser-apis/native-bridge.d.ts:24"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bfdf2d81b501021", "name": "Possible secret in src/test/mocks.ts", "shortDescription": {"text": "Possible secret in src/test/mocks.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d8e5c6087a9b98e8", "name": "Possible secret in src/test/utils/testUtils.tsx", "shortDescription": {"text": "Possible secret in src/test/utils/testUtils.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6f8207b5ed675705", "name": "Possible secret in src/test/utils/factories.ts", "shortDescription": {"text": "Possible secret in src/test/utils/factories.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-072eaa259d5109c7", "name": "Possible secret in src/utils/admin-debug.ts", "shortDescription": {"text": "Possible secret in src/utils/admin-debug.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4e2c6fd6785a98ea", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/manga/volume-detail-modal/VolumeDetailsTab.tsx:167", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/manga/volume-detail-modal/VolumeDetailsTab.tsx:167"}, "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-b39deff718a2ca0c", "name": "Possible secret in src/components/auth/FirstTimeSetup.tsx", "shortDescription": {"text": "Possible secret in src/components/auth/FirstTimeSetup.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-47c31053d8a5f8ae", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/shared/annotation/visual-inspector/VisualInspectorModal", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/shared/annotation/visual-inspector/VisualInspectorModal.tsx:195"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31145ad51e582567", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileComponents.test.tsx:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileComponents.test.tsx:62"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5d5aa8731135122b", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileModal.test.tsx:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileModal.test.tsx:56"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-781a896ba6eb7603", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileToast.test.tsx:28", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileToast.test.tsx:28"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-034d53572537930c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileNavigationDrawer.test.tsx:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileNavigationDrawer.test.tsx:63"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ff62122fafa09c5", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/FloatingActionButton.test.tsx:68", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/FloatingActionButton.test.tsx:68"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fb980a793f19df91", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/images/__tests__/ProgressiveImage.test.tsx:97", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/images/__tests__/ProgressiveImage.test.tsx:97"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d1bf4ba38412c893", "name": "Insecure pattern 'cors_wildcard' in src/pages/api/auth/check.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/auth/check.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de148ca07affcf0f", "name": "Possible secret in src/server/adapters/metadata/websiteProviderAdapter.ts", "shortDescription": {"text": "Possible secret in src/server/adapters/metadata/websiteProviderAdapter.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6ec90476f06dae31", "name": "Possible secret in src/server/utils/log-sanitizer.ts", "shortDescription": {"text": "Possible secret in src/server/utils/log-sanitizer.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9e2ac6c1a037f076", "name": "Insecure pattern 'node_child_process' in src/server/utils/system-memory.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/utils/system-memory.ts: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-d8dbfbbb0eeb3091", "name": "Insecure pattern 'node_child_process' in src/server/trpc/routers/suwayomi-v2.ts:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/trpc/routers/suwayomi-v2.ts:18"}, "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-9bef7d536390d1e0", "name": "Insecure pattern 'cors_wildcard' in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:58"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e3d618f6ee1da5d6", "name": "Insecure pattern 'domparser_html_parse' in src/server/trpc/routers/native-download/website-operations.ts:89", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in src/server/trpc/routers/native-download/website-operations.ts:89"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b19ca979a00fb86f", "name": "Insecure pattern 'document_write' in src/server/ml/features/dom-linearizer.ts:299", "shortDescription": {"text": "Insecure pattern 'document_write' in src/server/ml/features/dom-linearizer.ts:299"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69b4f3a9cf5d276f", "name": "Insecure pattern 'node_child_process' in src/server/services/coverLayers/coverLayerizer.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/coverLayers/coverLayerizer.ts:14"}, "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-1c05377e8726fcd8", "name": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/chromeChecker.ts:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/chromeChecker.ts:10"}, "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-287ffb71c942cd1f", "name": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/goLauncher.ts:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/goLauncher.ts:19"}, "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-96872e57912d369c", "name": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/binaryManager.ts:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/binaryManager.ts:10"}, "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-87e146c66c120696", "name": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/index.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/index.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f4822ca4e9bd5dad", "name": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/lock-file.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/lock-file.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4aaef4e76dd6cf88", "name": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/process-tree.ts:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/process-tree.ts:15"}, "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-dbc8f1bd0560aca8", "name": "Insecure pattern 'node_child_process' in src/server/services/backup/utils.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/backup/utils.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7686fbfabd35c5a7", "name": "Insecure pattern 'node_child_process' in src/server/services/packImport/webtoon-outer-extract.ts:40", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/packImport/webtoon-outer-extract.ts:40"}, "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-35182c887115397e", "name": "Insecure pattern 'node_child_process' in src/server/services/packImport/archive-peek.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/packImport/archive-peek.ts:16"}, "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-62219ebd66101ed5", "name": "Insecure pattern 'node_child_process' in src/server/services/packImport/multi-part-rar.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/packImport/multi-part-rar.ts:14"}, "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-dc58747ea4523b09", "name": "Insecure pattern 'node_child_process' in src/server/services/download/fileImporter/page-counter.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/download/fileImporter/page-counter.ts:14"}, "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-42dd35974e6ed2c2", "name": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/port-sanitizer.ts:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/port-sanitizer.ts:23"}, "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-c84855f6fc1fe180", "name": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/utils.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/utils.ts:9"}, "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-0c0537640a32523c", "name": "Insecure pattern 'exec_used' in src/server/services/suwayomi/security.service.ts:339", "shortDescription": {"text": "Insecure pattern 'exec_used' in src/server/services/suwayomi/security.service.ts:339"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5b05b4e9ffe9bfe", "name": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/security.service.ts:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/security.service.ts:10"}, "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-7d529981615482d5", "name": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/service.ts:56", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/service.ts:56"}, "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-f908c9157c509b1b", "name": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/suwayomi-service/lifecycle-manager.ts:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/suwayomi-service/lifecycle-manager.ts:10"}, "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-7704528aedbeaf8f", "name": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/suwayomi-service/java-manager.ts:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/suwayomi-service/java-manager.ts:10"}, "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-25f0757dbf74d7c8", "name": "Insecure pattern 'cors_wildcard' in src/server/services/fandom/adaptive/series-page-resolver.ts:107", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/server/services/fandom/adaptive/series-page-resolver.ts:107"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce520023166806f5", "name": "Insecure pattern 'domparser_html_parse' in src/features/annotation/editor/page-view/html-cleaner/cleaner.ts:124", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in src/features/annotation/editor/page-view/html-cleaner/cleaner.ts:124"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58c2c80264ae9aee", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "octokit/request-action@v2.x can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7efbda965f283c17", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "oven-sh/setup-bun@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0b6c4b9bec5df0a", "name": "tj-actions/changed-files is tag-pinned instead of SHA-pinned", "shortDescription": {"text": "tj-actions/changed-files is tag-pinned instead of SHA-pinned"}, "fullDescription": {"text": "The tj-actions/changed-files incident showed that mutable action tags can execute credential-stealing code across many repositories. Pin this action to a reviewed commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "high", "confidence": 1.0}}, {"id": "scanner-983ff3908477670e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "oven-sh/setup-bun@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749156c4dcc8bd03", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "oven-sh/setup-bun@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-29bc0bf5998231ff", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f0f9976570faa6d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68a2b8f5c8cd6b53", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac490c57fea701c1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "oven-sh/setup-bun@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a44eb8a8b381bafe", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "oven-sh/setup-bun@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-290261d8d901691d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54e9e93f7e1b106c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "oven-sh/setup-bun@v2 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d79ae14c7e760704", "name": "tj-actions/changed-files is tag-pinned instead of SHA-pinned", "shortDescription": {"text": "tj-actions/changed-files is tag-pinned instead of SHA-pinned"}, "fullDescription": {"text": "The tj-actions/changed-files incident showed that mutable action tags can execute credential-stealing code across many repositories. Pin this action to a reviewed commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21aa0c39a7c1ca23", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73cfbb08b1f7366d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02c4b17bf382f342", "name": "Very large file: scripts/comicvine/test-comicvine-corpus.ts (4234 lines)", "shortDescription": {"text": "Very large file: scripts/comicvine/test-comicvine-corpus.ts (4234 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-f6d96cffde0ef39d", "name": "Very large file: scripts/comicvine/test-comicvine-accuracy.ts (1557 lines)", "shortDescription": {"text": "Very large file: scripts/comicvine/test-comicvine-accuracy.ts (1557 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-84d1da8aa5f74a08", "name": "Very large file: scripts/mangaupdates/test-mangaupdates-accuracy.ts (1216 lines)", "shortDescription": {"text": "Very large file: scripts/mangaupdates/test-mangaupdates-accuracy.ts (1216 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-4229dd6c6fd9189f", "name": "Very large file: src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch.ts (1320 line", "shortDescription": {"text": "Very large file: src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch.ts (1320 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-a4a9feae2e8ecaf0", "name": "Very large file: src/server/ml/training/bootstrap-labeler/source-rules/fandom-rules.ts (3939 lines)", "shortDescription": {"text": "Very large file: src/server/ml/training/bootstrap-labeler/source-rules/fandom-rules.ts (3939 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-08edfd2bd40fb073", "name": "Very large file: src/server/services/wikipedia/wikipedia/manga-extractor/index.ts (1426 lines)", "shortDescription": {"text": "Very large file: src/server/services/wikipedia/wikipedia/manga-extractor/index.ts (1426 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-e8cb0ea9d3649e92", "name": "Very large file: src/server/services/fandom/adaptive/orchestrator.ts (2607 lines)", "shortDescription": {"text": "Very large file: src/server/services/fandom/adaptive/orchestrator.ts (2607 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-30c7945161d1437a", "name": "Very large file: src/features/annotation/editor/page-view/helpers.ts (4577 lines)", "shortDescription": {"text": "Very large file: src/features/annotation/editor/page-view/helpers.ts (4577 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": "418 test file(s) for 4260 source file(s) (ratio 0.10). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2149019635a34c88", "name": "79 TODO/FIXME markers", "shortDescription": {"text": "79 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ac533c57f5df191", "name": "Node manifest has dependencies but no lockfile: packages/mangadex-ts-client/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/mangadex-ts-client/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 3195 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 788 placeholder/mock markers across 348 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 lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-057284a91b21f228", "name": "Commented-code block (5 lines) in eslint.config.mjs:194", "shortDescription": {"text": "Commented-code block (5 lines) in eslint.config.mjs:194"}, "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-da9bd0e5b9a775b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/remediation.ts:222", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/remediation.ts:222"}, "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-e6abb03a11a7b8cc", "name": "Legacy-named symbol `fallbackToLegacy` in archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:176", "shortDescription": {"text": "Legacy-named symbol `fallbackToLegacy` in archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:176"}, "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-6637bcc751f4b05d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:249", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:249"}, "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-f6a91e2df9d5e899", "name": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/ai-page-evaluator.ts:381", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/ai-page-evaluator.ts:381"}, "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-22ed000424f4e203", "name": "Legacy-named symbol `fallbackToLegacy` in archive/ai-agent/tools/wiki-scrape-tool.ts:94", "shortDescription": {"text": "Legacy-named symbol `fallbackToLegacy` in archive/ai-agent/tools/wiki-scrape-tool.ts:94"}, "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-066a629b506bbb2a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/tools/wiki-page-search-tool.ts:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/tools/wiki-page-search-tool.ts:57"}, "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-fe762d16c587b03c", "name": "Commented-code block (5 lines) in tests/setup.ts:71", "shortDescription": {"text": "Commented-code block (5 lines) in tests/setup.ts:71"}, "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-8011dd2aa24292b7", "name": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/mangadex-matcher.test.ts:59", "shortDescription": {"text": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/mangadex-matcher.test.ts:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b4cc7f20bb051a0", "name": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/comicvine-volume-mapper.test.ts:165", "shortDescription": {"text": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/comicvine-volume-mapper.test.ts:165"}, "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-1602fd8ae2b08e4b", "name": "Commented-code block (6 lines) in tests/server/trpc/routers/enrichment-pipeline/dice-coefficient.test.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in tests/server/trpc/routers/enrichment-pipeline/dice-coefficient.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2848fdc245baaff5", "name": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/anilist-bound-id.test.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/anilist-bound-id.test.ts: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-9970b73fc73cca56", "name": "Commented-code block (8 lines) in tests/server/services/library/indexerSearch/coverage-parser.test.ts:114", "shortDescription": {"text": "Commented-code block (8 lines) in tests/server/services/library/indexerSearch/coverage-parser.test.ts:114"}, "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-2c2043b6c4deb0af", "name": "Legacy-named symbol `2024_v1` in tests/server/services/backup/restore-security.test.ts:462", "shortDescription": {"text": "Legacy-named symbol `2024_v1` in tests/server/services/backup/restore-security.test.ts:462"}, "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-36f1bf556da7cee8", "name": "Legacy-named symbol `weekly_backup` in tests/server/services/backup/path-security.test.ts:69", "shortDescription": {"text": "Legacy-named symbol `weekly_backup` in tests/server/services/backup/path-security.test.ts:69"}, "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-a40a52b440074d52", "name": "Commented-code block (5 lines) in tests/server/services/prowlarr/searchCache.test.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in tests/server/services/prowlarr/searchCache.test.ts:62"}, "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-d84ef6cb432b1284", "name": "Commented-code block (6 lines) in tests/server/services/packImport/file-scanner.test.ts:172", "shortDescription": {"text": "Commented-code block (6 lines) in tests/server/services/packImport/file-scanner.test.ts:172"}, "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-58d38eba9ba405d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/eslint/no-unsafe-assignment/schemas/index.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/eslint/no-unsafe-assignment/schemas/index.ts:42"}, "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-676c58805bafa3a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/examples/error-handling-example.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/examples/error-handling-example.ts:123"}, "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-dbcad8e083a56e82", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-ts2375-exact-optional.py:199", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-ts2375-exact-optional.py:199"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a93e1d14b002851", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-ts18046-unknown-types.py:209", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-ts18046-unknown-types.py:209"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-963d03669f242eca", "name": "Commented-code block (6 lines) in scripts/loadtest.js:29", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/loadtest.js:29"}, "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-4d10991cac087940", "name": "Legacy-named symbol `create_backup` in scripts/fix-syntax-errors.py:16", "shortDescription": {"text": "Legacy-named symbol `create_backup` in scripts/fix-syntax-errors.py:16"}, "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-d83df66b01138d25", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-syntax-errors.py:204", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-syntax-errors.py:204"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9a7e566dd813e793", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/force-opm-parse.ts:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/force-opm-parse.ts:121"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54c11144a65bc321", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/search-dragon-ball-links.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/search-dragon-ball-links.ts: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-9c4813d7db72b38e", "name": "Commented-code block (5 lines) in scripts/fix-null-safety.ts:124", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/fix-null-safety.ts:124"}, "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-c1de2be17d4f56e4", "name": "Commented-code block (7 lines) in scripts/fix-ts7053-v2.ts:115", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/fix-ts7053-v2.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d274e4d31e66baf", "name": "Commented-code block (5 lines) in scripts/security/verify-dependencies.ts:132", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/security/verify-dependencies.ts:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17c9081289dac171", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/mangadex/test-mangadex-accuracy.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/mangadex/test-mangadex-accuracy.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c05bd4b1f7d33568", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-add-manga-workflow.mjs:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-add-manga-workflow.mjs:116"}, "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-9fb4a7cdc0fd4410", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-flow.js:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-flow.js:54"}, "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-80c9c71c12c4be4e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-api-data.mjs:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-api-data.mjs:20"}, "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-0ecd882c2c099bee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-logout.mjs:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-logout.mjs:52"}, "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-9f2b2b8084758bd5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-api-data.js:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-api-data.js:20"}, "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-d33fa63c3de7f2a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-shutdown.js:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-shutdown.js: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-873ee974cc29eb40", "name": "Commented-code block (7 lines) in scripts/comicvine/test-comicvine-corpus.ts:427", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/comicvine/test-comicvine-corpus.ts:427"}, "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-cc1c69299c34b286", "name": "Commented-code block (6 lines) in scripts/comicvine/test-comicvine-accuracy.ts:264", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/comicvine/test-comicvine-accuracy.ts:264"}, "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-c6aa6ec63fd64831", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/comicvine/test-comicvine-search.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/comicvine/test-comicvine-search.ts:31"}, "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-1dddbd56dd892286", "name": "Commented-code block (6 lines) in scripts/database/seed-dev.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/database/seed-dev.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-a76205c28738f668", "name": "Commented-code block (5 lines) in scripts/utilities/install-suwayomi.mjs:162", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/utilities/install-suwayomi.mjs:162"}, "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-e03f2d83b6db7e0a", "name": "Legacy-named symbol `ProviderBindingOld` in scripts/migrations/migrate-provider-metadata.ts:16", "shortDescription": {"text": "Legacy-named symbol `ProviderBindingOld` in scripts/migrations/migrate-provider-metadata.ts:16"}, "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-cb3bb6beeb0bcb5b", "name": "Legacy-named symbol `ProviderBindingOld` in scripts/migrations/rollback-provider-metadata.ts:23", "shortDescription": {"text": "Legacy-named symbol `ProviderBindingOld` in scripts/migrations/rollback-provider-metadata.ts:23"}, "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-f0f83fe1ca9842e8", "name": "Legacy-named symbol `getCoverUrlLegacy` in packages/mangadex-ts-client/src/providers/mangadex/client.ts:400", "shortDescription": {"text": "Legacy-named symbol `getCoverUrlLegacy` in packages/mangadex-ts-client/src/providers/mangadex/client.ts:400"}, "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-c95213fd2af418a5", "name": "Commented-code block (6 lines) in public/theme-init.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in public/theme-init.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-c6121b92d7ef2c67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js: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-50b9c679c450f806", "name": "Commented-code block (5 lines) in src/middleware.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in src/middleware.ts:81"}, "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-b24a8fe42dda7c6b", "name": "Commented-code block (11 lines) in src/test/templates/component-test.template.tsx:12", "shortDescription": {"text": "Commented-code block (11 lines) in src/test/templates/component-test.template.tsx: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-17572626fc235d27", "name": "Commented-code block (5 lines) in src/test/templates/api-test.template.ts:96", "shortDescription": {"text": "Commented-code block (5 lines) in src/test/templates/api-test.template.ts:96"}, "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-958246276998718b", "name": "Commented-code block (5 lines) in src/test/templates/hook-test.template.ts:86", "shortDescription": {"text": "Commented-code block (5 lines) in src/test/templates/hook-test.template.ts:86"}, "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-d594e77e36588322", "name": "Commented-code block (10 lines) in src/utils/type-guards-extended.ts:61", "shortDescription": {"text": "Commented-code block (10 lines) in src/utils/type-guards-extended.ts:61"}, "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-f4fae91620ad0d32", "name": "Commented-code block (5 lines) in src/utils/errorHandlers.ts:292", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/errorHandlers.ts:292"}, "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-019bd52362026b02", "name": "Commented-code block (6 lines) in src/utils/entityMetadataUtils.ts:44", "shortDescription": {"text": "Commented-code block (6 lines) in src/utils/entityMetadataUtils.ts:44"}, "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-79ba05c0f39eeaf1", "name": "Commented-code block (6 lines) in src/utils/parsers/mangaFileParser.ts:297", "shortDescription": {"text": "Commented-code block (6 lines) in src/utils/parsers/mangaFileParser.ts:297"}, "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-fab127f10f875305", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/trpc-client/vanilla.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/trpc-client/vanilla.ts: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-240b8a7c620450f9", "name": "Commented-code block (10 lines) in src/utils/type-guards/index.ts:116", "shortDescription": {"text": "Commented-code block (10 lines) in src/utils/type-guards/index.ts:116"}, "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-a3415902cd941cb0", "name": "Commented-code block (11 lines) in src/components/MangaList.tsx:134", "shortDescription": {"text": "Commented-code block (11 lines) in src/components/MangaList.tsx:134"}, "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-bd7772378f46c15d", "name": "Commented-code block (6 lines) in src/components/NotificationsDropdown.tsx:184", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/NotificationsDropdown.tsx:184"}, "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-6828a3f5bb98d1c9", "name": "Commented-code block (22 lines) in src/components/fixOutOfSyncChaptersButton.tsx:49", "shortDescription": {"text": "Commented-code block (22 lines) in src/components/fixOutOfSyncChaptersButton.tsx:49"}, "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-c2c12961951d9bc2", "name": "Commented-code block (6 lines) in src/components/settings/FileOrganizationSettings.tsx:83", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/settings/FileOrganizationSettings.tsx:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1791f44fb6126c1", "name": "Commented-code block (5 lines) in src/components/settings/backup/AutomaticBackupForm.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/settings/backup/AutomaticBackupForm.tsx: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-beedb4118bc9ad60", "name": "Commented-code block (7 lines) in src/components/manga/provider-bind-config.ts:52", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/manga/provider-bind-config.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05bdd89b3298eddf", "name": "Commented-code block (8 lines) in src/components/manga/ResponsiveMangaDetail.tsx:104", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/manga/ResponsiveMangaDetail.tsx:104"}, "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-ccbc78d8456bb5fc", "name": "Commented-code block (5 lines) in src/components/manga/MobileChapterList.tsx:219", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/manga/MobileChapterList.tsx:219"}, "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-9a4abd9e6da9c041", "name": "Commented-code block (6 lines) in src/components/manga/ResponsiveChapterList/hooks/useVolumeDataExtraction.ts:110", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/manga/ResponsiveChapterList/hooks/useVolumeDataExtraction.ts:110"}, "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-09c3115b3568583b", "name": "Commented-code block (6 lines) in src/components/library/utils/libraryUtils.ts:218", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/library/utils/libraryUtils.ts:218"}, "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-4526d2ec22623a30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/library/import/ImportLibraryWizard.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/library/import/ImportLibraryWizard.tsx:97"}, "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-955a0be2d5d9d4ce", "name": "Commented-code block (6 lines) in src/components/library/import-pipeline/utils/chapter-matching-utils.ts:252", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/library/import-pipeline/utils/chapter-matching-utils.ts:252"}, "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-7be6d478d8b677d2", "name": "Legacy-named symbol `extractMetadataFromProviderLegacy` in src/components/library/import-pipeline/utils/chapter-matching", "shortDescription": {"text": "Legacy-named symbol `extractMetadataFromProviderLegacy` in src/components/library/import-pipeline/utils/chapter-matching-utils/metadata-extractors.ts:703"}, "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-15482ace8590f932", "name": "Commented-code block (6 lines) in src/components/library/import-pipeline/reducer/handlers.ts:331", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/library/import-pipeline/reducer/handlers.ts:331"}, "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-1fd6b259901c4373", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/library/import-pipeline/hooks/useDetectMatch/index.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/library/import-pipeline/hooks/useDetectMatch/index.ts:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b8ed01fb133a04a0", "name": "Commented-code block (6 lines) in src/components/library/import-pipeline/hooks/useDetectMatch/helpers.ts:265", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/library/import-pipeline/hooks/useDetectMatch/helpers.ts:265"}, "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-9a2f7abf3d22c916", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/searchStep/hooks/useMangaSelection.ts:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/searchStep/hooks/useMangaSelection.ts:124"}, "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-5995a26931e21649", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/wizard/basic-info-step/hooks/useQuickAdd.ts:", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/wizard/basic-info-step/hooks/useQuickAdd.ts:206"}, "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-1c6a2bb5e3844420", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/wizard/volumes-chapters/hooks/useAutoFetch.t", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/wizard/volumes-chapters/hooks/useAutoFetch.ts:153"}, "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-f9c74780680effbc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/services/modules/fandom-provider/index.ts:312", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/services/modules/fandom-provider/index.ts:312"}, "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-aeba529b6a568cfd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/services/modules/fandom-provider/comprehensive-par", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/services/modules/fandom-provider/comprehensive-parser.ts:5"}, "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-1c00f53796bc1b49", "name": "Commented-code block (5 lines) in src/components/addManga/handlers/providers/comicvine-url-parser.ts:86", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/addManga/handlers/providers/comicvine-url-parser.ts:86"}, "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-29a08f69291abcf9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/home/GenreSection.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/home/GenreSection.tsx: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-9655f589c4506138", "name": "Commented-code block (5 lines) in src/components/volumeChapters/useVolumeStatistics.tsx:53", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/volumeChapters/useVolumeStatistics.tsx:53"}, "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-dc47c295802acc5c", "name": "Commented-code block (7 lines) in src/components/volumeChapters/phantom-stub.ts:40", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/volumeChapters/phantom-stub.ts:40"}, "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-2aaf60d8d5e514eb", "name": "Legacy-named symbol `MetadataConfigLegacy` in src/components/system/plugins/MetadataProviders.tsx:57", "shortDescription": {"text": "Legacy-named symbol `MetadataConfigLegacy` in src/components/system/plugins/MetadataProviders.tsx:57"}, "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-90bf18a0301b2698", "name": "Commented-code block (8 lines) in src/components/jobs/CancelMenu.tsx:32", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/jobs/CancelMenu.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-a21aac806f9bef81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api-client.ts:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api-client.ts:130"}, "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-48684b13273c8499", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/schemas/index.ts:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/schemas/index.ts:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9b7d1928c818d0e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/schemas/examples/anilist-typed-example.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/schemas/examples/anilist-typed-example.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c959cba3f24ca680", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api-docs.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api-docs.tsx: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-855ab9e0ff8050c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api-playground.tsx:420", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api-playground.tsx:420"}, "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-9d37cbd9252804f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/prowlarr.ts:290", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/prowlarr.ts:290"}, "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-56ab7231c14f3c13", "name": "Commented-code block (5 lines) in src/pages/api/backup/upload.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/api/backup/upload.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-359941ee89ad6110", "name": "Commented-code block (6 lines) in src/pages/api/reader/page/utils/chapter-validation.ts:273", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/reader/page/utils/chapter-validation.ts:273"}, "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-976781551366eb83", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useChapterPagination.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useChapterPagination.ts: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-6ea961ce783046d8", "name": "Commented-code block (6 lines) in src/hooks/useUnifiedWebSocket.ts:553", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useUnifiedWebSocket.ts:553"}, "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-58b846c5ca372f5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useMetadataProviders.ts:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useMetadataProviders.ts:116"}, "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-253d170a0605498a", "name": "Commented-code block (9 lines) in src/hooks/manga/index.ts:559", "shortDescription": {"text": "Commented-code block (9 lines) in src/hooks/manga/index.ts:559"}, "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-9cf2f99b38dc038d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/manga/index.ts:222", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/manga/index.ts:222"}, "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-bd99d9ba3559ef8c", "name": "Commented-code block (13 lines) in src/hooks/common/index.ts:9", "shortDescription": {"text": "Commented-code block (13 lines) in src/hooks/common/index.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2f2c570ea63cd56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useDownloadClientConfig/connection-tester.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useDownloadClientConfig/connection-tester.ts:95"}, "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-a876c03d29760a8d", "name": "Commented-code block (8 lines) in src/hooks/jobs/useJobsPage.tsx:99", "shortDescription": {"text": "Commented-code block (8 lines) in src/hooks/jobs/useJobsPage.tsx:99"}, "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-afcf1625e6c6f8cc", "name": "Commented-code block (7 lines) in src/server/startup/initializers/suwayomi-initializer.ts:29", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/startup/initializers/suwayomi-initializer.ts:29"}, "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-501e772814af70e4", "name": "Commented-code block (6 lines) in src/server/startup/initializers/schedulers-initializer.ts:36", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/startup/initializers/schedulers-initializer.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f55dd33ef1a1cf7d", "name": "Commented-code block (7 lines) in src/server/startup/initializers/backup-initializer.ts:47", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/startup/initializers/backup-initializer.ts:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bd9281bc485f2a5", "name": "Legacy-named symbol `extractMetadataFromInfoboxLegacy` in src/server/parsers/UnifiedMetadataParser.ts:195", "shortDescription": {"text": "Legacy-named symbol `extractMetadataFromInfoboxLegacy` in src/server/parsers/UnifiedMetadataParser.ts:195"}, "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-771f73c67eace3ed", "name": "Commented-code block (5 lines) in src/server/parsers/extractors/utils/index.ts:246", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/parsers/extractors/utils/index.ts:246"}, "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-c0d2b2cda6798d9f", "name": "Commented-code block (7 lines) in src/server/config/feature-flags.ts:194", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/config/feature-flags.ts:194"}, "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-e886ceff5a0cfdb0", "name": "Commented-code block (5 lines) in src/server/api/adapters/WebSocketApiAdapter.ts:189", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/api/adapters/WebSocketApiAdapter.ts:189"}, "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-070e53529ffe36d5", "name": "Commented-code block (7 lines) in src/server/utils/system-memory.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/utils/system-memory.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-d099596522090e63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/integration/komga.ts:170", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/integration/komga.ts:170"}, "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-9c5cb0a3038a6d18", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/integration/kavita.ts:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/integration/kavita.ts:150"}, "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-6fafd445802193ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/rate-limit/index.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/rate-limit/index.ts:34"}, "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-1ef5fb8ed568f047", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/batch-query/utils.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/batch-query/utils.ts:55"}, "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-7330d4f68f5891a6", "name": "Commented-code block (6 lines) in src/server/cache/UnifiedCacheProvider/core.ts:311", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/cache/UnifiedCacheProvider/core.ts:311"}, "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-a82954fbcd5cc861", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/api.ts:370", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/api.ts:370"}, "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-8861ee1af3363a40", "name": "Commented-code block (5 lines) in src/server/trpc/routers/suwayomi-v2.ts:238", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/suwayomi-v2.ts:238"}, "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-947ea6167eacef04", "name": "Commented-code block (5 lines) in src/server/trpc/routers/flaresolverr.ts:702", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/flaresolverr.ts:702"}, "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-66b9e43342d0310e", "name": "Commented-code block (8 lines) in src/server/trpc/routers/settings/config.ts:244", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/trpc/routers/settings/config.ts:244"}, "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-2c5ce24bcc246f4a", "name": "Commented-code block (7 lines) in src/server/trpc/routers/settings/backup.ts:72", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/settings/backup.ts:72"}, "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-797f3f7cc6b1ee64", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/downloadOperations.ts:728", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/downloadOperations.ts:728"}, "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-3b2371a60f30af54", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/monitoringOperations.ts:182", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/monitoringOperations.ts:182"}, "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-8a348b3fb1db2641", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/providerOperations.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/providerOperations.ts:14"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f37f4da2366e0b7a", "name": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/refresh/index.ts:93", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/refresh/index.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6b8012056df6c9b", "name": "Commented-code block (15 lines) in src/server/trpc/routers/manga/metadataOperations/refresh/clear-auto-bindings.ts:268", "shortDescription": {"text": "Commented-code block (15 lines) in src/server/trpc/routers/manga/metadataOperations/refresh/clear-auto-bindings.ts:268"}, "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-41db857907c277b3", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-chapter-de", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-chapter-detail-fetch.ts: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-e1ce42a4aeb49235", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/pipeline-orchestr", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/pipeline-orchestrator.ts:87"}, "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-95bf4bed0894bc05", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/pipel", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/pipeline-orchestrator.ts:7"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9296185e79c851e3", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch.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-f7231be0611f2742", "name": "Legacy-named symbol `fallbackToLegacy` in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-ad", "shortDescription": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-adaptive-bridge.ts:22"}, "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-8022196428e691af", "name": "Legacy-named symbol `fallbackToLegacy` in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-disc", "shortDescription": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery.ts:593"}, "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-1a6dd70f4ddbd41f", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery.ts", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery.ts:77"}, "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-94e5430323e480ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery.ts:374"}, "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-dab84e18441d7edc", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-chapter-rec", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-chapter-reconciliation.ts:90"}, "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-e4d43b9735370b3e", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize.ts", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize.ts:92"}, "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-3032d1ab91f27041", "name": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-db-persiste", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-db-persistence.ts:197"}, "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-61433cf27bcf65d6", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-data-assemb", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-data-assembly.ts:193"}, "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-0538abb0b4c9b8d9", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-cros", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-cross-validation.ts:171"}, "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-d69400e00c3841b8", "name": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-mediawiki-", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-mediawiki-fallback.ts:213"}, "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-9957aa0b53ff6d8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fando", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-mediawiki-fallback.ts:369"}, "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-a129385e13af73ec", "name": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-reco", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-reconciliation.ts:402"}, "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-1640e138153d33fd", "name": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/ch", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/chapter-title-fill.ts:66"}, "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-c3a3c72790b1220a", "name": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/en", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/ensure-volume-file-rows.ts:106"}, "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-769ddae82abd9212", "name": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/vo", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/volume-wikipedia-fill.ts:64"}, "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-d51400851f06cc38", "name": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/vo", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/volume-id-backfill.ts:14"}, "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-ab1d6b2d74d9b1bb", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-cros", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-cross-validation/consensus-resolver.ts:76"}, "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-433e6fc5d56aa7f1", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/fa", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/fandom-wiki-validator.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5ed1a882caf7dad", "name": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/me", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/mediawiki-search-discovery.ts:78"}, "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-1606180065002647", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/mediawiki-search-discovery.ts:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ba31fcee4cb43e2", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/in", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/interwiki-discovery.ts:56"}, "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-392f5f44766e5ccc", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/anilist-match.ts:42"}, "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-ca66aa58eba6dc05", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangadex-matcher.ts:70"}, "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-6c1ee58803e46ffe", "name": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangadex-aggregate.ts:72"}, "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-bd967cf339eff394", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/kitsu-fetch.ts:80"}, "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-5b31379e85773a1d", "name": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangadex-chapter-list.ts:126"}, "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-1f53682552c76c3f", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/comicvine-volume-mapper.ts:142"}, "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-8df46869e79a838e", "name": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fe", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangaupdates-fetch.ts:142"}, "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-257aeb6c1bf59b76", "name": "Commented-code block (5 lines) in src/server/trpc/routers/library/import-file-processor.ts:114", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/library/import-file-processor.ts:114"}, "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-659eee0e9638e665", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/native-download/website-operations.ts:169", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/native-download/website-operations.ts:169"}, "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-d44d17da2c9b4f8c", "name": "Commented-code block (5 lines) in src/server/trpc/routers/wanted/search.ts:78", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/wanted/search.ts:78"}, "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-7b00482eff38da8e", "name": "Commented-code block (5 lines) in src/server/trpc/routers/chapter/reassignment.ts:383", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/chapter/reassignment.ts:383"}, "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-ea5df7d58c144c3f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/annotation/helpers.ts:439", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/annotation/helpers.ts:439"}, "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-bc62971c101f0ae4", "name": "Commented-code block (5 lines) in src/server/trpc/routers/system/lifecycle.ts:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/system/lifecycle.ts:110"}, "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-9bc90066d0b39b70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/metadata/metadata-comicvine/details-fetcher.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/metadata/metadata-comicvine/details-fetcher.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a990badc72eef51", "name": "Commented-code block (5 lines) in src/server/trpc/routers/jobs/mutations.ts:47", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/jobs/mutations.ts:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-449b50ab8739b31e", "name": "Commented-code block (6 lines) in src/server/ml/features/dom-linearizer.ts:457", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/ml/features/dom-linearizer.ts:457"}, "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-b83715eec751044e", "name": "Commented-code block (6 lines) in src/server/ml/training/agent-review/correction-generator.ts:313", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/ml/training/agent-review/correction-generator.ts:313"}, "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-08bf333ff6471838", "name": "Commented-code block (8 lines) in src/server/ml/training/bootstrap-labeler/index.ts:68", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/ml/training/bootstrap-labeler/index.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a11bfc7437665a9", "name": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/pattern-propagation.ts:236", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/pattern-propagation.ts:236"}, "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-46079be7a3fd783b", "name": "Commented-code block (7 lines) in src/server/ml/training/bootstrap-labeler/__tests__/source-rules.test.ts:1347", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/ml/training/bootstrap-labeler/__tests__/source-rules.test.ts:1347"}, "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-fc2d4001925dac50", "name": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/source-rules/fandom-rules.ts:786", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/source-rules/fandom-rules.ts:786"}, "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-2925ad25d73d652e", "name": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/source-rules/wikipedia-rules.ts:141", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/source-rules/wikipedia-rules.ts:141"}, "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-6988983f4f99c273", "name": "Commented-code block (5 lines) in src/server/queue/PostgreSQLQueueWorker.ts:128", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/queue/PostgreSQLQueueWorker.ts:128"}, "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-fb564f4b1854d58a", "name": "Commented-code block (6 lines) in src/server/queue/VolatileJobWorker.ts:174", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/queue/VolatileJobWorker.ts:174"}, "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-e165801190280270", "name": "Commented-code block (7 lines) in src/server/queue/queueManager.ts:138", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/queue/queueManager.ts:138"}, "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-e571f3f5089af594", "name": "Commented-code block (8 lines) in src/server/queue/workers/releaseDetectionWorker.ts:442", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/queue/workers/releaseDetectionWorker.ts:442"}, "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-e31aa62ae3abe190", "name": "Commented-code block (5 lines) in src/server/queue/workers/downloadMonitorWorker.ts:98", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/queue/workers/downloadMonitorWorker.ts:98"}, "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-96b44e9b64e034c8", "name": "Commented-code block (5 lines) in src/server/queue/modules/maintenance.ts:212", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/queue/modules/maintenance.ts:212"}, "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-599a1da22f0a1ead", "name": "Commented-code block (6 lines) in src/server/queue/handlers/mangadex-download.ts:88", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/queue/handlers/mangadex-download.ts:88"}, "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-530aed0a35c8da38", "name": "Commented-code block (6 lines) in src/server/queue/handlers/index.ts:50", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/queue/handlers/index.ts: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-7d8ae6b00c07ece6", "name": "Commented-code block (5 lines) in src/server/queue/handlers/library.ts:387", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/queue/handlers/library.ts:387"}, "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-0286bfd484e1a7f4", "name": "Commented-code block (6 lines) in src/server/services/mangadex/configService.ts:31", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/mangadex/configService.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bc7b5ba65babd60", "name": "Commented-code block (8 lines) in src/server/services/library/indexerSearch/phase-indexer-search.ts:38", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/services/library/indexerSearch/phase-indexer-search.ts:38"}, "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-4391afc90bd7ec14", "name": "Commented-code block (6 lines) in src/server/services/library/indexerSearch/adapters/prowlarr-adapter.ts:132", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/library/indexerSearch/adapters/prowlarr-adapter.ts:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7426d5c87a33647", "name": "Commented-code block (6 lines) in src/server/services/library/scanner/chapter-creator.ts:180", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/library/scanner/chapter-creator.ts:180"}, "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-762f6e1d4a45f452", "name": "Commented-code block (5 lines) in src/server/services/library/scanner/duplicate-checker.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/library/scanner/duplicate-checker.ts:44"}, "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-90ebaed5fcb0e674", "name": "Commented-code block (5 lines) in src/server/services/library/scanner/chapter-creator/auto-matcher.ts:174", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/library/scanner/chapter-creator/auto-matcher.ts:174"}, "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-2bcec8672b6e6751", "name": "Commented-code block (5 lines) in src/server/services/library/scanner/chapter-creator/update-helpers.ts:75", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/library/scanner/chapter-creator/update-helpers.ts:75"}, "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-f511febb90ef46b6", "name": "Commented-code block (5 lines) in src/server/services/library/releaseDispatcher/chapter-selection.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/library/releaseDispatcher/chapter-selection.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eddd13b86d610ff2", "name": "Commented-code block (6 lines) in src/server/services/library/releaseDispatcher/dispatch.ts:157", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/library/releaseDispatcher/dispatch.ts:157"}, "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-d40554cc2dec6bc6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/getcomics/hosts/download-utils.ts:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/getcomics/hosts/download-utils.ts:107"}, "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-6e6b50f33ba79d7b", "name": "Commented-code block (6 lines) in src/server/services/notifications/notify.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/notifications/notify.ts:92"}, "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-4775fc307ad74d40", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/notifications/adapters/discordAdapter.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/notifications/adapters/discordAdapter.ts:123"}, "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-98a932beb0d238e7", "name": "Commented-code block (8 lines) in src/server/services/notifications/factory/notificationFactory.ts:249", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/services/notifications/factory/notificationFactory.ts:249"}, "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-232d58c4d64e86c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/downloads/ChapterFileManager.ts:135", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/downloads/ChapterFileManager.ts:135"}, "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-78d00fecf2c550c0", "name": "Commented-code block (12 lines) in src/server/services/native-download/download-manager.ts:107", "shortDescription": {"text": "Commented-code block (12 lines) in src/server/services/native-download/download-manager.ts:107"}, "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-af1ddcd6cfea9f49", "name": "Commented-code block (6 lines) in src/server/services/events/cleanupTask.ts:75", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/events/cleanupTask.ts:75"}, "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-c4c29dee2e2aa269", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/singleton.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/singleton.ts:34"}, "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-3ab4f745eaf2c19a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/index.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/index.ts: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-e6ae95a597673e29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/flareSolverrClient/index.ts:306", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/flareSolverrClient/index.ts:306"}, "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-58d82b1a98d3dd09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/shared/protectedFetch.ts:212", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/shared/protectedFetch.ts:212"}, "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-f4e5fb7ffd7a1d53", "name": "Legacy-named symbol `nightly_backup` in src/server/services/backup/scheduling.ts:32", "shortDescription": {"text": "Legacy-named symbol `nightly_backup` in src/server/services/backup/scheduling.ts:32"}, "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-25cb9e6c4b369abd", "name": "Legacy-named symbol `temp_config_backup` in src/server/services/backup/utils.ts:229", "shortDescription": {"text": "Legacy-named symbol `temp_config_backup` in src/server/services/backup/utils.ts:229"}, "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-a5f85fea472ce7db", "name": "Commented-code block (6 lines) in src/server/services/backup/utils.ts:215", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/backup/utils.ts:215"}, "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-91a7685d2bbf862c", "name": "Commented-code block (6 lines) in src/server/services/backup/restore.ts:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/backup/restore.ts:38"}, "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-9339b00849d11ff8", "name": "Commented-code block (5 lines) in src/server/services/backup/backup-operations.ts:107", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/backup/backup-operations.ts:107"}, "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-59a73d143860d724", "name": "Legacy-named symbol `daily_backup` in src/server/services/backup/backup-creation.ts:550", "shortDescription": {"text": "Legacy-named symbol `daily_backup` in src/server/services/backup/backup-creation.ts:550"}, "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-08c06e3c95156c0a", "name": "Commented-code block (11 lines) in src/server/services/backup/backup-creation.ts:570", "shortDescription": {"text": "Commented-code block (11 lines) in src/server/services/backup/backup-creation.ts:570"}, "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-f5614e3b87132a67", "name": "Commented-code block (5 lines) in src/server/services/release-blocklist/blocklist-manager.ts:75", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/release-blocklist/blocklist-manager.ts:75"}, "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-9fbc0d676302386e", "name": "Commented-code block (5 lines) in src/server/services/release-blocklist/alternatives-finder.ts:107", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/release-blocklist/alternatives-finder.ts:107"}, "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-5d69e64ec8c9dc16", "name": "Commented-code block (5 lines) in src/server/services/release-blocklist/__tests__/blocklist-manager.test.ts:72", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/release-blocklist/__tests__/blocklist-manager.test.ts:72"}, "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-b5663507c48f4989", "name": "Commented-code block (7 lines) in src/server/services/comicvine/title-variants.ts:19", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/services/comicvine/title-variants.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-861fbf0bdca382ba", "name": "Commented-code block (5 lines) in src/server/services/comicvine/constants.ts:177", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/comicvine/constants.ts:177"}, "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-76c82fc7fd489f2e", "name": "Commented-code block (5 lines) in src/server/services/comicvine/scrapingService.ts:41", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/comicvine/scrapingService.ts:41"}, "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-d98b4ba98f560cb6", "name": "Commented-code block (7 lines) in src/server/services/comicvine/language-detection/content-detection.ts:54", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/services/comicvine/language-detection/content-detection.ts:54"}, "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-74b9087b181a68f8", "name": "Commented-code block (6 lines) in src/server/services/comicvine/language-detection/types.ts:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/comicvine/language-detection/types.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c179b28d2a81b59c", "name": "Commented-code block (6 lines) in src/server/services/comicvine/comicvine/http-client.ts:427", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/comicvine/comicvine/http-client.ts:427"}, "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-9902344ed1a6e2cb", "name": "Commented-code block (6 lines) in src/server/services/comicvine/modules/__tests__/integration.test.ts:26", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/comicvine/modules/__tests__/integration.test.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5971b8e7b3966241", "name": "Commented-code block (9 lines) in src/server/services/comicvine/discovery/language-aware-matcher.ts:444", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/services/comicvine/discovery/language-aware-matcher.ts:444"}, "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-ae84739ddd24f2dc", "name": "Commented-code block (9 lines) in src/server/services/search/providers/AniListProvider.ts:51", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/services/search/providers/AniListProvider.ts:51"}, "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-54aaaa34435bc360", "name": "Commented-code block (5 lines) in src/server/services/search/providers/search-result-validator/anilist-validator.ts:364", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/search/providers/search-result-validator/anilist-validator.ts:364"}, "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-619fb72f8ee7bd26", "name": "Legacy-named symbol `fallbackToLegacy` in src/server/services/auto-labeling/parser-bridge/index.ts:83", "shortDescription": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/services/auto-labeling/parser-bridge/index.ts:83"}, "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-faceebe12ae514b1", "name": "Commented-code block (5 lines) in src/server/services/wikipedia/wikipedia-extractor/volume-table-extraction.ts:135", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/wikipedia/wikipedia-extractor/volume-table-extraction.ts:135"}, "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-77af93ff9452b89e", "name": "Commented-code block (5 lines) in src/server/services/wikipedia/wikipedia/manga-extractor/index.ts:1270", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/wikipedia/wikipedia/manga-extractor/index.ts:1270"}, "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-aab1db877ab30379", "name": "Commented-code block (9 lines) in src/server/services/wikipedia/wikipedia/manga-extractor/best-match-finder-helpers.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/services/wikipedia/wikipedia/manga-extractor/best-match-finder-helpers.ts:160"}, "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-c936bebac7c5d8e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/jikan/client.ts:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/jikan/client.ts: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-8a70ac01e97eb19e", "name": "Commented-code block (5 lines) in src/server/services/logging/LogRetentionService.ts:325", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/logging/LogRetentionService.ts:325"}, "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-d15b89ffee6e7ead", "name": "Commented-code block (5 lines) in src/server/services/metadata/metadata-persister.ts:216", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/metadata/metadata-persister.ts:216"}, "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-883d8e973fed28f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/metadata/scrapers/WebScraper.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/metadata/scrapers/WebScraper.ts: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-7c57d722bdd7ea18", "name": "Commented-code block (6 lines) in src/server/services/metadata/binding-validators/wiki-freshness-audit.ts:44", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/metadata/binding-validators/wiki-freshness-audit.ts:44"}, "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-09b71caffcdf70e1", "name": "Commented-code block (7 lines) in src/server/services/metadata/selectors/select-categorical.ts:82", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/services/metadata/selectors/select-categorical.ts:82"}, "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-9c320d68e64f0759", "name": "Commented-code block (5 lines) in src/server/services/metadata/provider-matching/core-matching.ts:485", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/metadata/provider-matching/core-matching.ts:485"}, "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-d7beaa33fc6e4a34", "name": "Commented-code block (6 lines) in src/server/services/prowlarr/mangaSearch.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/prowlarr/mangaSearch.ts:70"}, "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-e655c3ab0530bc7d", "name": "Commented-code block (5 lines) in src/server/services/prowlarr/prowlarr-scoring.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/prowlarr/prowlarr-scoring.ts:40"}, "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-7b571074758c2250", "name": "Commented-code block (7 lines) in src/server/services/prowlarr/relevance-gate.ts:80", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/services/prowlarr/relevance-gate.ts:80"}, "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-a21c281bea5ca40c", "name": "Commented-code block (6 lines) in src/server/services/completeness/manga-completeness.ts:159", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/completeness/manga-completeness.ts:159"}, "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-ccff2b66c1758d9f", "name": "Legacy-named symbol `daysOld` in src/server/services/packImport/deduplication.ts:244", "shortDescription": {"text": "Legacy-named symbol `daysOld` in src/server/services/packImport/deduplication.ts:244"}, "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-1eaf7388729ed092", "name": "Commented-code block (8 lines) in src/server/services/packImport/chapter-organizer.ts:58", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/services/packImport/chapter-organizer.ts:58"}, "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-012a8ba36aa3f61d", "name": "Commented-code block (15 lines) in src/server/services/packImport/file-scanner.ts:63", "shortDescription": {"text": "Commented-code block (15 lines) in src/server/services/packImport/file-scanner.ts:63"}, "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-2ee597e2d9c150e6", "name": "Commented-code block (5 lines) in src/server/services/packImport/packImportService.ts:302", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/packImport/packImportService.ts:302"}, "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-7a5f47e492550199", "name": "Commented-code block (5 lines) in src/server/services/packImport/library-scanner.ts:227", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/packImport/library-scanner.ts:227"}, "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-e817a9886d2e3f76", "name": "Commented-code block (6 lines) in src/server/services/packImport/chapter-linker.ts:295", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/packImport/chapter-linker.ts:295"}, "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-b4dcc2ffd587500d", "name": "Commented-code block (8 lines) in src/server/services/download/downloadManager/download-manager.ts:200", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/services/download/downloadManager/download-manager.ts:200"}, "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-247b2f4094729f8d", "name": "Commented-code block (8 lines) in src/server/services/download/downloadManager/torrent-health.ts:276", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/services/download/downloadManager/torrent-health.ts:276"}, "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-12094b851f81c9bc", "name": "Commented-code block (9 lines) in src/server/services/download/retry/failure-detector.ts:78", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/services/download/retry/failure-detector.ts:78"}, "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-38d6cee8108ea5a7", "name": "Commented-code block (5 lines) in src/server/services/download/retry/retry-service.ts:105", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/download/retry/retry-service.ts:105"}, "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-7b565d1c9a2dc7e7", "name": "Commented-code block (6 lines) in src/server/services/download/download-monitor/chapter-manager.ts:322", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/download/download-monitor/chapter-manager.ts:322"}, "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-f17f70bbc1a8a8f7", "name": "Commented-code block (11 lines) in src/server/services/download/download-monitor/pack-import-handler.ts:390", "shortDescription": {"text": "Commented-code block (11 lines) in src/server/services/download/download-monitor/pack-import-handler.ts:390"}, "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-57c5b3c7d306fad4", "name": "Commented-code block (11 lines) in src/server/services/download/clients/nzbgetClient.ts:209", "shortDescription": {"text": "Commented-code block (11 lines) in src/server/services/download/clients/nzbgetClient.ts:209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-445d5673e53560e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/download/clients/nzbgetClient.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/download/clients/nzbgetClient.ts:103"}, "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-bdc6a470ffb0b1a0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/download/clients/deluge/rpc-client.ts:262", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/download/clients/deluge/rpc-client.ts:262"}, "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-20dd244f774525aa", "name": "Commented-code block (6 lines) in src/server/services/download/fileImporter/file-operations.ts:230", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/download/fileImporter/file-operations.ts: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-cc3c386c63953db4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/anilist/client.ts:158", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/anilist/client.ts:158"}, "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-776bc0bfde882d3a", "name": "Commented-code block (6 lines) in src/server/services/suwayomi/service.ts:431", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/suwayomi/service.ts:431"}, "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-0211b47e12b58f33", "name": "Commented-code block (9 lines) in src/server/services/suwayomi/suwayomi-service/lifecycle-manager.ts:108", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/services/suwayomi/suwayomi-service/lifecycle-manager.ts:108"}, "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-d70bfcc665d96dd7", "name": "Commented-code block (6 lines) in src/server/services/conversion/auto-convert-trigger.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/services/conversion/auto-convert-trigger.ts:92"}, "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-6ce6eea2640d4eca", "name": "Commented-code block (8 lines) in src/server/services/conversion/FormatConversionService/job-execution.ts:321", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/services/conversion/FormatConversionService/job-execution.ts:321"}, "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-3387c740b37c6c54", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/conversion/utils/kindle-extractor.ts:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/conversion/utils/kindle-extractor.ts:84"}, "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-18d83b9bd356d1e5", "name": "Commented-code block (10 lines) in src/server/services/fandom/types/popular-wikis.ts:16", "shortDescription": {"text": "Commented-code block (10 lines) in src/server/services/fandom/types/popular-wikis.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-94f97730f77b6df4", "name": "Commented-code block (5 lines) in src/server/services/fandom/chapter-detail/batch-processor.ts:222", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/fandom/chapter-detail/batch-processor.ts:222"}, "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-49d1eab5e43ec297", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/url-discoverer.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/url-discoverer.ts:72"}, "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-a1e242f1675efe97", "name": "Legacy-named symbol `fallbackToLegacy` in src/server/services/fandom/adaptive/orchestrator.ts:2323", "shortDescription": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/services/fandom/adaptive/orchestrator.ts:2323"}, "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-bf214892d93357db", "name": "Commented-code block (5 lines) in src/server/services/fandom/adaptive/orchestrator.ts:393", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/fandom/adaptive/orchestrator.ts:393"}, "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-9825c37d137b162a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/orchestrator.ts:1010", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/orchestrator.ts:1010"}, "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-e6e64cbbbfca4c1c", "name": "Commented-code block (5 lines) in src/server/services/fandom/adaptive/per-volume-iterator.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/services/fandom/adaptive/per-volume-iterator.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-58803ce7c320f48f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/series-page-resolver.ts:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/series-page-resolver.ts: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-b1adfcbf36477f3f", "name": "Commented-code block (7 lines) in src/server/services/fandom/adaptive/category-chapter-discovery.ts:149", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/services/fandom/adaptive/category-chapter-discovery.ts:149"}, "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-4491ce4cdd925d61", "name": "Legacy-named symbol `fallbackToLegacy` in src/server/services/fandom/adaptive/types.ts:432", "shortDescription": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/services/fandom/adaptive/types.ts:432"}, "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-7dd3befd1061fcde", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/types.ts:532", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/types.ts:532"}, "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-132d90a192ea1932", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/calendar/providers/AniListCalendarProvider.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/calendar/providers/AniListCalendarProvider.ts:95"}, "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-bb63b4f4d38797da", "name": "Commented-code block (7 lines) in src/styles/ColorSchemeProvider.tsx:407", "shortDescription": {"text": "Commented-code block (7 lines) in src/styles/ColorSchemeProvider.tsx:407"}, "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-cca5e042c84a0074", "name": "Commented-code block (5 lines) in src/features/annotation/editor/page-view/helpers.ts:129", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/annotation/editor/page-view/helpers.ts:129"}, "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-32824c1c50db24ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/sdk/kaizoku-api-sdk/client-base.ts:349", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/sdk/kaizoku-api-sdk/client-base.ts:349"}, "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-b0b5e7cb1208a7cd", "name": "13 env vars used in code but missing from .env.example", "shortDescription": {"text": "13 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_KEY`, `CI`, `CIRCLECI`, `COMICVINE_API_KEY`, `DISABLE_SUWAYOMI`, `DOCKER`, `GITHUB_ACTIONS`, `GITLAB_CI` + 5 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}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nml/src/model.py:forward, ml/src/model.py:forward\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c970cbfb13858049", "name": "Frontend route `/system/media` has no Link/navigate to it \u2014 src/pages/system/media.tsx", "shortDescription": {"text": "Frontend route `/system/media` has no Link/navigate to it \u2014 src/pages/system/media.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ea03376cf860e45", "name": "Dangling fetch: GET http://127.0.0.1:${port}/api/v1/ws (server-production.js:129)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/v1/ws (server-production.js:129)"}, "fullDescription": {"text": "`server-production.js:129` calls `GET http://127.0.0.1:${port}/api/v1/ws` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/v1/ws`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce7c3a40cd17700d", "name": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-debug2.mjs:7)", "shortDescription": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-debug2.mjs:7)"}, "fullDescription": {"text": "`tests/integration/test-parser-debug2.mjs:7` calls `GET https://fire-force.fandom.com/wiki/List_of_Volumes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/fire-force.fandom.com/wiki/list_of_volumes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9210083c79562545", "name": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-structure.mjs:7)", "shortDescription": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-structure.mjs:7)"}, "fullDescription": {"text": "`tests/integration/test-parser-structure.mjs:7` calls `GET https://fire-force.fandom.com/wiki/List_of_Volumes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/fire-force.fandom.com/wiki/list_of_volumes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0481b09ae5864644", "name": "Dangling fetch: POST http://localhost:3000/api/trpc/metadata.fetchEnhancedMangaMetadata (tests/integration/test-enhanced", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3000/api/trpc/metadata.fetchEnhancedMangaMetadata (tests/integration/test-enhanced-fandom.mjs:12)"}, "fullDescription": {"text": "`tests/integration/test-enhanced-fandom.mjs:12` calls `POST http://localhost:3000/api/trpc/metadata.fetchEnhancedMangaMetadata` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3000/api/trpc/metadata.fetchenhancedmangametadata`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e64467f2be4da6a2", "name": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-fire-force-parser.js:7)", "shortDescription": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-fire-force-parser.js:7)"}, "fullDescription": {"text": "`tests/integration/test-fire-force-parser.js:7` calls `GET https://fire-force.fandom.com/wiki/List_of_Volumes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/fire-force.fandom.com/wiki/list_of_volumes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98a6723fc7c7e5e1", "name": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-direct.mjs:8)", "shortDescription": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-direct.mjs:8)"}, "fullDescription": {"text": "`tests/integration/test-parser-direct.mjs:8` calls `GET https://fire-force.fandom.com/wiki/List_of_Volumes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/fire-force.fandom.com/wiki/list_of_volumes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd626dca4b67d3b2", "name": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-debug.mjs:7)", "shortDescription": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-debug.mjs:7)"}, "fullDescription": {"text": "`tests/integration/test-parser-debug.mjs:7` calls `GET https://fire-force.fandom.com/wiki/List_of_Volumes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/fire-force.fandom.com/wiki/list_of_volumes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b97826c2203d196", "name": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.parseEnhancedVolumes (tests/integration/test-complete-flow.", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.parseEnhancedVolumes (tests/integration/test-complete-flow.mjs:8)"}, "fullDescription": {"text": "`tests/integration/test-complete-flow.mjs:8` calls `POST http://localhost:3001/api/trpc/metadata.parseEnhancedVolumes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:3001/api/trpc/metadata.parseenhancedvolumes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e83deeea09032ce5", "name": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:12)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:12)"}, "fullDescription": {"text": "`tests/integration/test-axios-auth.js:12` calls `POST http://localhost:6789/jsonrpc` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:6789/jsonrpc`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6882d56929c492e5", "name": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:36)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:36)"}, "fullDescription": {"text": "`tests/integration/test-axios-auth.js:36` calls `POST http://localhost:6789/jsonrpc` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:6789/jsonrpc`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a90d1d8791f15fec", "name": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:61)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:61)"}, "fullDescription": {"text": "`tests/integration/test-axios-auth.js:61` calls `POST http://localhost:6789/jsonrpc` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:6789/jsonrpc`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b10c531a07e9677", "name": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-flow.js:16)"}, "fullDescription": {"text": "`scripts/testing/test-comicvine-flow.js:16` calls `POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/trpc/metadata.fetchcomicvinevolumedetails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89f75e86545b0780", "name": "Dangling fetch: POST http://localhost:3001/api/trpc/search.searchManga (scripts/testing/test-comicvine-flow.js:54)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/search.searchManga (scripts/testing/test-comicvine-flow.js:54)"}, "fullDescription": {"text": "`scripts/testing/test-comicvine-flow.js:54` calls `POST http://localhost:3001/api/trpc/search.searchManga` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/trpc/search.searchmanga`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83798f0a36304482", "name": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.mjs:20)"}, "fullDescription": {"text": "`scripts/testing/test-comicvine-api-data.mjs:20` calls `POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/trpc/metadata.fetchcomicvinevolumedetails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-641b6ffdee7e519a", "name": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.mjs:154)"}, "fullDescription": {"text": "`scripts/testing/test-comicvine-api-data.mjs:154` calls `POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/trpc/metadata.fetchcomicvinevolumedetails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e818891aa280589d", "name": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.js:20)"}, "fullDescription": {"text": "`scripts/testing/test-comicvine-api-data.js:20` calls `POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/trpc/metadata.fetchcomicvinevolumedetails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b80bce61fbfc638", "name": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.js:154)"}, "fullDescription": {"text": "`scripts/testing/test-comicvine-api-data.js:154` calls `POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/trpc/metadata.fetchcomicvinevolumedetails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59409b933f855f84", "name": "Dangling fetch: POST http://localhost:3001/api/auth/callback/credentials (scripts/testing/test-shutdown.js:17)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/auth/callback/credentials (scripts/testing/test-shutdown.js:17)"}, "fullDescription": {"text": "`scripts/testing/test-shutdown.js:17` calls `POST http://localhost:3001/api/auth/callback/credentials` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/auth/callback/credentials`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e00bf5daabf1951", "name": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (scripts/testing/test-improved-parser.mjs:7)", "shortDescription": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (scripts/testing/test-improved-parser.mjs:7)"}, "fullDescription": {"text": "`scripts/testing/test-improved-parser.mjs:7` calls `GET https://fire-force.fandom.com/wiki/List_of_Volumes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/fire-force.fandom.com/wiki/list_of_volumes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79b8612e544f5a00", "name": "Dangling fetch: GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest (scripts/utilities/install-suw", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest (scripts/utilities/install-suwayomi.mjs:109)"}, "fullDescription": {"text": "`scripts/utilities/install-suwayomi.mjs:109` calls `GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.github.com/repos/suwayomi/suwayomi-server/releases/latest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9aa6be00b0713bc", "name": "Dangling fetch: GET /api/users/create (docs/eslint/no-unsafe-assignment/schemas/index.ts:42)", "shortDescription": {"text": "Dangling fetch: GET /api/users/create (docs/eslint/no-unsafe-assignment/schemas/index.ts:42)"}, "fullDescription": {"text": "`docs/eslint/no-unsafe-assignment/schemas/index.ts:42` calls `GET /api/users/create` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/create`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-edbd00a16a0dd55f", "name": "Dangling fetch: GET https://comicvine.gamespot.com/api/search?${params} (scripts/comicvine/test-id-discovery.ts:112)", "shortDescription": {"text": "Dangling fetch: GET https://comicvine.gamespot.com/api/search?${params} (scripts/comicvine/test-id-discovery.ts:112)"}, "fullDescription": {"text": "`scripts/comicvine/test-id-discovery.ts:112` calls `GET https://comicvine.gamespot.com/api/search?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/comicvine.gamespot.com/api/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-971cb1dd0449dbd1", "name": "Dangling fetch: GET https://comicvine.gamespot.com/api/search?${params} (scripts/comicvine/test-comicvine-search.ts:31)", "shortDescription": {"text": "Dangling fetch: GET https://comicvine.gamespot.com/api/search?${params} (scripts/comicvine/test-comicvine-search.ts:31)"}, "fullDescription": {"text": "`scripts/comicvine/test-comicvine-search.ts:31` calls `GET https://comicvine.gamespot.com/api/search?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/comicvine.gamespot.com/api/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fac72cde424ac133", "name": "Dangling fetch: GET /api/prowlarr (src/utils/prowlarrApi.ts:261)", "shortDescription": {"text": "Dangling fetch: GET /api/prowlarr (src/utils/prowlarrApi.ts:261)"}, "fullDescription": {"text": "`src/utils/prowlarrApi.ts:261` calls `GET /api/prowlarr` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/prowlarr`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25f84e2c87196593", "name": "Dangling fetch: POST /api/logs (src/utils/logger/browser-logger.ts:87)", "shortDescription": {"text": "Dangling fetch: POST /api/logs (src/utils/logger/browser-logger.ts:87)"}, "fullDescription": {"text": "`src/utils/logger/browser-logger.ts:87` calls `POST /api/logs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/logs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf1e5ca3c18c433c", "name": "Dangling fetch: GET /docs/${documentPath} (src/components/common/DocumentModal.tsx:214)", "shortDescription": {"text": "Dangling fetch: GET /docs/${documentPath} (src/components/common/DocumentModal.tsx:214)"}, "fullDescription": {"text": "`src/components/common/DocumentModal.tsx:214` calls `GET /docs/${documentPath}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/docs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2955d577a75b5b57", "name": "Dangling fetch: GET /api/v1/openapi.json (src/pages/api-docs.tsx:17)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/openapi.json (src/pages/api-docs.tsx:17)"}, "fullDescription": {"text": "`src/pages/api-docs.tsx:17` calls `GET /api/v1/openapi.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/openapi.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2422c50fc3b9068", "name": "Dangling fetch: GET /api/cover-layers/${mangaId}/manifest.json (src/hooks/useCoverLayerManifest.ts:37)", "shortDescription": {"text": "Dangling fetch: GET /api/cover-layers/${mangaId}/manifest.json (src/hooks/useCoverLayerManifest.ts:37)"}, "fullDescription": {"text": "`src/hooks/useCoverLayerManifest.ts:37` calls `GET /api/cover-layers/${mangaId}/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cover-layers/<p>/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-daddfeecac7a2376", "name": "Dangling fetch: GET /dashboard (src/hooks/useNavigation.ts:68)", "shortDescription": {"text": "Dangling fetch: GET /dashboard (src/hooks/useNavigation.ts:68)"}, "fullDescription": {"text": "`src/hooks/useNavigation.ts:68` calls `GET /dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea0122fc6673162d", "name": "Dangling fetch: POST /api/settings/test-client (src/hooks/useDownloadClientConfig/connection-tester.ts:95)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/test-client (src/hooks/useDownloadClientConfig/connection-tester.ts:95)"}, "fullDescription": {"text": "`src/hooks/useDownloadClientConfig/connection-tester.ts:95` calls `POST /api/settings/test-client` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/test-client`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa8efd7c47813a39", "name": "Dangling fetch: GET /api/reader/chapter-info/${mangaId}/${chapterId} (src/hooks/reader/useReaderArchive.ts:129)", "shortDescription": {"text": "Dangling fetch: GET /api/reader/chapter-info/${mangaId}/${chapterId} (src/hooks/reader/useReaderArchive.ts:129)"}, "fullDescription": {"text": "`src/hooks/reader/useReaderArchive.ts:129` calls `GET /api/reader/chapter-info/${mangaId}/${chapterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reader/chapter-info/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf9d4869fb68de37", "name": "Dangling fetch: GET /api/reader/progress/${mangaId}/${chapterId} (src/hooks/reader/useReaderArchive.ts:153)", "shortDescription": {"text": "Dangling fetch: GET /api/reader/progress/${mangaId}/${chapterId} (src/hooks/reader/useReaderArchive.ts:153)"}, "fullDescription": {"text": "`src/hooks/reader/useReaderArchive.ts:153` calls `GET /api/reader/progress/${mangaId}/${chapterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reader/progress/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e95e189219198700", "name": "Dangling fetch: GET http://localhost:${port}${proxyUrl} (src/server/trpc/routers/manga/metadataOperations/enrichment-pip", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${port}${proxyUrl} (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize.ts:727)"}, "fullDescription": {"text": "`src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize.ts:727` calls `GET http://localhost:${port}${proxyUrl}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8a55a55d3e589f3", "name": "Dangling fetch: GET https://${domain}.fandom.com/api.php (src/server/trpc/routers/manga/metadataOperations/enrichment-pi", "shortDescription": {"text": "Dangling fetch: GET https://${domain}.fandom.com/api.php (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/interwiki-discovery.ts:150)"}, "fullDescription": {"text": "`src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/interwiki-discovery.ts:150` calls `GET https://${domain}.fandom.com/api.php` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/<p>.fandom.com/api.php`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2911bc40acab0386", "name": "Dangling fetch: GET https://${subdomain}.fandom.com/api.php?${params.toString()} (src/server/trpc/routers/manga/metadata", "shortDescription": {"text": "Dangling fetch: GET https://${subdomain}.fandom.com/api.php?${params.toString()} (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:63)"}, "fullDescription": {"text": "`src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:63` calls `GET https://${subdomain}.fandom.com/api.php?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>.fandom.com/api.php`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-805fb041f1b6975d", "name": "Dangling fetch: GET https://${subdomain}.fandom.com/api.php?${params.toString()} (src/server/trpc/routers/manga/metadata", "shortDescription": {"text": "Dangling fetch: GET https://${subdomain}.fandom.com/api.php?${params.toString()} (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:135)"}, "fullDescription": {"text": "`src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:135` calls `GET https://${subdomain}.fandom.com/api.php?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>.fandom.com/api.php`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11d85d9634912c99", "name": "Dangling fetch: GET https://example.com (src/server/services/flaresolverr/singleton.ts:34)", "shortDescription": {"text": "Dangling fetch: GET https://example.com (src/server/services/flaresolverr/singleton.ts:34)"}, "fullDescription": {"text": "`src/server/services/flaresolverr/singleton.ts:34` calls `GET https://example.com` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/example.com`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9dd8e8980a16c0a", "name": "Dangling fetch: GET https://comicvine.gamespot.com/... (src/server/services/flaresolverr/index.ts:16)", "shortDescription": {"text": "Dangling fetch: GET https://comicvine.gamespot.com/... (src/server/services/flaresolverr/index.ts:16)"}, "fullDescription": {"text": "`src/server/services/flaresolverr/index.ts:16` calls `GET https://comicvine.gamespot.com/...` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/comicvine.gamespot.com/...`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7069b179008dc51b", "name": "Dangling fetch: POST https://anilist.co/api/v2/oauth/token (src/server/services/anilist/client.ts:408)", "shortDescription": {"text": "Dangling fetch: POST https://anilist.co/api/v2/oauth/token (src/server/services/anilist/client.ts:408)"}, "fullDescription": {"text": "`src/server/services/anilist/client.ts:408` calls `POST https://anilist.co/api/v2/oauth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/anilist.co/api/v2/oauth/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c7cfd364b4e0cb47", "name": "Dangling fetch: GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest (src/server/services/suwayomi/", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest (src/server/services/suwayomi/suwayomi-service/installer.ts:122)"}, "fullDescription": {"text": "`src/server/services/suwayomi/suwayomi-service/installer.ts:122` calls `GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.github.com/repos/suwayomi/suwayomi-server/releases/latest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-320ac7d635225727", "name": "Dangling fetch: GET /api/v1/Articles/AsSimpleJson (src/server/services/fandom/FandomV1API.ts:71)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/Articles/AsSimpleJson (src/server/services/fandom/FandomV1API.ts:71)"}, "fullDescription": {"text": "`src/server/services/fandom/FandomV1API.ts:71` calls `GET /api/v1/Articles/AsSimpleJson` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/articles/assimplejson`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6487a1aae5b59cc", "name": "Dangling fetch: GET https://${domain}/api.php?${params.toString()} (src/server/services/fandom/adaptive/series-page-reso", "shortDescription": {"text": "Dangling fetch: GET https://${domain}/api.php?${params.toString()} (src/server/services/fandom/adaptive/series-page-resolver.ts:109)"}, "fullDescription": {"text": "`src/server/services/fandom/adaptive/series-page-resolver.ts:109` calls `GET https://${domain}/api.php?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/api.php`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e8a050c55320ab1", "name": "Dangling fetch: GET https://${domain}/api.php?${params.toString()} (src/server/services/fandom/adaptive/series-page-reso", "shortDescription": {"text": "Dangling fetch: GET https://${domain}/api.php?${params.toString()} (src/server/services/fandom/adaptive/series-page-resolver.ts:132)"}, "fullDescription": {"text": "`src/server/services/fandom/adaptive/series-page-resolver.ts:132` calls `GET https://${domain}/api.php?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/api.php`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41aa9e92da3f14ad", "name": "Unused endpoint: GET /users/:id", "shortDescription": {"text": "Unused endpoint: GET /users/:id"}, "fullDescription": {"text": "`src/types/express.ts` declares `GET /users/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`src/utils/errorHandlers.ts` declares `USE /api` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc9bb190b082702b", "name": "Unused endpoint: GET /admin/queues/stats", "shortDescription": {"text": "Unused endpoint: GET /admin/queues/stats"}, "fullDescription": {"text": "`src/server/monitorQueues.ts` declares `GET /admin/queues/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1aae6d128d34be8", "name": "Unused endpoint: POST /admin/queues/retry", "shortDescription": {"text": "Unused endpoint: POST /admin/queues/retry"}, "fullDescription": {"text": "`src/server/monitorQueues.ts` declares `POST /admin/queues/retry` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-deeee937f7668686", "name": "Unused endpoint: DELETE /admin/queues/cleanup/:days", "shortDescription": {"text": "Unused endpoint: DELETE /admin/queues/cleanup/:days"}, "fullDescription": {"text": "`src/server/monitorQueues.ts` declares `DELETE /admin/queues/cleanup/:days` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b186e887b1e3877c", "name": "Unused endpoint: GET /data", "shortDescription": {"text": "Unused endpoint: GET /data"}, "fullDescription": {"text": "`src/server/types/express.ts` declares `GET /data` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d16e4fa529c520e9", "name": "Unused endpoint: GET /search", "shortDescription": {"text": "Unused endpoint: GET /search"}, "fullDescription": {"text": "`src/server/services/comicvine/modularQueries.ts` declares `GET /search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd4763e6e0fcaa39", "name": "Unused endpoint: GET /issues", "shortDescription": {"text": "Unused endpoint: GET /issues"}, "fullDescription": {"text": "`src/server/services/comicvine/modularQueries.ts` declares `GET /issues` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d388b5b75933d1a8", "name": "Unused endpoint: GET /characters", "shortDescription": {"text": "Unused endpoint: GET /characters"}, "fullDescription": {"text": "`src/server/services/comicvine/modularQueries.ts` declares `GET /characters` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7dab92be61cedbb8", "name": "Unused endpoint: GET /people", "shortDescription": {"text": "Unused endpoint: GET /people"}, "fullDescription": {"text": "`src/server/services/comicvine/modularQueries.ts` declares `GET /people` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a436691337284d03", "name": "Unused endpoint: GET /api/v1/health", "shortDescription": {"text": "Unused endpoint: GET /api/v1/health"}, "fullDescription": {"text": "`src/server/services/prowlarr/prowlarr-client.ts` declares `GET /api/v1/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d2fddf4fd17a205", "name": "Unused endpoint: POST /api/v1/release/push", "shortDescription": {"text": "Unused endpoint: POST /api/v1/release/push"}, "fullDescription": {"text": "`src/server/services/prowlarr/prowlarr-client.ts` declares `POST /api/v1/release/push` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18526"}, "properties": {"repository": "Rorqualx/Mugiwara-Kaizoku", "repoUrl": "https://github.com/Rorqualx/Mugiwara-Kaizoku", "branch": "main"}, "results": [{"ruleId": "scanner-042da211ffb5be76", "level": "note", "message": {"text": "Possibly dead Python function: replacer"}, "properties": {"repobilityId": "4c6d041d83cc4187", "scanner": "scanner-primary", "fingerprint": "042da211ffb5be76", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-syntax-errors.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e1b5d5504b441864", "level": "note", "message": {"text": "Possibly dead Python function: hook"}, "properties": {"repobilityId": "0fda80138dc2ef67", "scanner": "scanner-primary", "fingerprint": "e1b5d5504b441864", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ml/cover-layers/download_models.py:51"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25a442b848c5be63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server-wrapper.js:17"}, "properties": {"repobilityId": "c75fabf292d28214", "scanner": "scanner-primary", "fingerprint": "25a442b848c5be63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab189125f8463b49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server-production.js:25"}, "properties": {"repobilityId": "aa5457eadd8414d0", "scanner": "scanner-primary", "fingerprint": "ab189125f8463b49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2f3521a03968b21", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/orchestrator/fallback-handler.ts:324"}, "properties": {"repobilityId": "c583148b72cc89a1", "scanner": "scanner-primary", "fingerprint": "b2f3521a03968b21", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9d670fb543b6d8eb", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:274"}, "properties": {"repobilityId": "92c4188bdb7198f3", "scanner": "scanner-primary", "fingerprint": "9d670fb543b6d8eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b5371092338085b1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/agent-core/memory-manager.ts:110"}, "properties": {"repobilityId": "869f5de1da3f8aaa", "scanner": "scanner-primary", "fingerprint": "b5371092338085b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-eefc3b1666225943", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 archive/ai-agent/agent-core/tool-registry.ts:191"}, "properties": {"repobilityId": "dab0915ec3206c89", "scanner": "scanner-primary", "fingerprint": "eefc3b1666225943", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-15549eda4efc6a1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/test-unified-fandom.js:6"}, "properties": {"repobilityId": "244895be5054213e", "scanner": "scanner-primary", "fingerprint": "15549eda4efc6a1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-826a7f8765bed6c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/test-fire-force-parser.js:6"}, "properties": {"repobilityId": "2ca220bef388cfe6", "scanner": "scanner-primary", "fingerprint": "826a7f8765bed6c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a95f18f2a4cb4bfe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/integration/test-axios-auth.js:8"}, "properties": {"repobilityId": "3920dc791dc83637", "scanner": "scanner-primary", "fingerprint": "a95f18f2a4cb4bfe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-307a21b268a3cf80", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/e2e/global-setup.ts:25"}, "properties": {"repobilityId": "be9e82038c157643", "scanner": "scanner-primary", "fingerprint": "307a21b268a3cf80", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8f1dd956f44e455", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/examples/auth-service-with-notifications.ts:226"}, "properties": {"repobilityId": "7b25518aaebc4fa9", "scanner": "scanner-primary", "fingerprint": "b8f1dd956f44e455", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7388ed36ebadbac2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-all-procedure-imports.ts:31"}, "properties": {"repobilityId": "1ee483262d4438a8", "scanner": "scanner-primary", "fingerprint": "7388ed36ebadbac2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0152228c4ad00fb3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/implement-output-validation.ts:167"}, "properties": {"repobilityId": "cebba4d7ef808687", "scanner": "scanner-primary", "fingerprint": "0152228c4ad00fb3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7525c4b02c311e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-unused-vars.ts:114"}, "properties": {"repobilityId": "c0d348cde03815b2", "scanner": "scanner-primary", "fingerprint": "a7525c4b02c311e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffa38013b774d72e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-prisma-imports.ts:172"}, "properties": {"repobilityId": "00068e2399cf2093", "scanner": "scanner-primary", "fingerprint": "ffa38013b774d72e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1ab41cc4e330108", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-ts-errors.ts:14"}, "properties": {"repobilityId": "d6e4362dbd12afd1", "scanner": "scanner-primary", "fingerprint": "c1ab41cc4e330108", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-521ba2e3152e910c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts7053-index-access.ts:28"}, "properties": {"repobilityId": "9fad0f7f0cc91156", "scanner": "scanner-primary", "fingerprint": "521ba2e3152e910c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2782001322087630", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-95-errors.ts:26"}, "properties": {"repobilityId": "43c65c1cbacadcd0", "scanner": "scanner-primary", "fingerprint": "2782001322087630", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5d522b656690c3b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-multiline-procedures.ts:147"}, "properties": {"repobilityId": "e3574fcacc80ea86", "scanner": "scanner-primary", "fingerprint": "5d522b656690c3b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0799c95185df65e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-remaining-procedures.ts:194"}, "properties": {"repobilityId": "9e829ad075b2831b", "scanner": "scanner-primary", "fingerprint": "0799c95185df65e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a4e36302eb50d5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-64-auto.ts:14"}, "properties": {"repobilityId": "10839f1932ac1ebc", "scanner": "scanner-primary", "fingerprint": "9a4e36302eb50d5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1def70e6a316f5d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-critical-fixes.ts:14"}, "properties": {"repobilityId": "8272a91bab298556", "scanner": "scanner-primary", "fingerprint": "1def70e6a316f5d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6206a982ca6d1e10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/server-lifecycle-wrapper.js:23"}, "properties": {"repobilityId": "b6313556047c1af9", "scanner": "scanner-primary", "fingerprint": "6206a982ca6d1e10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee395d07be3c099c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-trpc-procedures.ts:70"}, "properties": {"repobilityId": "8c0c49a52cdc51f0", "scanner": "scanner-primary", "fingerprint": "ee395d07be3c099c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d07941a1c4bd846c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-output-validation-all.ts:82"}, "properties": {"repobilityId": "f9bea3a7633b8d0b", "scanner": "scanner-primary", "fingerprint": "d07941a1c4bd846c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60ebeabc0264aea4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-fire-force-volumes.ts:14"}, "properties": {"repobilityId": "c0d4e7e36d360383", "scanner": "scanner-primary", "fingerprint": "60ebeabc0264aea4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b2f9989237d9ef3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-65-errors.ts:39"}, "properties": {"repobilityId": "dd03e708601bd5e4", "scanner": "scanner-primary", "fingerprint": "8b2f9989237d9ef3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ed61bb2ab9b406b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-trpc-imports.ts:108"}, "properties": {"repobilityId": "29732261b9595b1a", "scanner": "scanner-primary", "fingerprint": "6ed61bb2ab9b406b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a395a61055678126", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts4111-index-signatures.ts:28"}, "properties": {"repobilityId": "6b0ce464fae5b34b", "scanner": "scanner-primary", "fingerprint": "a395a61055678126", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3e645a48b48b3c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/quick-search-test.ts:14"}, "properties": {"repobilityId": "d964844b22c48a28", "scanner": "scanner-primary", "fingerprint": "e3e645a48b48b3c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f2d3862eb556093", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-broken-error-patterns.ts:14"}, "properties": {"repobilityId": "1da72a5911dd5df8", "scanner": "scanner-primary", "fingerprint": "1f2d3862eb556093", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1cb1370941b5906", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/transform-mantine-props.ts:59"}, "properties": {"repobilityId": "5c8b0c88e7acd143", "scanner": "scanner-primary", "fingerprint": "f1cb1370941b5906", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab230ad97f7557aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-comicvine-series.ts:15"}, "properties": {"repobilityId": "607ebae925800a1b", "scanner": "scanner-primary", "fingerprint": "ab230ad97f7557aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a00cc140d0f3340a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-prisma-enum-usage.ts:97"}, "properties": {"repobilityId": "f1ce8aaa8da38209", "scanner": "scanner-primary", "fingerprint": "a00cc140d0f3340a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5029f2c698e3ef64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/loadtest.js:355"}, "properties": {"repobilityId": "16191b7a21163ec4", "scanner": "scanner-primary", "fingerprint": "5029f2c698e3ef64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-996f584a14ef398c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase4-fix-validation-functions.ts:27"}, "properties": {"repobilityId": "ded5c68a82fc5603", "scanner": "scanner-primary", "fingerprint": "996f584a14ef398c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8caa41dd61b99593", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-fire-force-chapters.ts:18"}, "properties": {"repobilityId": "71837ee9c43a3760", "scanner": "scanner-primary", "fingerprint": "8caa41dd61b99593", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3eca7cfa286cf8b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-81-errors.ts:14"}, "properties": {"repobilityId": "b78ec7bf76b13b1e", "scanner": "scanner-primary", "fingerprint": "3eca7cfa286cf8b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c0f1d359f566ad8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/deduplicate-code.ts:43"}, "properties": {"repobilityId": "b30f484549bcab51", "scanner": "scanner-primary", "fingerprint": "0c0f1d359f566ad8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-866d89360846a496", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-138.ts:52"}, "properties": {"repobilityId": "39241157f093ad67", "scanner": "scanner-primary", "fingerprint": "866d89360846a496", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f48112f1d50619f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-final-64-errors.ts:158"}, "properties": {"repobilityId": "e1cd8547e6a2b9fb", "scanner": "scanner-primary", "fingerprint": "f48112f1d50619f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-969147d880d5a1eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/eslint-validator.js:59"}, "properties": {"repobilityId": "1e202130e9c75c80", "scanner": "scanner-primary", "fingerprint": "969147d880d5a1eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64b7497cde47d31e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-output-validation.ts:39"}, "properties": {"repobilityId": "771b744fefbd3cc4", "scanner": "scanner-primary", "fingerprint": "64b7497cde47d31e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19fbec4b3548c61b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/consolidate-async-result.ts:113"}, "properties": {"repobilityId": "a179f60f720b6ad4", "scanner": "scanner-primary", "fingerprint": "19fbec4b3548c61b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff647f7f7e07847e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/strict-typing-enforcer.js:91"}, "properties": {"repobilityId": "4435950092f774dc", "scanner": "scanner-primary", "fingerprint": "ff647f7f7e07847e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f94a38b26e40e439", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enable-suwayomi.js:14"}, "properties": {"repobilityId": "dc030955bcd30de3", "scanner": "scanner-primary", "fingerprint": "f94a38b26e40e439", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-412cea0dacb2d911", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/replace-error-with-trpc.ts:118"}, "properties": {"repobilityId": "3a344c5b8cbe089c", "scanner": "scanner-primary", "fingerprint": "412cea0dacb2d911", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-517b1d42e7ca2494", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/force-opm-parse.ts:9"}, "properties": {"repobilityId": "fe85f4cbe0c2ed4e", "scanner": "scanner-primary", "fingerprint": "517b1d42e7ca2494", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3b569432bed43bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/clear-wikipedia-cache.ts:9"}, "properties": {"repobilityId": "26b05c5a5ceb694c", "scanner": "scanner-primary", "fingerprint": "a3b569432bed43bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cc84b9c7cef64b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-error-handling.ts:36"}, "properties": {"repobilityId": "646ac02ce2df39b9", "scanner": "scanner-primary", "fingerprint": "3cc84b9c7cef64b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed7b8a57448d01cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-empty-imports.ts:14"}, "properties": {"repobilityId": "660a76b1bd610b1c", "scanner": "scanner-primary", "fingerprint": "ed7b8a57448d01cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da501c54428142c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/modernize-trpc-patterns.ts:25"}, "properties": {"repobilityId": "5b4f5fcbcb583229", "scanner": "scanner-primary", "fingerprint": "da501c54428142c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c2ee286b536ad31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-success-rate-test.ts:29"}, "properties": {"repobilityId": "1e6feb4e49eeb12f", "scanner": "scanner-primary", "fingerprint": "0c2ee286b536ad31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f925b58a696076e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-all-procedures.ts:178"}, "properties": {"repobilityId": "53bd44cabb8352fb", "scanner": "scanner-primary", "fingerprint": "6f925b58a696076e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8439e665f76418c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase4-update-type-guards.ts:26"}, "properties": {"repobilityId": "0d7094f66b74028a", "scanner": "scanner-primary", "fingerprint": "8439e665f76418c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd5059e76dfa24c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/ts-error-categorizer.js:137"}, "properties": {"repobilityId": "fd3b4e8d39532fb6", "scanner": "scanner-primary", "fingerprint": "bd5059e76dfa24c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d921e02350817bed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/lint-tests.js:114"}, "properties": {"repobilityId": "2b12cb450f4df5f6", "scanner": "scanner-primary", "fingerprint": "d921e02350817bed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82e53e90cf25070d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-async-result-violations.ts:145"}, "properties": {"repobilityId": "ea9270994eec0e44", "scanner": "scanner-primary", "fingerprint": "82e53e90cf25070d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83f754fcd1c0338c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/search-dragon-ball-links.ts:10"}, "properties": {"repobilityId": "4a2c28b775f65160", "scanner": "scanner-primary", "fingerprint": "83f754fcd1c0338c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0cdedbb858dd03ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-ts-errors.ts:14"}, "properties": {"repobilityId": "fdc3edfa565239bf", "scanner": "scanner-primary", "fingerprint": "0cdedbb858dd03ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ee3f2dcb62a3122", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-syntax-errors.ts:14"}, "properties": {"repobilityId": "e27bd7f019ef9875", "scanner": "scanner-primary", "fingerprint": "8ee3f2dcb62a3122", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b530e2017501a999", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/final-comprehensive-test.ts:29"}, "properties": {"repobilityId": "08041ca1ba01b8c5", "scanner": "scanner-primary", "fingerprint": "b530e2017501a999", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cbfaa063c3cfe18a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-catch-errors.ts:68"}, "properties": {"repobilityId": "c36b4f22936d5c36", "scanner": "scanner-primary", "fingerprint": "cbfaa063c3cfe18a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c2eb80d8d26e2fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/merge-async-result-functions.ts:123"}, "properties": {"repobilityId": "dfc639a9fd850202", "scanner": "scanner-primary", "fingerprint": "7c2eb80d8d26e2fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a513fa73872a9f10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-helper-imports.ts:14"}, "properties": {"repobilityId": "77f944ab1fe159fd", "scanner": "scanner-primary", "fingerprint": "a513fa73872a9f10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd9ccf5bfbf99d3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/convert-final-procedures.ts:146"}, "properties": {"repobilityId": "f7bc77b38722e474", "scanner": "scanner-primary", "fingerprint": "fd9ccf5bfbf99d3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20d92c379ddcf50c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-null-safety.ts:46"}, "properties": {"repobilityId": "f43c5312374392c7", "scanner": "scanner-primary", "fingerprint": "20d92c379ddcf50c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-822e8b4d0c4013c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-ts7053-v2.ts:44"}, "properties": {"repobilityId": "1384e5b42bbebc6c", "scanner": "scanner-primary", "fingerprint": "822e8b4d0c4013c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65024818b7fdb616", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-remaining-procedures.ts:159"}, "properties": {"repobilityId": "2f457c80366da59c", "scanner": "scanner-primary", "fingerprint": "65024818b7fdb616", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63ffd3c55c302f49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-publisher-simple.ts:21"}, "properties": {"repobilityId": "0671501dab2440f0", "scanner": "scanner-primary", "fingerprint": "63ffd3c55c302f49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac0dcdcdc2c65b6d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/security/config.ts:157"}, "properties": {"repobilityId": "d93726540c013a7c", "scanner": "scanner-primary", "fingerprint": "ac0dcdcdc2c65b6d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-816c3f75060ec725", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-architectural-drift.ts:319"}, "properties": {"repobilityId": "851539192ca8d5dd", "scanner": "scanner-primary", "fingerprint": "816c3f75060ec725", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19ff25aad3043817", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 scripts/security/check-architectural-drift.ts:185"}, "properties": {"repobilityId": "dd3113f08212f38d", "scanner": "scanner-primary", "fingerprint": "19ff25aad3043817", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b73afe58253ab01a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 scripts/security/scan-secrets.ts:148"}, "properties": {"repobilityId": "20fbd40646b3edbd", "scanner": "scanner-primary", "fingerprint": "b73afe58253ab01a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8bc4f7f1f829fda3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/scan-secrets.ts:244"}, "properties": {"repobilityId": "2f01830f27dfda07", "scanner": "scanner-primary", "fingerprint": "8bc4f7f1f829fda3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-418ca82032b6e53d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-business-logic.ts:365"}, "properties": {"repobilityId": "233e575face8bf76", "scanner": "scanner-primary", "fingerprint": "418ca82032b6e53d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f752cc1068b0fab1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-auth-patterns.ts:295"}, "properties": {"repobilityId": "c4a77f53f6c3f942", "scanner": "scanner-primary", "fingerprint": "f752cc1068b0fab1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-06f373528e078562", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/index.ts:97"}, "properties": {"repobilityId": "37025597324d0232", "scanner": "scanner-primary", "fingerprint": "06f373528e078562", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d5491dd0b80774d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/check-race-conditions.ts:280"}, "properties": {"repobilityId": "099e27adacddb10e", "scanner": "scanner-primary", "fingerprint": "6d5491dd0b80774d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-549daa2710450486", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/security/reporters/console-reporter.ts:61"}, "properties": {"repobilityId": "2198b24c5984b17f", "scanner": "scanner-primary", "fingerprint": "549daa2710450486", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8808e0988ad6fd6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-comicvine-flow.js:11"}, "properties": {"repobilityId": "4b9b513d30b89897", "scanner": "scanner-primary", "fingerprint": "a8808e0988ad6fd6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df00f998aae710be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-provider-integration.ts:15"}, "properties": {"repobilityId": "01767fbfefae3317", "scanner": "scanner-primary", "fingerprint": "df00f998aae710be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67142e90223e47d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-java-detection.js:6"}, "properties": {"repobilityId": "d2cfc2f8612787ec", "scanner": "scanner-primary", "fingerprint": "67142e90223e47d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89e9f155d16caa1f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-adapter-refactoring.ts:14"}, "properties": {"repobilityId": "cd692ebd48f07745", "scanner": "scanner-primary", "fingerprint": "89e9f155d16caa1f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d374c87f66bba1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-comicvine-api-data.js:11"}, "properties": {"repobilityId": "10afdf628653b60e", "scanner": "scanner-primary", "fingerprint": "6d374c87f66bba1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a6c7aa56c573653", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-prowlarr-api.js:28"}, "properties": {"repobilityId": "322fc9a4277d9da5", "scanner": "scanner-primary", "fingerprint": "1a6c7aa56c573653", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34397657bb609b19", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-image-processing.ts:22"}, "properties": {"repobilityId": "3f3c98a99d60958a", "scanner": "scanner-primary", "fingerprint": "34397657bb609b19", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-345a21b1c7cbc322", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-anilist-fire-force.js:13"}, "properties": {"repobilityId": "c1ae6b92bf5ba31f", "scanner": "scanner-primary", "fingerprint": "345a21b1c7cbc322", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-803151ffcefad010", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/testing/test-shutdown.js:13"}, "properties": {"repobilityId": "a754067f3edbec3a", "scanner": "scanner-primary", "fingerprint": "803151ffcefad010", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca31bedccba73e34", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-google-discovery.ts:27"}, "properties": {"repobilityId": "428f5206a51c32e3", "scanner": "scanner-primary", "fingerprint": "ca31bedccba73e34", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1cd0480f7c58f24", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-id-discovery.ts:320"}, "properties": {"repobilityId": "7ced897ec9dfefe5", "scanner": "scanner-primary", "fingerprint": "b1cd0480f7c58f24", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a4443a5e150c7bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/comicvine/test-comicvine-search.ts:8"}, "properties": {"repobilityId": "0139df19f9ed52ae", "scanner": "scanner-primary", "fingerprint": "3a4443a5e150c7bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0120bb9af5f9a0fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/database/seed-wanted-data.js:48"}, "properties": {"repobilityId": "fde653456bf8aa6e", "scanner": "scanner-primary", "fingerprint": "0120bb9af5f9a0fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-73337e126e0ab3b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/database/seed-api-key.js:17"}, "properties": {"repobilityId": "b5a7edbd242d8342", "scanner": "scanner-primary", "fingerprint": "73337e126e0ab3b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab06eb92cc97332a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-documentation.js:153"}, "properties": {"repobilityId": "1c8dfad02470eee8", "scanner": "scanner-primary", "fingerprint": "ab06eb92cc97332a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18bbbad902e09241", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/validation/validate-cross-references.js:144"}, "properties": {"repobilityId": "92f87eddd4641065", "scanner": "scanner-primary", "fingerprint": "18bbbad902e09241", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c43ac0d6174feae2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/utilities/create-admin-simple.js:13"}, "properties": {"repobilityId": "e23dcf9a0ca0a6c0", "scanner": "scanner-primary", "fingerprint": "c43ac0d6174feae2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abe8f3b76b5bdd7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/utilities/create-admin.js:63"}, "properties": {"repobilityId": "05e864c894565fce", "scanner": "scanner-primary", "fingerprint": "abe8f3b76b5bdd7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b961d0c9a6413cea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/utilities/check-manga-db.js:13"}, "properties": {"repobilityId": "c622ddb9ca6cea62", "scanner": "scanner-primary", "fingerprint": "b961d0c9a6413cea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd5a997bbf6735bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrations/migrate-provider-metadata.ts:32"}, "properties": {"repobilityId": "81696863b380c130", "scanner": "scanner-primary", "fingerprint": "bd5a997bbf6735bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aba6d0d2139edcf6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrations/rollback-provider-metadata.ts:32"}, "properties": {"repobilityId": "5cf8a3b539e7db35", "scanner": "scanner-primary", "fingerprint": "aba6d0d2139edcf6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ad20f790ad16a7d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/sw.js:19"}, "properties": {"repobilityId": "19ecb22d48da856c", "scanner": "scanner-primary", "fingerprint": "5ad20f790ad16a7d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9da7ec809d4474aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/disable-sw.js:6"}, "properties": {"repobilityId": "30803c5fe516f864", "scanner": "scanner-primary", "fingerprint": "9da7ec809d4474aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5206466928b7269", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/test/e2e/mobile-optimization.spec.ts:115"}, "properties": {"repobilityId": "6d29bf9c0f67be7e", "scanner": "scanner-primary", "fingerprint": "b5206466928b7269", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ba4a8d9db48c0b00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:61"}, "properties": {"repobilityId": "cf9d3af0db9250f9", "scanner": "scanner-primary", "fingerprint": "ba4a8d9db48c0b00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6cf37373ee9eb6e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/async-result/types.ts:31"}, "properties": {"repobilityId": "93f8804cba952f19", "scanner": "scanner-primary", "fingerprint": "6cf37373ee9eb6e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2917d77d2194498", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/fixOutOfSyncChaptersButton.tsx:49"}, "properties": {"repobilityId": "5d18eeffe69ca6b8", "scanner": "scanner-primary", "fingerprint": "e2917d77d2194498", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f6cde05f4a608b57", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/settings/calendar/CalendarProviderSettings.tsx:121"}, "properties": {"repobilityId": "ae7e8de8018e96cf", "scanner": "scanner-primary", "fingerprint": "f6cde05f4a608b57", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-cf11e9d3cda0b5bc", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/MangaGrid.tsx:200"}, "properties": {"repobilityId": "1a4f069e5d1369f8", "scanner": "scanner-primary", "fingerprint": "cf11e9d3cda0b5bc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9e265571b87d6285", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/DownloadOptionsModal.tsx:136"}, "properties": {"repobilityId": "3ddc415855f108b3", "scanner": "scanner-primary", "fingerprint": "9e265571b87d6285", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-76e9a964fed5d3d9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/native-download/NativeDownloadMangaDetails.tsx:33"}, "properties": {"repobilityId": "5783166d7f2e8854", "scanner": "scanner-primary", "fingerprint": "76e9a964fed5d3d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-38715fcae75cde4b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/manga/native-download/NativeDownloadSearch.tsx:45"}, "properties": {"repobilityId": "36e4f7293423beb2", "scanner": "scanner-primary", "fingerprint": "38715fcae75cde4b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-300f85bf20097fac", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/manga/volume-detail-modal/VolumeDetailsTab.tsx:167"}, "properties": {"repobilityId": "9c6860d7e5ba9890", "scanner": "scanner-primary", "fingerprint": "300f85bf20097fac", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e4ea83ceb82c7590", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/library/ResponsiveLibraryList.tsx:292"}, "properties": {"repobilityId": "37acf064ca8eeda5", "scanner": "scanner-primary", "fingerprint": "e4ea83ceb82c7590", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-528f791efcffb974", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/library/rules/PatternManager.tsx:16"}, "properties": {"repobilityId": "596b5b7e4951db07", "scanner": "scanner-primary", "fingerprint": "528f791efcffb974", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-783cdc77d1185697", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/addManga/context/ErrorHandlingContext.tsx:227"}, "properties": {"repobilityId": "d7c8f093ee9756ca", "scanner": "scanner-primary", "fingerprint": "783cdc77d1185697", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-76eaeffeb63823ee", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/notifications/NotificationPreferences.tsx:82"}, "properties": {"repobilityId": "098292677f2e923d", "scanner": "scanner-primary", "fingerprint": "76eaeffeb63823ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f4f883ce7057c828", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/components/events/EventNotifications.tsx:50"}, "properties": {"repobilityId": "efc9de0f465a0626", "scanner": "scanner-primary", "fingerprint": "f4f883ce7057c828", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-ce5eea0112d67b8c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/lib/html-sanitizer.ts:105"}, "properties": {"repobilityId": "ebfe0df33ae95566", "scanner": "scanner-primary", "fingerprint": "ce5eea0112d67b8c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a7c149ae756cd386", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/safe-wrappers/json.ts:19"}, "properties": {"repobilityId": "7f2935689580a0b6", "scanner": "scanner-primary", "fingerprint": "a7c149ae756cd386", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c83d7826b9ea594", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/validation/common-schemas.ts:20"}, "properties": {"repobilityId": "fef93a7fa94c2563", "scanner": "scanner-primary", "fingerprint": "2c83d7826b9ea594", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c4a0386f61d5f1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/type-guards/index.ts:13"}, "properties": {"repobilityId": "a3355315ecce93a3", "scanner": "scanner-primary", "fingerprint": "8c4a0386f61d5f1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-634d2882a53ba031", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/settings/backup.tsx:165"}, "properties": {"repobilityId": "02e07bd7f42820e2", "scanner": "scanner-primary", "fingerprint": "634d2882a53ba031", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-357d10e729566e15", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/api/v1/webhooks/[id].ts:76"}, "properties": {"repobilityId": "7859b6b8aa136bd6", "scanner": "scanner-primary", "fingerprint": "357d10e729566e15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-589b6697065f2786", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/api/v1/webhooks/index.ts:54"}, "properties": {"repobilityId": "79dff08beab203fc", "scanner": "scanner-primary", "fingerprint": "589b6697065f2786", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-95b0d11ec6b10705", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useLibraryScanner.ts:37"}, "properties": {"repobilityId": "dcb3d594de478763", "scanner": "scanner-primary", "fingerprint": "95b0d11ec6b10705", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-845f3c4f36f4c4be", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useCalendar.ts:171"}, "properties": {"repobilityId": "7fa96846e2c70771", "scanner": "scanner-primary", "fingerprint": "845f3c4f36f4c4be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-025c18a90c0b94af", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/manga/index.ts:235"}, "properties": {"repobilityId": "b194903fcef2539c", "scanner": "scanner-primary", "fingerprint": "025c18a90c0b94af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-025f637f59ebd5a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/__tests__/Performance.benchmark.test.ts:62"}, "properties": {"repobilityId": "2d9327314b3e04da", "scanner": "scanner-primary", "fingerprint": "025f637f59ebd5a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0fad900f0929cfe", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/__tests__/adapters/WikipediaAdapter.test.ts:52"}, "properties": {"repobilityId": "b6781c2b6a8b3108", "scanner": "scanner-primary", "fingerprint": "d0fad900f0929cfe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-10b16129ecc2e516", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/__tests__/core/ContentExtractor.test.ts:143"}, "properties": {"repobilityId": "26f2f186bd520e66", "scanner": "scanner-primary", "fingerprint": "10b16129ecc2e516", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8df124b21e762528", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/migration/file-operations.ts:66"}, "properties": {"repobilityId": "7da554b6d0ebdec5", "scanner": "scanner-primary", "fingerprint": "8df124b21e762528", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f02668a80f81d83", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/parsers/migration/migration-operations.ts:128"}, "properties": {"repobilityId": "677611f54b932468", "scanner": "scanner-primary", "fingerprint": "9f02668a80f81d83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7c822835b12d2bf1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/patterns/PatternLibrary.ts:42"}, "properties": {"repobilityId": "61e5fdcbcde4d96b", "scanner": "scanner-primary", "fingerprint": "7c822835b12d2bf1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4b1158a2203087f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/parsers/unified-metadata-parser/image-extractors.ts:74"}, "properties": {"repobilityId": "ffa7fb937b9689d6", "scanner": "scanner-primary", "fingerprint": "f4b1158a2203087f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4977f1fab356a9d6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/config/feature-flags.ts:194"}, "properties": {"repobilityId": "9883a24e76aeeb9f", "scanner": "scanner-primary", "fingerprint": "4977f1fab356a9d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5c5e20dbf3a06870", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/WebSocketMessageHandlers.ts:167"}, "properties": {"repobilityId": "38dff95eaecf5dcd", "scanner": "scanner-primary", "fingerprint": "5c5e20dbf3a06870", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-0074dc448e6f012b", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/connection-manager.ts:206"}, "properties": {"repobilityId": "828594943567f82c", "scanner": "scanner-primary", "fingerprint": "0074dc448e6f012b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-8944ebc9f55e0f4c", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/message-router.ts:152"}, "properties": {"repobilityId": "69f6de6abeb293f5", "scanner": "scanner-primary", "fingerprint": "8944ebc9f55e0f4c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-c78e8b962be1aee4", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 src/server/api/services/websocket-service/subscription-manager.ts:167"}, "properties": {"repobilityId": "f65876c53fe7db66", "scanner": "scanner-primary", "fingerprint": "c78e8b962be1aee4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-b4d9b3a40fcae465", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/shared/source-knowledge/selectors/index.ts:45"}, "properties": {"repobilityId": "a669860aff6eb4cf", "scanner": "scanner-primary", "fingerprint": "b4d9b3a40fcae465", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ba43a393677278d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/utils/batch-query/create.ts:45"}, "properties": {"repobilityId": "001fe94dda3b6ceb", "scanner": "scanner-primary", "fingerprint": "ba43a393677278d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-59b47b80aa69442f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/utils/batch-query/delete.ts:48"}, "properties": {"repobilityId": "2ce527b0e147aa88", "scanner": "scanner-primary", "fingerprint": "59b47b80aa69442f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea4c2861911c164a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/trpc/procedures.ts:267"}, "properties": {"repobilityId": "0ad38ab064306779", "scanner": "scanner-primary", "fingerprint": "ea4c2861911c164a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d83ab77490412e78", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/trpc/routers/bulk.ts:191"}, "properties": {"repobilityId": "f7c0f489d3775979", "scanner": "scanner-primary", "fingerprint": "d83ab77490412e78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b82a3d4f459f748e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/ml/training/bootstrap-labeler/pattern-detector/index.ts:29"}, "properties": {"repobilityId": "91e95c016f4d6f25", "scanner": "scanner-primary", "fingerprint": "b82a3d4f459f748e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4a6b38850efea9cc", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/queue/workers/autoDownloadWorker.ts:2"}, "properties": {"repobilityId": "d99a41a78d1ac6a0", "scanner": "scanner-primary", "fingerprint": "4a6b38850efea9cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-306c56fa35fb17c2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/queue/workers/releaseDetectionWorker.ts:442"}, "properties": {"repobilityId": "886c04bf53d2069f", "scanner": "scanner-primary", "fingerprint": "306c56fa35fb17c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2b1dd535f1c654bb", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/queue/handlers/native-download.ts:54"}, "properties": {"repobilityId": "c86edf9d110a8c3b", "scanner": "scanner-primary", "fingerprint": "2b1dd535f1c654bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d2f489b103b25405", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/metadataUrlsService.ts:81"}, "properties": {"repobilityId": "cae951f7ea0a9c9b", "scanner": "scanner-primary", "fingerprint": "d2f489b103b25405", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c98c91fe48cbe029", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/notifications/factory/notificationFactory.ts:249"}, "properties": {"repobilityId": "24f6919090b163d1", "scanner": "scanner-primary", "fingerprint": "c98c91fe48cbe029", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-94c200df74b6878a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/comicvine/comicvine/batch-operations.ts:199"}, "properties": {"repobilityId": "438e5340bb081fc0", "scanner": "scanner-primary", "fingerprint": "94c200df74b6878a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbd3ef99be558a9a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/search/configService.ts:2"}, "properties": {"repobilityId": "b8149e7f39489356", "scanner": "scanner-primary", "fingerprint": "dbd3ef99be558a9a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-541b32d351b8be1b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/search/providers/AniListProvider.ts:108"}, "properties": {"repobilityId": "72ac9691d235e3af", "scanner": "scanner-primary", "fingerprint": "541b32d351b8be1b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f16cc97a7ba8a490", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/wikipedia/wikipedia-extractor/index.ts:45"}, "properties": {"repobilityId": "9711996e131fc334", "scanner": "scanner-primary", "fingerprint": "f16cc97a7ba8a490", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-41785c7ef20304de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/metadata/unified-merger/quality.ts:72"}, "properties": {"repobilityId": "911d63855ae6b8f1", "scanner": "scanner-primary", "fingerprint": "41785c7ef20304de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6d663d634261eef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/metadata/provider-matching/metadata-operations.ts:275"}, "properties": {"repobilityId": "81185243ea502ae1", "scanner": "scanner-primary", "fingerprint": "e6d663d634261eef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39a8c397326ea07f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/anilist/validated-client.ts:61"}, "properties": {"repobilityId": "8060502f34dab369", "scanner": "scanner-primary", "fingerprint": "39a8c397326ea07f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5d1b22729cab766", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/suwayomi/configService.ts:2"}, "properties": {"repobilityId": "a197997ef8e341c1", "scanner": "scanner-primary", "fingerprint": "a5d1b22729cab766", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5c5ae15a2539ba48", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/suwayomi/suwayomi-service/java-manager.ts:302"}, "properties": {"repobilityId": "5c4ac18c9c453925", "scanner": "scanner-primary", "fingerprint": "5c5ae15a2539ba48", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b4b9bb4caa83102", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/chapter-detail/index.ts:57"}, "properties": {"repobilityId": "30e68d98d1aeb145", "scanner": "scanner-primary", "fingerprint": "2b4b9bb4caa83102", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e24e797164fcb635", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/chapter-detail/circuit-breaker.ts:37"}, "properties": {"repobilityId": "2f2b8610f7d3be9b", "scanner": "scanner-primary", "fingerprint": "e24e797164fcb635", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e75dcfc01f8a1d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/fandom/patterns/PatternLibraryBridge.ts:68"}, "properties": {"repobilityId": "93986c9bd3d52e12", "scanner": "scanner-primary", "fingerprint": "9e75dcfc01f8a1d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-981628febe9830c5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/services/fandom/fandom/metadata/index.ts:70"}, "properties": {"repobilityId": "77eaccb790d2e178", "scanner": "scanner-primary", "fingerprint": "981628febe9830c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f3d9229b0f711ad5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/services/calendar/calendar-provider-integration/schedule-detection.ts:63"}, "properties": {"repobilityId": "64db9f0100586f22", "scanner": "scanner-primary", "fingerprint": "f3d9229b0f711ad5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f824e5aa7f01ab53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/image-extractor/types.ts:151"}, "properties": {"repobilityId": "1a5bf85018087a25", "scanner": "scanner-primary", "fingerprint": "f824e5aa7f01ab53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b161dfd1b82cc50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/image-extractor/extractors/wizard.ts:35"}, "properties": {"repobilityId": "2c5fe96748ec2830", "scanner": "scanner-primary", "fingerprint": "7b161dfd1b82cc50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-144f3e77c92a295f", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: ubuntu:22.04"}, "properties": {"repobilityId": "5614114165a4d772", "scanner": "scanner-primary", "fingerprint": "144f3e77c92a295f", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-cfcac8f5cb0e520f", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in CLAUDE.md:558"}, "properties": {"repobilityId": "09374f0f880fc291", "scanner": "scanner-primary", "fingerprint": "cfcac8f5cb0e520f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 558}}}]}, {"ruleId": "scanner-3db7189ae9c82320", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-unused-vars.ts:7"}, "properties": {"repobilityId": "bbe0546142aa79e7", "scanner": "scanner-primary", "fingerprint": "3db7189ae9c82320", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-unused-vars.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-f9b60a3a8a447f4f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-ts7053-index-access.ts:15"}, "properties": {"repobilityId": "86771d7b1945bd28", "scanner": "scanner-primary", "fingerprint": "f9b60a3a8a447f4f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-ts7053-index-access.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-31210ca165fd41ff", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/server-lifecycle-wrapper.js:10"}, "properties": {"repobilityId": "2beb08c2f481b9a9", "scanner": "scanner-primary", "fingerprint": "31210ca165fd41ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/server-lifecycle-wrapper.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-6ed260396188eb6d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/convert-nullish-coalescing.cjs:13"}, "properties": {"repobilityId": "0d9ceac13b80257b", "scanner": "scanner-primary", "fingerprint": "6ed260396188eb6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/convert-nullish-coalescing.cjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-6ba48de4062fae18", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-ts4111-index-signatures.ts:15"}, "properties": {"repobilityId": "396fdb53445edf28", "scanner": "scanner-primary", "fingerprint": "6ba48de4062fae18", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-ts4111-index-signatures.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-26f4f09ff87aac68", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/deduplicate-code.ts:14"}, "properties": {"repobilityId": "f8f68ac7f49bccc4", "scanner": "scanner-primary", "fingerprint": "26f4f09ff87aac68", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/deduplicate-code.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-54614cd590e9a23f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/eslint-validator.js:11"}, "properties": {"repobilityId": "7cfd80180a176496", "scanner": "scanner-primary", "fingerprint": "54614cd590e9a23f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/eslint-validator.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-ad03469f97710274", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in scripts/consolidate-async-result.ts:177"}, "properties": {"repobilityId": "24bc18e3ad97b510", "scanner": "scanner-primary", "fingerprint": "ad03469f97710274", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/consolidate-async-result.ts"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-5a90c98ab1160196", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/consolidate-async-result.ts:16"}, "properties": {"repobilityId": "b1cec83591ebf9a4", "scanner": "scanner-primary", "fingerprint": "5a90c98ab1160196", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/consolidate-async-result.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-5196402a178e161e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/strict-typing-enforcer.js:11"}, "properties": {"repobilityId": "cdb110798124abdf", "scanner": "scanner-primary", "fingerprint": "5196402a178e161e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/strict-typing-enforcer.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-a4423791457c7244", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-null-safety.ts:17"}, "properties": {"repobilityId": "65d946f4593c398a", "scanner": "scanner-primary", "fingerprint": "a4423791457c7244", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-null-safety.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-1547f6784adf445c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-ts7053-v2.ts:16"}, "properties": {"repobilityId": "806d17897ec080f4", "scanner": "scanner-primary", "fingerprint": "1547f6784adf445c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-ts7053-v2.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-a3415b116afc8006", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in scripts/security/config.ts:224"}, "properties": {"repobilityId": "6b41709c297d6eb4", "scanner": "scanner-primary", "fingerprint": "a3415b116afc8006", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/security/config.ts"}, "region": {"startLine": 224}}}]}, {"ruleId": "scanner-d3a508e5d7867ffb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in scripts/security/config.ts:157"}, "properties": {"repobilityId": "c91c04b8005c8c49", "scanner": "scanner-primary", "fingerprint": "d3a508e5d7867ffb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/security/config.ts"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-4958fca39e256c29", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in scripts/security/config.ts:187"}, "properties": {"repobilityId": "d9d10230ec9e02f3", "scanner": "scanner-primary", "fingerprint": "4958fca39e256c29", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/security/config.ts"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-8fb5fca1f644ea80", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/security/utils.ts:5"}, "properties": {"repobilityId": "f8d25db25430dee2", "scanner": "scanner-primary", "fingerprint": "8fb5fca1f644ea80", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/security/utils.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-d63ce436c1972c01", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/security/verify-dependencies.ts:6"}, "properties": {"repobilityId": "d422fc132e2f3916", "scanner": "scanner-primary", "fingerprint": "d63ce436c1972c01", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/security/verify-dependencies.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-cf628e4aeae6e0f1", "level": "error", "message": {"text": "Possible secret in scripts/testing/test-logout.mjs"}, "properties": {"repobilityId": "422b3e2e5a6f55d2", "scanner": "scanner-primary", "fingerprint": "cf628e4aeae6e0f1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/testing/test-logout.mjs"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-446de8afc344c903", "level": "error", "message": {"text": "Possible secret in scripts/testing/test-shutdown.js"}, "properties": {"repobilityId": "e51aa8336375c98c", "scanner": "scanner-primary", "fingerprint": "446de8afc344c903", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/testing/test-shutdown.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-154763a668fb02ac", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/optimization/migrate-prisma-imports.cjs:149"}, "properties": {"repobilityId": "17426a5fed483a04", "scanner": "scanner-primary", "fingerprint": "154763a668fb02ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/optimization/migrate-prisma-imports.cjs"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-43055690993a8a4a", "level": "error", "message": {"text": "Possible secret in scripts/utilities/create-admin-simple.js"}, "properties": {"repobilityId": "0e60975fa05b6590", "scanner": "scanner-primary", "fingerprint": "43055690993a8a4a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/utilities/create-admin-simple.js"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-1c21bad0f6424379", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/utilities/install-suwayomi.mjs:39"}, "properties": {"repobilityId": "3a18aada3b9b72e1", "scanner": "scanner-primary", "fingerprint": "1c21bad0f6424379", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/utilities/install-suwayomi.mjs"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-96157aad19fb4db0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/csp-test.html:107"}, "properties": {"repobilityId": "4e49365cb5e6bf5a", "scanner": "scanner-primary", "fingerprint": "96157aad19fb4db0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/csp-test.html"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-a414234da820478c", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in src/types/browser-apis/native-bridge.d.ts:24"}, "properties": {"repobilityId": "79f3921995c72a9e", "scanner": "scanner-primary", "fingerprint": "a414234da820478c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/types/browser-apis/native-bridge.d.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-2bfdf2d81b501021", "level": "error", "message": {"text": "Possible secret in src/test/mocks.ts"}, "properties": {"repobilityId": "856de865f9274981", "scanner": "scanner-primary", "fingerprint": "2bfdf2d81b501021", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/test/mocks.ts"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-d8e5c6087a9b98e8", "level": "error", "message": {"text": "Possible secret in src/test/utils/testUtils.tsx"}, "properties": {"repobilityId": "b6d6b3ca7da133ce", "scanner": "scanner-primary", "fingerprint": "d8e5c6087a9b98e8", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/test/utils/testUtils.tsx"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-6f8207b5ed675705", "level": "error", "message": {"text": "Possible secret in src/test/utils/factories.ts"}, "properties": {"repobilityId": "8e2d62039a52f78f", "scanner": "scanner-primary", "fingerprint": "6f8207b5ed675705", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/test/utils/factories.ts"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-072eaa259d5109c7", "level": "error", "message": {"text": "Possible secret in src/utils/admin-debug.ts"}, "properties": {"repobilityId": "d3b2d690ac92e920", "scanner": "scanner-primary", "fingerprint": "072eaa259d5109c7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/utils/admin-debug.ts"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-4e2c6fd6785a98ea", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/manga/volume-detail-modal/VolumeDetailsTab.tsx:167"}, "properties": {"repobilityId": "1c7142fb56d27101", "scanner": "scanner-primary", "fingerprint": "4e2c6fd6785a98ea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/manga/volume-detail-modal/VolumeDetailsTab.tsx"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-b39deff718a2ca0c", "level": "error", "message": {"text": "Possible secret in src/components/auth/FirstTimeSetup.tsx"}, "properties": {"repobilityId": "7d18a180dec412e7", "scanner": "scanner-primary", "fingerprint": "b39deff718a2ca0c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/auth/FirstTimeSetup.tsx"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-47c31053d8a5f8ae", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/shared/annotation/visual-inspector/VisualInspectorModal.tsx:195"}, "properties": {"repobilityId": "897ec69c9a9d5fa5", "scanner": "scanner-primary", "fingerprint": "47c31053d8a5f8ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/shared/annotation/visual-inspector/VisualInspectorModal.tsx"}, "region": {"startLine": 195}}}]}, {"ruleId": "scanner-31145ad51e582567", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileComponents.test.tsx:62"}, "properties": {"repobilityId": "f4647ee8f9061bc3", "scanner": "scanner-primary", "fingerprint": "31145ad51e582567", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/mobile/__tests__/MobileComponents.test.tsx"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-5d5aa8731135122b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileModal.test.tsx:56"}, "properties": {"repobilityId": "b11a908da95ffad8", "scanner": "scanner-primary", "fingerprint": "5d5aa8731135122b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/mobile/__tests__/MobileModal.test.tsx"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-781a896ba6eb7603", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileToast.test.tsx:28"}, "properties": {"repobilityId": "4afe400b479e870f", "scanner": "scanner-primary", "fingerprint": "781a896ba6eb7603", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/mobile/__tests__/MobileToast.test.tsx"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-034d53572537930c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/MobileNavigationDrawer.test.tsx:63"}, "properties": {"repobilityId": "981b12a091dde08b", "scanner": "scanner-primary", "fingerprint": "034d53572537930c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/mobile/__tests__/MobileNavigationDrawer.test.tsx"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-7ff62122fafa09c5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/mobile/__tests__/FloatingActionButton.test.tsx:68"}, "properties": {"repobilityId": "58933a6dc3db7240", "scanner": "scanner-primary", "fingerprint": "7ff62122fafa09c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/mobile/__tests__/FloatingActionButton.test.tsx"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-fb980a793f19df91", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/images/__tests__/ProgressiveImage.test.tsx:97"}, "properties": {"repobilityId": "61454a1185224649", "scanner": "scanner-primary", "fingerprint": "fb980a793f19df91", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/images/__tests__/ProgressiveImage.test.tsx"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-d1bf4ba38412c893", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/pages/api/auth/check.ts:29"}, "properties": {"repobilityId": "097155959511f5e4", "scanner": "scanner-primary", "fingerprint": "d1bf4ba38412c893", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/api/auth/check.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-de148ca07affcf0f", "level": "error", "message": {"text": "Possible secret in src/server/adapters/metadata/websiteProviderAdapter.ts"}, "properties": {"repobilityId": "005709ce5c48880a", "scanner": "scanner-primary", "fingerprint": "de148ca07affcf0f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/adapters/metadata/websiteProviderAdapter.ts"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-de148ca07affcf0f", "level": "error", "message": {"text": "Possible secret in src/server/adapters/metadata/websiteProviderAdapter.ts"}, "properties": {"repobilityId": "005709ce5c48880a", "scanner": "scanner-primary", "fingerprint": "de148ca07affcf0f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/adapters/metadata/websiteProviderAdapter.ts"}, "region": {"startLine": 311}}}]}, {"ruleId": "scanner-6ec90476f06dae31", "level": "error", "message": {"text": "Possible secret in src/server/utils/log-sanitizer.ts"}, "properties": {"repobilityId": "2dcc6f8a101e0bfe", "scanner": "scanner-primary", "fingerprint": "6ec90476f06dae31", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/utils/log-sanitizer.ts"}, "region": {"startLine": 235}}}]}, {"ruleId": "scanner-9e2ac6c1a037f076", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/utils/system-memory.ts:1"}, "properties": {"repobilityId": "89035bc75166db76", "scanner": "scanner-primary", "fingerprint": "9e2ac6c1a037f076", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/utils/system-memory.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d8dbfbbb0eeb3091", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/trpc/routers/suwayomi-v2.ts:18"}, "properties": {"repobilityId": "b5c142113b2e1f6a", "scanner": "scanner-primary", "fingerprint": "d8dbfbbb0eeb3091", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/trpc/routers/suwayomi-v2.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-9bef7d536390d1e0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:58"}, "properties": {"repobilityId": "fc2e6782a3f7f36a", "scanner": "scanner-primary", "fingerprint": "9bef7d536390d1e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-e3d618f6ee1da5d6", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in src/server/trpc/routers/native-download/website-operations.ts:89"}, "properties": {"repobilityId": "6a4b14f898a103bb", "scanner": "scanner-primary", "fingerprint": "e3d618f6ee1da5d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/trpc/routers/native-download/website-operations.ts"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-b19ca979a00fb86f", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/server/ml/features/dom-linearizer.ts:299"}, "properties": {"repobilityId": "4d6fd4e574b1bbed", "scanner": "scanner-primary", "fingerprint": "b19ca979a00fb86f", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/ml/features/dom-linearizer.ts"}, "region": {"startLine": 299}}}]}, {"ruleId": "scanner-69b4f3a9cf5d276f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/coverLayers/coverLayerizer.ts:14"}, "properties": {"repobilityId": "9e54b8371c844218", "scanner": "scanner-primary", "fingerprint": "69b4f3a9cf5d276f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/coverLayers/coverLayerizer.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-1c05377e8726fcd8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/chromeChecker.ts:10"}, "properties": {"repobilityId": "7b2044f777f1781c", "scanner": "scanner-primary", "fingerprint": "1c05377e8726fcd8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/flaresolverr/chromeChecker.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-287ffb71c942cd1f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/goLauncher.ts:19"}, "properties": {"repobilityId": "3e179628b113728f", "scanner": "scanner-primary", "fingerprint": "287ffb71c942cd1f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/flaresolverr/goLauncher.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-96872e57912d369c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/binaryManager.ts:10"}, "properties": {"repobilityId": "c2e687ebe022a219", "scanner": "scanner-primary", "fingerprint": "96872e57912d369c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/flaresolverr/binaryManager.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-87e146c66c120696", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/index.ts:13"}, "properties": {"repobilityId": "e5e60ce4f6447efc", "scanner": "scanner-primary", "fingerprint": "87e146c66c120696", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/flaresolverr/process-manager/index.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-f4822ca4e9bd5dad", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/lock-file.ts:13"}, "properties": {"repobilityId": "62eb8811e9f3098a", "scanner": "scanner-primary", "fingerprint": "f4822ca4e9bd5dad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/flaresolverr/process-manager/lock-file.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-4aaef4e76dd6cf88", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/flaresolverr/process-manager/process-tree.ts:15"}, "properties": {"repobilityId": "9ff02fdb1f412461", "scanner": "scanner-primary", "fingerprint": "4aaef4e76dd6cf88", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/flaresolverr/process-manager/process-tree.ts"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-dbc8f1bd0560aca8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/backup/utils.ts:12"}, "properties": {"repobilityId": "8f433214e3029619", "scanner": "scanner-primary", "fingerprint": "dbc8f1bd0560aca8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/backup/utils.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-7686fbfabd35c5a7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/packImport/webtoon-outer-extract.ts:40"}, "properties": {"repobilityId": "ba55bfa066e5b308", "scanner": "scanner-primary", "fingerprint": "7686fbfabd35c5a7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/packImport/webtoon-outer-extract.ts"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-35182c887115397e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/packImport/archive-peek.ts:16"}, "properties": {"repobilityId": "246f639dcdcb3f62", "scanner": "scanner-primary", "fingerprint": "35182c887115397e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/packImport/archive-peek.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-62219ebd66101ed5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/packImport/multi-part-rar.ts:14"}, "properties": {"repobilityId": "ddf74e6fc436e76a", "scanner": "scanner-primary", "fingerprint": "62219ebd66101ed5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/packImport/multi-part-rar.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-dc58747ea4523b09", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/download/fileImporter/page-counter.ts:14"}, "properties": {"repobilityId": "07e4362181e1747d", "scanner": "scanner-primary", "fingerprint": "dc58747ea4523b09", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/download/fileImporter/page-counter.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-42dd35974e6ed2c2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/port-sanitizer.ts:23"}, "properties": {"repobilityId": "dc9667b43c658cd9", "scanner": "scanner-primary", "fingerprint": "42dd35974e6ed2c2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/suwayomi/port-sanitizer.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-c84855f6fc1fe180", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/utils.ts:9"}, "properties": {"repobilityId": "1057a64228a760d4", "scanner": "scanner-primary", "fingerprint": "c84855f6fc1fe180", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/suwayomi/utils.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-0c0537640a32523c", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in src/server/services/suwayomi/security.service.ts:339"}, "properties": {"repobilityId": "03e5f178a88dba3d", "scanner": "scanner-primary", "fingerprint": "0c0537640a32523c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/suwayomi/security.service.ts"}, "region": {"startLine": 339}}}]}, {"ruleId": "scanner-b5b05b4e9ffe9bfe", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/security.service.ts:10"}, "properties": {"repobilityId": "8a38b3731d8c9b07", "scanner": "scanner-primary", "fingerprint": "b5b05b4e9ffe9bfe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/suwayomi/security.service.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-7d529981615482d5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/service.ts:56"}, "properties": {"repobilityId": "a2588b97ab661c5f", "scanner": "scanner-primary", "fingerprint": "7d529981615482d5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/suwayomi/service.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-f908c9157c509b1b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/suwayomi-service/lifecycle-manager.ts:10"}, "properties": {"repobilityId": "2a37267923acd6ec", "scanner": "scanner-primary", "fingerprint": "f908c9157c509b1b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/suwayomi/suwayomi-service/lifecycle-manager.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-7704528aedbeaf8f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/server/services/suwayomi/suwayomi-service/java-manager.ts:10"}, "properties": {"repobilityId": "36bb162a0b6d485f", "scanner": "scanner-primary", "fingerprint": "7704528aedbeaf8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/suwayomi/suwayomi-service/java-manager.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-25f0757dbf74d7c8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/server/services/fandom/adaptive/series-page-resolver.ts:107"}, "properties": {"repobilityId": "9ddfdcc8221733a6", "scanner": "scanner-primary", "fingerprint": "25f0757dbf74d7c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/services/fandom/adaptive/series-page-resolver.ts"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-ce520023166806f5", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in src/features/annotation/editor/page-view/html-cleaner/cleaner.ts:124"}, "properties": {"repobilityId": "b2f069fb88271a07", "scanner": "scanner-primary", "fingerprint": "ce520023166806f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/annotation/editor/page-view/html-cleaner/cleaner.ts"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-58c2c80264ae9aee", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae13bcae98a3e47a", "scanner": "scanner-primary", "fingerprint": "58c2c80264ae9aee", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-on-comment.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-58c2c80264ae9aee", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "336c30894ae27049", "scanner": "scanner-primary", "fingerprint": "58c2c80264ae9aee", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-on-comment.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-58c2c80264ae9aee", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "21f32f4ac1727bed", "scanner": "scanner-primary", "fingerprint": "58c2c80264ae9aee", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-on-comment.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-58c2c80264ae9aee", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fe8b559afbab8487", "scanner": "scanner-primary", "fingerprint": "58c2c80264ae9aee", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-on-comment.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-58c2c80264ae9aee", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fe8b559afbab8487", "scanner": "scanner-primary", "fingerprint": "58c2c80264ae9aee", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-on-comment.yml"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6e32672f216e3c72", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-e0b6c4b9bec5df0a", "level": "error", "message": {"text": "tj-actions/changed-files is tag-pinned instead of SHA-pinned"}, "properties": {"repobilityId": "281c41753e51b8be", "scanner": "scanner-primary", "fingerprint": "e0b6c4b9bec5df0a", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b803c11816bb0a82", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-983ff3908477670e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d46e7bf73c86c0a0", "scanner": "scanner-primary", "fingerprint": "983ff3908477670e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/coverage-check.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-983ff3908477670e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "adaad02b68f87729", "scanner": "scanner-primary", "fingerprint": "983ff3908477670e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/coverage-check.yml"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-749156c4dcc8bd03", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0bc1e0bd53e3413d", "scanner": "scanner-primary", "fingerprint": "749156c4dcc8bd03", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/coverage.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-749156c4dcc8bd03", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a8cf0d28e0d675ac", "scanner": "scanner-primary", "fingerprint": "749156c4dcc8bd03", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/coverage.yml"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-749156c4dcc8bd03", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "850a63e190c2fbd8", "scanner": "scanner-primary", "fingerprint": "749156c4dcc8bd03", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/coverage.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-749156c4dcc8bd03", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9f690b737714b3be", "scanner": "scanner-primary", "fingerprint": "749156c4dcc8bd03", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/coverage.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "975567c623dff257", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3457cc19167a3600", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6e6055db66deaf1e", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fbe7b1da74fab3d1", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "975567c623dff257", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3457cc19167a3600", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 163}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6e6055db66deaf1e", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 195}}}]}, {"ruleId": "scanner-29bc0bf5998231ff", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "975567c623dff257", "scanner": "scanner-primary", "fingerprint": "29bc0bf5998231ff", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/documentation-validation.yml"}, "region": {"startLine": 207}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ae5e48e366ecdcb", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f83b0ae51e62f3e9", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "49f477cbbe083433", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "144f516496668fb7", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "144f516496668fb7", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ba2f9c341e13ca52", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-7f0f9976570faa6d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2d714eaacdb9a135", "scanner": "scanner-primary", "fingerprint": "7f0f9976570faa6d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-68a2b8f5c8cd6b53", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "0036b33690fe05ae", "scanner": "scanner-primary", "fingerprint": "68a2b8f5c8cd6b53", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dcb6504096fc20e7", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-ac490c57fea701c1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4ab1656be97ae933", "scanner": "scanner-primary", "fingerprint": "ac490c57fea701c1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-fixed.yml"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-ac490c57fea701c1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f8fa5e630a83957b", "scanner": "scanner-primary", "fingerprint": "ac490c57fea701c1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-fixed.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-a44eb8a8b381bafe", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04d82cc1ad0cbad8", "scanner": "scanner-primary", "fingerprint": "a44eb8a8b381bafe", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-quality.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-a44eb8a8b381bafe", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4e590d8f42a244de", "scanner": "scanner-primary", "fingerprint": "a44eb8a8b381bafe", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-quality.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-a44eb8a8b381bafe", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4e590d8f42a244de", "scanner": "scanner-primary", "fingerprint": "a44eb8a8b381bafe", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-quality.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-a44eb8a8b381bafe", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4e590d8f42a244de", "scanner": "scanner-primary", "fingerprint": "a44eb8a8b381bafe", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-quality.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-a44eb8a8b381bafe", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "448640966377c107", "scanner": "scanner-primary", "fingerprint": "a44eb8a8b381bafe", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/code-quality.yml"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2644034c718fb80d", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0c3d4499b6cd885", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "920c40c27134bd8a", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "472d54ae50ffbaa2", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "65c6ca706d4070cc", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cb9e1c936601d795", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c979fa8b000ae93f", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 189}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5b4061ad72d8c025", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 397}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5b4061ad72d8c025", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 409}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a40f5f06ddd1ea48", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 427}}}]}, {"ruleId": "scanner-290261d8d901691d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cc7495714b533115", "scanner": "scanner-primary", "fingerprint": "290261d8d901691d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-platforms.yml"}, "region": {"startLine": 494}}}]}, {"ruleId": "scanner-54e9e93f7e1b106c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "32e5e537c9cc47f7", "scanner": "scanner-primary", "fingerprint": "54e9e93f7e1b106c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-quality.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-d79ae14c7e760704", "level": "error", "message": {"text": "tj-actions/changed-files is tag-pinned instead of SHA-pinned"}, "properties": {"repobilityId": "5949e408b902d6ee", "scanner": "scanner-primary", "fingerprint": "d79ae14c7e760704", "layer": "cicd", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-quality.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-54e9e93f7e1b106c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "28f1046eb2c76ad0", "scanner": "scanner-primary", "fingerprint": "54e9e93f7e1b106c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test-quality.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9dab4f3db0cf258c", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "19a39e2c6ef4805b", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8a57ca3862d35729", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9b22c56ad2532f66", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9fb86d8ca16b55b0", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-73cfbb08b1f7366d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02ceb3753420b5af", "scanner": "scanner-primary", "fingerprint": "73cfbb08b1f7366d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/database-setup.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-73cfbb08b1f7366d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0cec88e3437090b1", "scanner": "scanner-primary", "fingerprint": "73cfbb08b1f7366d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/database-setup.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-02c4b17bf382f342", "level": "note", "message": {"text": "Very large file: scripts/comicvine/test-comicvine-corpus.ts (4234 lines)"}, "properties": {"repobilityId": "6c11143a7a08ddff", "scanner": "scanner-primary", "fingerprint": "02c4b17bf382f342", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f6d96cffde0ef39d", "level": "note", "message": {"text": "Very large file: scripts/comicvine/test-comicvine-accuracy.ts (1557 lines)"}, "properties": {"repobilityId": "99c93aabf7ca7690", "scanner": "scanner-primary", "fingerprint": "f6d96cffde0ef39d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-84d1da8aa5f74a08", "level": "note", "message": {"text": "Very large file: scripts/mangaupdates/test-mangaupdates-accuracy.ts (1216 lines)"}, "properties": {"repobilityId": "9bb8db1d4a7eb9ad", "scanner": "scanner-primary", "fingerprint": "84d1da8aa5f74a08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4229dd6c6fd9189f", "level": "note", "message": {"text": "Very large file: src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch.ts (1320 lines)"}, "properties": {"repobilityId": "0794c208b34d9f99", "scanner": "scanner-primary", "fingerprint": "4229dd6c6fd9189f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a4a9feae2e8ecaf0", "level": "note", "message": {"text": "Very large file: src/server/ml/training/bootstrap-labeler/source-rules/fandom-rules.ts (3939 lines)"}, "properties": {"repobilityId": "25633516e3451f60", "scanner": "scanner-primary", "fingerprint": "a4a9feae2e8ecaf0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-08edfd2bd40fb073", "level": "note", "message": {"text": "Very large file: src/server/services/wikipedia/wikipedia/manga-extractor/index.ts (1426 lines)"}, "properties": {"repobilityId": "f7eb0a4bba67dd75", "scanner": "scanner-primary", "fingerprint": "08edfd2bd40fb073", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e8cb0ea9d3649e92", "level": "note", "message": {"text": "Very large file: src/server/services/fandom/adaptive/orchestrator.ts (2607 lines)"}, "properties": {"repobilityId": "ae11076ede473602", "scanner": "scanner-primary", "fingerprint": "e8cb0ea9d3649e92", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-30c7945161d1437a", "level": "note", "message": {"text": "Very large file: src/features/annotation/editor/page-view/helpers.ts (4577 lines)"}, "properties": {"repobilityId": "3e0d5010f67d14c7", "scanner": "scanner-primary", "fingerprint": "30c7945161d1437a", "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-2149019635a34c88", "level": "note", "message": {"text": "79 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "2149019635a34c88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-9ac533c57f5df191", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/mangadex-ts-client/package.json"}, "properties": {"repobilityId": "9df93bd516029a5e", "scanner": "scanner-primary", "fingerprint": "9ac533c57f5df191", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mangadex-ts-client/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "eeacffc71208ed38", "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": "868fe97a61da137a", "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": "9a7009bb68560361", "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": "14f48f77923fc36c", "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": "d0b9ac083374ced8", "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": "19ac6d0ae29f88aa", "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": "212a67b8e8f6e4f6", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-057284a91b21f228", "level": "none", "message": {"text": "Commented-code block (5 lines) in eslint.config.mjs:194"}, "properties": {"repobilityId": "e73a1e268f497681", "scanner": "scanner-primary", "fingerprint": "057284a91b21f228", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da9bd0e5b9a775b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/remediation.ts:222"}, "properties": {"repobilityId": "d341fda051fc29fc", "scanner": "scanner-primary", "fingerprint": "da9bd0e5b9a775b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e6abb03a11a7b8cc", "level": "note", "message": {"text": "Legacy-named symbol `fallbackToLegacy` in archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:176"}, "properties": {"repobilityId": "e08fdded13e313f5", "scanner": "scanner-primary", "fingerprint": "e6abb03a11a7b8cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6637bcc751f4b05d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/extended-parsing.ts:249"}, "properties": {"repobilityId": "a02a7fe0eb38a47a", "scanner": "scanner-primary", "fingerprint": "6637bcc751f4b05d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f6a91e2df9d5e899", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/orchestrator/phase-orchestrator/ai-page-evaluator.ts:381"}, "properties": {"repobilityId": "69d8a4d506dfde28", "scanner": "scanner-primary", "fingerprint": "f6a91e2df9d5e899", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22ed000424f4e203", "level": "note", "message": {"text": "Legacy-named symbol `fallbackToLegacy` in archive/ai-agent/tools/wiki-scrape-tool.ts:94"}, "properties": {"repobilityId": "73cdcec769f47110", "scanner": "scanner-primary", "fingerprint": "22ed000424f4e203", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-066a629b506bbb2a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/ai-agent/tools/wiki-page-search-tool.ts:57"}, "properties": {"repobilityId": "4332addf4c4edd24", "scanner": "scanner-primary", "fingerprint": "066a629b506bbb2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe762d16c587b03c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/setup.ts:71"}, "properties": {"repobilityId": "82e440eecc4056b2", "scanner": "scanner-primary", "fingerprint": "fe762d16c587b03c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8011dd2aa24292b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/mangadex-matcher.test.ts:59"}, "properties": {"repobilityId": "8a0cbc0a18d2d15c", "scanner": "scanner-primary", "fingerprint": "8011dd2aa24292b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b4cc7f20bb051a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/comicvine-volume-mapper.test.ts:165"}, "properties": {"repobilityId": "909332c98c926286", "scanner": "scanner-primary", "fingerprint": "0b4cc7f20bb051a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1602fd8ae2b08e4b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/server/trpc/routers/enrichment-pipeline/dice-coefficient.test.ts:9"}, "properties": {"repobilityId": "1a05e2d89cb752dc", "scanner": "scanner-primary", "fingerprint": "1602fd8ae2b08e4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2848fdc245baaff5", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/server/trpc/routers/enrichment-pipeline/anilist-bound-id.test.ts:6"}, "properties": {"repobilityId": "f8bb191a42b0e8b9", "scanner": "scanner-primary", "fingerprint": "2848fdc245baaff5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9970b73fc73cca56", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/server/services/library/indexerSearch/coverage-parser.test.ts:114"}, "properties": {"repobilityId": "d3ec37b28a927249", "scanner": "scanner-primary", "fingerprint": "9970b73fc73cca56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c2043b6c4deb0af", "level": "note", "message": {"text": "Legacy-named symbol `2024_v1` in tests/server/services/backup/restore-security.test.ts:462"}, "properties": {"repobilityId": "9d68e0587ba72c72", "scanner": "scanner-primary", "fingerprint": "2c2043b6c4deb0af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-36f1bf556da7cee8", "level": "note", "message": {"text": "Legacy-named symbol `weekly_backup` in tests/server/services/backup/path-security.test.ts:69"}, "properties": {"repobilityId": "64e4a14a8e4254ef", "scanner": "scanner-primary", "fingerprint": "36f1bf556da7cee8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a40a52b440074d52", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/server/services/prowlarr/searchCache.test.ts:62"}, "properties": {"repobilityId": "a3b5902af3dc6b8a", "scanner": "scanner-primary", "fingerprint": "a40a52b440074d52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d84ef6cb432b1284", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/server/services/packImport/file-scanner.test.ts:172"}, "properties": {"repobilityId": "4cda0cb4f69f88b3", "scanner": "scanner-primary", "fingerprint": "d84ef6cb432b1284", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58d38eba9ba405d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/eslint/no-unsafe-assignment/schemas/index.ts:42"}, "properties": {"repobilityId": "5991cee111da5487", "scanner": "scanner-primary", "fingerprint": "58d38eba9ba405d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-676c58805bafa3a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/examples/error-handling-example.ts:123"}, "properties": {"repobilityId": "cf6e868ab73128b1", "scanner": "scanner-primary", "fingerprint": "676c58805bafa3a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dbcad8e083a56e82", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-ts2375-exact-optional.py:199"}, "properties": {"repobilityId": "bd040ce1661df89b", "scanner": "scanner-primary", "fingerprint": "dbcad8e083a56e82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a93e1d14b002851", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-ts18046-unknown-types.py:209"}, "properties": {"repobilityId": "c285674ee140f88a", "scanner": "scanner-primary", "fingerprint": "4a93e1d14b002851", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-963d03669f242eca", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/loadtest.js:29"}, "properties": {"repobilityId": "b40909238bd4f60f", "scanner": "scanner-primary", "fingerprint": "963d03669f242eca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d10991cac087940", "level": "note", "message": {"text": "Legacy-named symbol `create_backup` in scripts/fix-syntax-errors.py:16"}, "properties": {"repobilityId": "86a26cc6b57ed778", "scanner": "scanner-primary", "fingerprint": "4d10991cac087940", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d83df66b01138d25", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fix-syntax-errors.py:204"}, "properties": {"repobilityId": "3a3231b93dcbe618", "scanner": "scanner-primary", "fingerprint": "d83df66b01138d25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a7e566dd813e793", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/force-opm-parse.ts:121"}, "properties": {"repobilityId": "072744b78b211f9b", "scanner": "scanner-primary", "fingerprint": "9a7e566dd813e793", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54c11144a65bc321", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/search-dragon-ball-links.ts:6"}, "properties": {"repobilityId": "a1d3f89d63bdaba8", "scanner": "scanner-primary", "fingerprint": "54c11144a65bc321", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c4813d7db72b38e", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/fix-null-safety.ts:124"}, "properties": {"repobilityId": "dcd61397b5dd7cf1", "scanner": "scanner-primary", "fingerprint": "9c4813d7db72b38e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1de2be17d4f56e4", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/fix-ts7053-v2.ts:115"}, "properties": {"repobilityId": "5339209656115cca", "scanner": "scanner-primary", "fingerprint": "c1de2be17d4f56e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d274e4d31e66baf", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/security/verify-dependencies.ts:132"}, "properties": {"repobilityId": "4e8e0f1e0a799540", "scanner": "scanner-primary", "fingerprint": "0d274e4d31e66baf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17c9081289dac171", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/mangadex/test-mangadex-accuracy.ts:12"}, "properties": {"repobilityId": "1ee8001a30dc27e2", "scanner": "scanner-primary", "fingerprint": "17c9081289dac171", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c05bd4b1f7d33568", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-add-manga-workflow.mjs:116"}, "properties": {"repobilityId": "c38e96a5a6177d87", "scanner": "scanner-primary", "fingerprint": "c05bd4b1f7d33568", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9fb4a7cdc0fd4410", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-flow.js:54"}, "properties": {"repobilityId": "005e6ba9514045c0", "scanner": "scanner-primary", "fingerprint": "9fb4a7cdc0fd4410", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80c9c71c12c4be4e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-api-data.mjs:20"}, "properties": {"repobilityId": "2529b152677220c2", "scanner": "scanner-primary", "fingerprint": "80c9c71c12c4be4e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ecd882c2c099bee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-logout.mjs:52"}, "properties": {"repobilityId": "510ef10053265c31", "scanner": "scanner-primary", "fingerprint": "0ecd882c2c099bee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f2b2b8084758bd5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-comicvine-api-data.js:20"}, "properties": {"repobilityId": "374568a563afac91", "scanner": "scanner-primary", "fingerprint": "9f2b2b8084758bd5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d33fa63c3de7f2a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/testing/test-shutdown.js:17"}, "properties": {"repobilityId": "cec5d128cfb3fa70", "scanner": "scanner-primary", "fingerprint": "d33fa63c3de7f2a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-873ee974cc29eb40", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/comicvine/test-comicvine-corpus.ts:427"}, "properties": {"repobilityId": "b0bae71f514177e3", "scanner": "scanner-primary", "fingerprint": "873ee974cc29eb40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc1c69299c34b286", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/comicvine/test-comicvine-accuracy.ts:264"}, "properties": {"repobilityId": "ef639d86ee1a7a73", "scanner": "scanner-primary", "fingerprint": "cc1c69299c34b286", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6aa6ec63fd64831", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/comicvine/test-comicvine-search.ts:31"}, "properties": {"repobilityId": "8222a2e3bd425010", "scanner": "scanner-primary", "fingerprint": "c6aa6ec63fd64831", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1dddbd56dd892286", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/database/seed-dev.js:1"}, "properties": {"repobilityId": "72f662acd363083a", "scanner": "scanner-primary", "fingerprint": "1dddbd56dd892286", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a76205c28738f668", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/utilities/install-suwayomi.mjs:162"}, "properties": {"repobilityId": "e836292332d6f0cd", "scanner": "scanner-primary", "fingerprint": "a76205c28738f668", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e03f2d83b6db7e0a", "level": "note", "message": {"text": "Legacy-named symbol `ProviderBindingOld` in scripts/migrations/migrate-provider-metadata.ts:16"}, "properties": {"repobilityId": "02f85ecd3b84dc78", "scanner": "scanner-primary", "fingerprint": "e03f2d83b6db7e0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cb3bb6beeb0bcb5b", "level": "note", "message": {"text": "Legacy-named symbol `ProviderBindingOld` in scripts/migrations/rollback-provider-metadata.ts:23"}, "properties": {"repobilityId": "239ed63792468b83", "scanner": "scanner-primary", "fingerprint": "cb3bb6beeb0bcb5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f0f83fe1ca9842e8", "level": "note", "message": {"text": "Legacy-named symbol `getCoverUrlLegacy` in packages/mangadex-ts-client/src/providers/mangadex/client.ts:400"}, "properties": {"repobilityId": "6266d8aa7b0dae3d", "scanner": "scanner-primary", "fingerprint": "f0f83fe1ca9842e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c95213fd2af418a5", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/theme-init.js:5"}, "properties": {"repobilityId": "da70735e52b0c62e", "scanner": "scanner-primary", "fingerprint": "c95213fd2af418a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6121b92d7ef2c67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/sw.js:58"}, "properties": {"repobilityId": "4191968d99c7165e", "scanner": "scanner-primary", "fingerprint": "c6121b92d7ef2c67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50b9c679c450f806", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/middleware.ts:81"}, "properties": {"repobilityId": "7ab79ab35a4fee89", "scanner": "scanner-primary", "fingerprint": "50b9c679c450f806", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b24a8fe42dda7c6b", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/test/templates/component-test.template.tsx:12"}, "properties": {"repobilityId": "aa71502183877cd6", "scanner": "scanner-primary", "fingerprint": "b24a8fe42dda7c6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17572626fc235d27", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/test/templates/api-test.template.ts:96"}, "properties": {"repobilityId": "0089c0a47348a555", "scanner": "scanner-primary", "fingerprint": "17572626fc235d27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-958246276998718b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/test/templates/hook-test.template.ts:86"}, "properties": {"repobilityId": "00c4dba8d1c4397a", "scanner": "scanner-primary", "fingerprint": "958246276998718b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d594e77e36588322", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/utils/type-guards-extended.ts:61"}, "properties": {"repobilityId": "b48fa1f094467e5e", "scanner": "scanner-primary", "fingerprint": "d594e77e36588322", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4fae91620ad0d32", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/errorHandlers.ts:292"}, "properties": {"repobilityId": "c085e85eeb7e196d", "scanner": "scanner-primary", "fingerprint": "f4fae91620ad0d32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-019bd52362026b02", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/utils/entityMetadataUtils.ts:44"}, "properties": {"repobilityId": "c0519a2a8e3be3a9", "scanner": "scanner-primary", "fingerprint": "019bd52362026b02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79ba05c0f39eeaf1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/utils/parsers/mangaFileParser.ts:297"}, "properties": {"repobilityId": "ebcb6d514ed58f59", "scanner": "scanner-primary", "fingerprint": "79ba05c0f39eeaf1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fab127f10f875305", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/trpc-client/vanilla.ts:22"}, "properties": {"repobilityId": "e0486858633ae188", "scanner": "scanner-primary", "fingerprint": "fab127f10f875305", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-240b8a7c620450f9", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/utils/type-guards/index.ts:116"}, "properties": {"repobilityId": "a263bb501fe88719", "scanner": "scanner-primary", "fingerprint": "240b8a7c620450f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3415902cd941cb0", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/components/MangaList.tsx:134"}, "properties": {"repobilityId": "0afb0b463fd716fb", "scanner": "scanner-primary", "fingerprint": "a3415902cd941cb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd7772378f46c15d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/NotificationsDropdown.tsx:184"}, "properties": {"repobilityId": "b5d4662e52f79a7a", "scanner": "scanner-primary", "fingerprint": "bd7772378f46c15d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6828a3f5bb98d1c9", "level": "none", "message": {"text": "Commented-code block (22 lines) in src/components/fixOutOfSyncChaptersButton.tsx:49"}, "properties": {"repobilityId": "82f65883ea1609bc", "scanner": "scanner-primary", "fingerprint": "6828a3f5bb98d1c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2c12961951d9bc2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/settings/FileOrganizationSettings.tsx:83"}, "properties": {"repobilityId": "6b6290c507edd2cb", "scanner": "scanner-primary", "fingerprint": "c2c12961951d9bc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1791f44fb6126c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/settings/backup/AutomaticBackupForm.tsx:10"}, "properties": {"repobilityId": "12f37b782a6648d8", "scanner": "scanner-primary", "fingerprint": "a1791f44fb6126c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beedb4118bc9ad60", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/manga/provider-bind-config.ts:52"}, "properties": {"repobilityId": "ba37f5b08d066326", "scanner": "scanner-primary", "fingerprint": "beedb4118bc9ad60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05bdd89b3298eddf", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/manga/ResponsiveMangaDetail.tsx:104"}, "properties": {"repobilityId": "3fd6bf34d6fe530d", "scanner": "scanner-primary", "fingerprint": "05bdd89b3298eddf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccbc78d8456bb5fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/manga/MobileChapterList.tsx:219"}, "properties": {"repobilityId": "9c2d76665726d390", "scanner": "scanner-primary", "fingerprint": "ccbc78d8456bb5fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a4abd9e6da9c041", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/manga/ResponsiveChapterList/hooks/useVolumeDataExtraction.ts:110"}, "properties": {"repobilityId": "1151d4c79c0920c4", "scanner": "scanner-primary", "fingerprint": "9a4abd9e6da9c041", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09c3115b3568583b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/library/utils/libraryUtils.ts:218"}, "properties": {"repobilityId": "966ca6fdc6e46100", "scanner": "scanner-primary", "fingerprint": "09c3115b3568583b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4526d2ec22623a30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/library/import/ImportLibraryWizard.tsx:97"}, "properties": {"repobilityId": "1954f96ea48f3bb4", "scanner": "scanner-primary", "fingerprint": "4526d2ec22623a30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-955a0be2d5d9d4ce", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/library/import-pipeline/utils/chapter-matching-utils.ts:252"}, "properties": {"repobilityId": "9d9a9e6c30850374", "scanner": "scanner-primary", "fingerprint": "955a0be2d5d9d4ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7be6d478d8b677d2", "level": "note", "message": {"text": "Legacy-named symbol `extractMetadataFromProviderLegacy` in src/components/library/import-pipeline/utils/chapter-matching-utils/metadata-extractors.ts:703"}, "properties": {"repobilityId": "09936732b1b187f4", "scanner": "scanner-primary", "fingerprint": "7be6d478d8b677d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-15482ace8590f932", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/library/import-pipeline/reducer/handlers.ts:331"}, "properties": {"repobilityId": "3def3bd0cca46692", "scanner": "scanner-primary", "fingerprint": "15482ace8590f932", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fd6b259901c4373", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/library/import-pipeline/hooks/useDetectMatch/index.ts:91"}, "properties": {"repobilityId": "20a56e39900fd5ee", "scanner": "scanner-primary", "fingerprint": "1fd6b259901c4373", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8ed01fb133a04a0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/library/import-pipeline/hooks/useDetectMatch/helpers.ts:265"}, "properties": {"repobilityId": "728d858eebc631fd", "scanner": "scanner-primary", "fingerprint": "b8ed01fb133a04a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a2f7abf3d22c916", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/searchStep/hooks/useMangaSelection.ts:124"}, "properties": {"repobilityId": "bbcfcc9a2f53bcc8", "scanner": "scanner-primary", "fingerprint": "9a2f7abf3d22c916", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5995a26931e21649", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/wizard/basic-info-step/hooks/useQuickAdd.ts:206"}, "properties": {"repobilityId": "1fd517fb7f1ef7d0", "scanner": "scanner-primary", "fingerprint": "5995a26931e21649", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c6a2bb5e3844420", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/steps/wizard/volumes-chapters/hooks/useAutoFetch.ts:153"}, "properties": {"repobilityId": "9208643910ba3ed3", "scanner": "scanner-primary", "fingerprint": "1c6a2bb5e3844420", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9c74780680effbc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/services/modules/fandom-provider/index.ts:312"}, "properties": {"repobilityId": "eaaf19a11ccdfd9b", "scanner": "scanner-primary", "fingerprint": "f9c74780680effbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aeba529b6a568cfd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/addManga/services/modules/fandom-provider/comprehensive-parser.ts:5"}, "properties": {"repobilityId": "11064252adfb7606", "scanner": "scanner-primary", "fingerprint": "aeba529b6a568cfd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c00f53796bc1b49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/addManga/handlers/providers/comicvine-url-parser.ts:86"}, "properties": {"repobilityId": "cc2432f372dc62c7", "scanner": "scanner-primary", "fingerprint": "1c00f53796bc1b49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29a08f69291abcf9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/home/GenreSection.tsx:29"}, "properties": {"repobilityId": "4c0dbb0263e9468f", "scanner": "scanner-primary", "fingerprint": "29a08f69291abcf9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9655f589c4506138", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/volumeChapters/useVolumeStatistics.tsx:53"}, "properties": {"repobilityId": "4fad653c113ac854", "scanner": "scanner-primary", "fingerprint": "9655f589c4506138", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc47c295802acc5c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/volumeChapters/phantom-stub.ts:40"}, "properties": {"repobilityId": "ce88d9634c3c3126", "scanner": "scanner-primary", "fingerprint": "dc47c295802acc5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2aaf60d8d5e514eb", "level": "note", "message": {"text": "Legacy-named symbol `MetadataConfigLegacy` in src/components/system/plugins/MetadataProviders.tsx:57"}, "properties": {"repobilityId": "cfdab3cf311c585b", "scanner": "scanner-primary", "fingerprint": "2aaf60d8d5e514eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-90bf18a0301b2698", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/jobs/CancelMenu.tsx:32"}, "properties": {"repobilityId": "35e254388f5af593", "scanner": "scanner-primary", "fingerprint": "90bf18a0301b2698", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a21aac806f9bef81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api-client.ts:130"}, "properties": {"repobilityId": "f5306497b9ab32bc", "scanner": "scanner-primary", "fingerprint": "a21aac806f9bef81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48684b13273c8499", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/schemas/index.ts:11"}, "properties": {"repobilityId": "36bc3b3160c96db8", "scanner": "scanner-primary", "fingerprint": "48684b13273c8499", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9b7d1928c818d0e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/schemas/examples/anilist-typed-example.ts:37"}, "properties": {"repobilityId": "97e3b9225ecf5b16", "scanner": "scanner-primary", "fingerprint": "d9b7d1928c818d0e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c959cba3f24ca680", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api-docs.tsx:17"}, "properties": {"repobilityId": "21c32ca636bf3d11", "scanner": "scanner-primary", "fingerprint": "c959cba3f24ca680", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-855ab9e0ff8050c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api-playground.tsx:420"}, "properties": {"repobilityId": "c559614a6924e25f", "scanner": "scanner-primary", "fingerprint": "855ab9e0ff8050c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d37cbd9252804f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/prowlarr.ts:290"}, "properties": {"repobilityId": "e1a26dcbc9ec1214", "scanner": "scanner-primary", "fingerprint": "9d37cbd9252804f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-56ab7231c14f3c13", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/api/backup/upload.ts:115"}, "properties": {"repobilityId": "b620a1d7b073fe59", "scanner": "scanner-primary", "fingerprint": "56ab7231c14f3c13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-359941ee89ad6110", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/reader/page/utils/chapter-validation.ts:273"}, "properties": {"repobilityId": "4f122394ab0b1b70", "scanner": "scanner-primary", "fingerprint": "359941ee89ad6110", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-976781551366eb83", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useChapterPagination.ts:18"}, "properties": {"repobilityId": "99efc25349099843", "scanner": "scanner-primary", "fingerprint": "976781551366eb83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ea961ce783046d8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useUnifiedWebSocket.ts:553"}, "properties": {"repobilityId": "dfc1ef70f0346f25", "scanner": "scanner-primary", "fingerprint": "6ea961ce783046d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58b846c5ca372f5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useMetadataProviders.ts:116"}, "properties": {"repobilityId": "553af7f5317360dc", "scanner": "scanner-primary", "fingerprint": "58b846c5ca372f5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-253d170a0605498a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/hooks/manga/index.ts:559"}, "properties": {"repobilityId": "3ddd5ed8de4aca78", "scanner": "scanner-primary", "fingerprint": "253d170a0605498a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cf2f99b38dc038d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/manga/index.ts:222"}, "properties": {"repobilityId": "8fd4e49db5ea055c", "scanner": "scanner-primary", "fingerprint": "9cf2f99b38dc038d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd99d9ba3559ef8c", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/hooks/common/index.ts:9"}, "properties": {"repobilityId": "d229824cbe416347", "scanner": "scanner-primary", "fingerprint": "bd99d9ba3559ef8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2f2c570ea63cd56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useDownloadClientConfig/connection-tester.ts:95"}, "properties": {"repobilityId": "50749e00b0ca3704", "scanner": "scanner-primary", "fingerprint": "d2f2c570ea63cd56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a876c03d29760a8d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/hooks/jobs/useJobsPage.tsx:99"}, "properties": {"repobilityId": "da430423fd0fd4d3", "scanner": "scanner-primary", "fingerprint": "a876c03d29760a8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afcf1625e6c6f8cc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/startup/initializers/suwayomi-initializer.ts:29"}, "properties": {"repobilityId": "bd816a2d73adfffd", "scanner": "scanner-primary", "fingerprint": "afcf1625e6c6f8cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-501e772814af70e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/startup/initializers/schedulers-initializer.ts:36"}, "properties": {"repobilityId": "037d6783f3543c36", "scanner": "scanner-primary", "fingerprint": "501e772814af70e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f55dd33ef1a1cf7d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/startup/initializers/backup-initializer.ts:47"}, "properties": {"repobilityId": "916e773a0d761d3b", "scanner": "scanner-primary", "fingerprint": "f55dd33ef1a1cf7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bd9281bc485f2a5", "level": "note", "message": {"text": "Legacy-named symbol `extractMetadataFromInfoboxLegacy` in src/server/parsers/UnifiedMetadataParser.ts:195"}, "properties": {"repobilityId": "3e95c6c15da0bd79", "scanner": "scanner-primary", "fingerprint": "8bd9281bc485f2a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-771f73c67eace3ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/parsers/extractors/utils/index.ts:246"}, "properties": {"repobilityId": "84f8b4f6f741d12d", "scanner": "scanner-primary", "fingerprint": "771f73c67eace3ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0d2b2cda6798d9f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/config/feature-flags.ts:194"}, "properties": {"repobilityId": "fc59b31a54710a9b", "scanner": "scanner-primary", "fingerprint": "c0d2b2cda6798d9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e886ceff5a0cfdb0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/api/adapters/WebSocketApiAdapter.ts:189"}, "properties": {"repobilityId": "e2bf774c9e999420", "scanner": "scanner-primary", "fingerprint": "e886ceff5a0cfdb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-070e53529ffe36d5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/utils/system-memory.ts:5"}, "properties": {"repobilityId": "367c240b0f83e01e", "scanner": "scanner-primary", "fingerprint": "070e53529ffe36d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d099596522090e63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/integration/komga.ts:170"}, "properties": {"repobilityId": "b735b67d84fe5efe", "scanner": "scanner-primary", "fingerprint": "d099596522090e63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c5cb0a3038a6d18", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/integration/kavita.ts:150"}, "properties": {"repobilityId": "7b76643593469e33", "scanner": "scanner-primary", "fingerprint": "9c5cb0a3038a6d18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6fafd445802193ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/rate-limit/index.ts:34"}, "properties": {"repobilityId": "ed29d28e4b388513", "scanner": "scanner-primary", "fingerprint": "6fafd445802193ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ef5fb8ed568f047", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/utils/batch-query/utils.ts:55"}, "properties": {"repobilityId": "a3223efa078ab0a9", "scanner": "scanner-primary", "fingerprint": "1ef5fb8ed568f047", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7330d4f68f5891a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/cache/UnifiedCacheProvider/core.ts:311"}, "properties": {"repobilityId": "ef88a6ca4e763f1f", "scanner": "scanner-primary", "fingerprint": "7330d4f68f5891a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a82954fbcd5cc861", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/api.ts:370"}, "properties": {"repobilityId": "e46c6c790b35ab49", "scanner": "scanner-primary", "fingerprint": "a82954fbcd5cc861", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8861ee1af3363a40", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/suwayomi-v2.ts:238"}, "properties": {"repobilityId": "27943148dc33e973", "scanner": "scanner-primary", "fingerprint": "8861ee1af3363a40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-947ea6167eacef04", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/flaresolverr.ts:702"}, "properties": {"repobilityId": "7ac83cfdd0cced49", "scanner": "scanner-primary", "fingerprint": "947ea6167eacef04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66b9e43342d0310e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/trpc/routers/settings/config.ts:244"}, "properties": {"repobilityId": "f10647fb30c4cf5c", "scanner": "scanner-primary", "fingerprint": "66b9e43342d0310e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c5ce24bcc246f4a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/settings/backup.ts:72"}, "properties": {"repobilityId": "1c9b078ca02f5bdd", "scanner": "scanner-primary", "fingerprint": "2c5ce24bcc246f4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-797f3f7cc6b1ee64", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/downloadOperations.ts:728"}, "properties": {"repobilityId": "60a34b4a48dea037", "scanner": "scanner-primary", "fingerprint": "797f3f7cc6b1ee64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b2371a60f30af54", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/monitoringOperations.ts:182"}, "properties": {"repobilityId": "30155db3e89bea87", "scanner": "scanner-primary", "fingerprint": "3b2371a60f30af54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a348b3fb1db2641", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/providerOperations.ts:14"}, "properties": {"repobilityId": "a32bdb8778a98b78", "scanner": "scanner-primary", "fingerprint": "8a348b3fb1db2641", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f37f4da2366e0b7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/refresh/index.ts:93"}, "properties": {"repobilityId": "7d4ce3c2997c3eb6", "scanner": "scanner-primary", "fingerprint": "f37f4da2366e0b7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6b8012056df6c9b", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/server/trpc/routers/manga/metadataOperations/refresh/clear-auto-bindings.ts:268"}, "properties": {"repobilityId": "cfa4992b2f4f5e10", "scanner": "scanner-primary", "fingerprint": "c6b8012056df6c9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41db857907c277b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-chapter-detail-fetch.ts:79"}, "properties": {"repobilityId": "cc1e63c8af46019d", "scanner": "scanner-primary", "fingerprint": "41db857907c277b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1ce42a4aeb49235", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/pipeline-orchestrator.ts:87"}, "properties": {"repobilityId": "ed1583e9e9a3bd86", "scanner": "scanner-primary", "fingerprint": "e1ce42a4aeb49235", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95bf4bed0894bc05", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/pipeline-orchestrator.ts:7"}, "properties": {"repobilityId": "d010ec9fd762fe73", "scanner": "scanner-primary", "fingerprint": "95bf4bed0894bc05", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9296185e79c851e3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch.ts:1"}, "properties": {"repobilityId": "bd6cbe8edab722f8", "scanner": "scanner-primary", "fingerprint": "9296185e79c851e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7231be0611f2742", "level": "note", "message": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-adaptive-bridge.ts:22"}, "properties": {"repobilityId": "020c4ae59239cfe1", "scanner": "scanner-primary", "fingerprint": "f7231be0611f2742", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8022196428e691af", "level": "note", "message": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery.ts:593"}, "properties": {"repobilityId": "9ebea5ddc58da9ce", "scanner": "scanner-primary", "fingerprint": "8022196428e691af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a6dd70f4ddbd41f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery.ts:77"}, "properties": {"repobilityId": "395b19e7e13117a9", "scanner": "scanner-primary", "fingerprint": "1a6dd70f4ddbd41f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94e5430323e480ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery.ts:374"}, "properties": {"repobilityId": "e3ec237964b26ee5", "scanner": "scanner-primary", "fingerprint": "94e5430323e480ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dab84e18441d7edc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-chapter-reconciliation.ts:90"}, "properties": {"repobilityId": "ac35259c7dcaa08e", "scanner": "scanner-primary", "fingerprint": "dab84e18441d7edc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4d43b9735370b3e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize.ts:92"}, "properties": {"repobilityId": "996733f4958234e3", "scanner": "scanner-primary", "fingerprint": "e4d43b9735370b3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3032d1ab91f27041", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-db-persistence.ts:197"}, "properties": {"repobilityId": "bea8cb604a92d82a", "scanner": "scanner-primary", "fingerprint": "3032d1ab91f27041", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61433cf27bcf65d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-data-assembly.ts:193"}, "properties": {"repobilityId": "594762dcafe1da4b", "scanner": "scanner-primary", "fingerprint": "61433cf27bcf65d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0538abb0b4c9b8d9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-cross-validation.ts:171"}, "properties": {"repobilityId": "585734e439346258", "scanner": "scanner-primary", "fingerprint": "0538abb0b4c9b8d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d69400e00c3841b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-mediawiki-fallback.ts:213"}, "properties": {"repobilityId": "641c3c0681c4ee24", "scanner": "scanner-primary", "fingerprint": "d69400e00c3841b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9957aa0b53ff6d8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/fandom-mediawiki-fallback.ts:369"}, "properties": {"repobilityId": "b49b2fab13674838", "scanner": "scanner-primary", "fingerprint": "9957aa0b53ff6d8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a129385e13af73ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-reconciliation.ts:402"}, "properties": {"repobilityId": "a625c1a642808291", "scanner": "scanner-primary", "fingerprint": "a129385e13af73ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1640e138153d33fd", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/chapter-title-fill.ts:66"}, "properties": {"repobilityId": "2cb668218d31013c", "scanner": "scanner-primary", "fingerprint": "1640e138153d33fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3a3c72790b1220a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/ensure-volume-file-rows.ts:106"}, "properties": {"repobilityId": "254e66efe9254b2c", "scanner": "scanner-primary", "fingerprint": "c3a3c72790b1220a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-769ddae82abd9212", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/volume-wikipedia-fill.ts:64"}, "properties": {"repobilityId": "b765980ce2c59c0e", "scanner": "scanner-primary", "fingerprint": "769ddae82abd9212", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d51400851f06cc38", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize/volume-id-backfill.ts:14"}, "properties": {"repobilityId": "07f80ef049c0ba31", "scanner": "scanner-primary", "fingerprint": "d51400851f06cc38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab1d6b2d74d9b1bb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-volume-cross-validation/consensus-resolver.ts:76"}, "properties": {"repobilityId": "68bd1ac1fd6d2736", "scanner": "scanner-primary", "fingerprint": "ab1d6b2d74d9b1bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-433e6fc5d56aa7f1", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/fandom-wiki-validator.ts:34"}, "properties": {"repobilityId": "efbe499a0c58a4c7", "scanner": "scanner-primary", "fingerprint": "433e6fc5d56aa7f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5ed1a882caf7dad", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/mediawiki-search-discovery.ts:78"}, "properties": {"repobilityId": "e42dc9823fa3ac31", "scanner": "scanner-primary", "fingerprint": "b5ed1a882caf7dad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1606180065002647", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/mediawiki-search-discovery.ts:104"}, "properties": {"repobilityId": "1d53295d122c487c", "scanner": "scanner-primary", "fingerprint": "1606180065002647", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ba31fcee4cb43e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/interwiki-discovery.ts:56"}, "properties": {"repobilityId": "6fb2d1641cf619f7", "scanner": "scanner-primary", "fingerprint": "4ba31fcee4cb43e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-392f5f44766e5ccc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/anilist-match.ts:42"}, "properties": {"repobilityId": "bcd1465fecf83122", "scanner": "scanner-primary", "fingerprint": "392f5f44766e5ccc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca66aa58eba6dc05", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangadex-matcher.ts:70"}, "properties": {"repobilityId": "f2c8e6dd3dcc32df", "scanner": "scanner-primary", "fingerprint": "ca66aa58eba6dc05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c1ee58803e46ffe", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangadex-aggregate.ts:72"}, "properties": {"repobilityId": "f34f359b5af54cab", "scanner": "scanner-primary", "fingerprint": "6c1ee58803e46ffe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd967cf339eff394", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/kitsu-fetch.ts:80"}, "properties": {"repobilityId": "0a7df3aec9792022", "scanner": "scanner-primary", "fingerprint": "bd967cf339eff394", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b31379e85773a1d", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangadex-chapter-list.ts:126"}, "properties": {"repobilityId": "fc56b51174ee7699", "scanner": "scanner-primary", "fingerprint": "5b31379e85773a1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f53682552c76c3f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/comicvine-volume-mapper.ts:142"}, "properties": {"repobilityId": "27fc77116ef0e8e2", "scanner": "scanner-primary", "fingerprint": "1f53682552c76c3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8df46869e79a838e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-provider-fetch/mangaupdates-fetch.ts:142"}, "properties": {"repobilityId": "72673da884da673e", "scanner": "scanner-primary", "fingerprint": "8df46869e79a838e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-257aeb6c1bf59b76", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/library/import-file-processor.ts:114"}, "properties": {"repobilityId": "23fde2fa1217fda3", "scanner": "scanner-primary", "fingerprint": "257aeb6c1bf59b76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-659eee0e9638e665", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/native-download/website-operations.ts:169"}, "properties": {"repobilityId": "75044d838c46be36", "scanner": "scanner-primary", "fingerprint": "659eee0e9638e665", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d44d17da2c9b4f8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/wanted/search.ts:78"}, "properties": {"repobilityId": "025f40cfe2a260aa", "scanner": "scanner-primary", "fingerprint": "d44d17da2c9b4f8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b00482eff38da8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/chapter/reassignment.ts:383"}, "properties": {"repobilityId": "8932b06f6c787bc4", "scanner": "scanner-primary", "fingerprint": "7b00482eff38da8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea5df7d58c144c3f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/annotation/helpers.ts:439"}, "properties": {"repobilityId": "b86f102545b95c60", "scanner": "scanner-primary", "fingerprint": "ea5df7d58c144c3f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bc62971c101f0ae4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/system/lifecycle.ts:110"}, "properties": {"repobilityId": "183527a34715eba1", "scanner": "scanner-primary", "fingerprint": "bc62971c101f0ae4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bc90066d0b39b70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/trpc/routers/metadata/metadata-comicvine/details-fetcher.ts:15"}, "properties": {"repobilityId": "1f7088bbae6bfebd", "scanner": "scanner-primary", "fingerprint": "9bc90066d0b39b70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a990badc72eef51", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trpc/routers/jobs/mutations.ts:47"}, "properties": {"repobilityId": "282f5101e5e9d53c", "scanner": "scanner-primary", "fingerprint": "8a990badc72eef51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-449b50ab8739b31e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/ml/features/dom-linearizer.ts:457"}, "properties": {"repobilityId": "9dae8171938c13ba", "scanner": "scanner-primary", "fingerprint": "449b50ab8739b31e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b83715eec751044e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/ml/training/agent-review/correction-generator.ts:313"}, "properties": {"repobilityId": "e849f3199c15505e", "scanner": "scanner-primary", "fingerprint": "b83715eec751044e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08bf333ff6471838", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/ml/training/bootstrap-labeler/index.ts:68"}, "properties": {"repobilityId": "44beb81ca5520f71", "scanner": "scanner-primary", "fingerprint": "08bf333ff6471838", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a11bfc7437665a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/pattern-propagation.ts:236"}, "properties": {"repobilityId": "18b93746aa2d1d23", "scanner": "scanner-primary", "fingerprint": "9a11bfc7437665a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46079be7a3fd783b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/ml/training/bootstrap-labeler/__tests__/source-rules.test.ts:1347"}, "properties": {"repobilityId": "92ad9220591a60a3", "scanner": "scanner-primary", "fingerprint": "46079be7a3fd783b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc2d4001925dac50", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/source-rules/fandom-rules.ts:786"}, "properties": {"repobilityId": "2317ee3801028bf8", "scanner": "scanner-primary", "fingerprint": "fc2d4001925dac50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2925ad25d73d652e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/ml/training/bootstrap-labeler/source-rules/wikipedia-rules.ts:141"}, "properties": {"repobilityId": "c7f3a66ee6e5e8e7", "scanner": "scanner-primary", "fingerprint": "2925ad25d73d652e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6988983f4f99c273", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/queue/PostgreSQLQueueWorker.ts:128"}, "properties": {"repobilityId": "5d2205c63f4d631e", "scanner": "scanner-primary", "fingerprint": "6988983f4f99c273", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb564f4b1854d58a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/queue/VolatileJobWorker.ts:174"}, "properties": {"repobilityId": "4b845abae63fc787", "scanner": "scanner-primary", "fingerprint": "fb564f4b1854d58a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e165801190280270", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/queue/queueManager.ts:138"}, "properties": {"repobilityId": "baedc95204e988b6", "scanner": "scanner-primary", "fingerprint": "e165801190280270", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e571f3f5089af594", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/queue/workers/releaseDetectionWorker.ts:442"}, "properties": {"repobilityId": "d3e624c311ab3bde", "scanner": "scanner-primary", "fingerprint": "e571f3f5089af594", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e31aa62ae3abe190", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/queue/workers/downloadMonitorWorker.ts:98"}, "properties": {"repobilityId": "96988b968e73d730", "scanner": "scanner-primary", "fingerprint": "e31aa62ae3abe190", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96b44e9b64e034c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/queue/modules/maintenance.ts:212"}, "properties": {"repobilityId": "ce423b4939070c83", "scanner": "scanner-primary", "fingerprint": "96b44e9b64e034c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-599a1da22f0a1ead", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/queue/handlers/mangadex-download.ts:88"}, "properties": {"repobilityId": "46e6af198df364d8", "scanner": "scanner-primary", "fingerprint": "599a1da22f0a1ead", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-530aed0a35c8da38", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/queue/handlers/index.ts:50"}, "properties": {"repobilityId": "7f0853b55e8e51c6", "scanner": "scanner-primary", "fingerprint": "530aed0a35c8da38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d8ae6b00c07ece6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/queue/handlers/library.ts:387"}, "properties": {"repobilityId": "a25472c4fc90c545", "scanner": "scanner-primary", "fingerprint": "7d8ae6b00c07ece6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0286bfd484e1a7f4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/mangadex/configService.ts:31"}, "properties": {"repobilityId": "de1a161cadd2a540", "scanner": "scanner-primary", "fingerprint": "0286bfd484e1a7f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bc7b5ba65babd60", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/services/library/indexerSearch/phase-indexer-search.ts:38"}, "properties": {"repobilityId": "5494426600086dbd", "scanner": "scanner-primary", "fingerprint": "3bc7b5ba65babd60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4391afc90bd7ec14", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/library/indexerSearch/adapters/prowlarr-adapter.ts:132"}, "properties": {"repobilityId": "7e46b0d7aba99738", "scanner": "scanner-primary", "fingerprint": "4391afc90bd7ec14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7426d5c87a33647", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/library/scanner/chapter-creator.ts:180"}, "properties": {"repobilityId": "e75d4b6916d887d3", "scanner": "scanner-primary", "fingerprint": "f7426d5c87a33647", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-762f6e1d4a45f452", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/library/scanner/duplicate-checker.ts:44"}, "properties": {"repobilityId": "c017cee7e89c1c7d", "scanner": "scanner-primary", "fingerprint": "762f6e1d4a45f452", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90ebaed5fcb0e674", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/library/scanner/chapter-creator/auto-matcher.ts:174"}, "properties": {"repobilityId": "94abe3e18b8f7c2f", "scanner": "scanner-primary", "fingerprint": "90ebaed5fcb0e674", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bcec8672b6e6751", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/library/scanner/chapter-creator/update-helpers.ts:75"}, "properties": {"repobilityId": "c0d07fe774ec8491", "scanner": "scanner-primary", "fingerprint": "2bcec8672b6e6751", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f511febb90ef46b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/library/releaseDispatcher/chapter-selection.ts:83"}, "properties": {"repobilityId": "d1631fcb508af756", "scanner": "scanner-primary", "fingerprint": "f511febb90ef46b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eddd13b86d610ff2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/library/releaseDispatcher/dispatch.ts:157"}, "properties": {"repobilityId": "0e5708191ad54f7d", "scanner": "scanner-primary", "fingerprint": "eddd13b86d610ff2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d40554cc2dec6bc6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/getcomics/hosts/download-utils.ts:107"}, "properties": {"repobilityId": "5dcd1cfc428935b2", "scanner": "scanner-primary", "fingerprint": "d40554cc2dec6bc6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e6b50f33ba79d7b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/notifications/notify.ts:92"}, "properties": {"repobilityId": "1ef767588c48dac5", "scanner": "scanner-primary", "fingerprint": "6e6b50f33ba79d7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4775fc307ad74d40", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/notifications/adapters/discordAdapter.ts:123"}, "properties": {"repobilityId": "16aaed9b11d7227f", "scanner": "scanner-primary", "fingerprint": "4775fc307ad74d40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98a932beb0d238e7", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/services/notifications/factory/notificationFactory.ts:249"}, "properties": {"repobilityId": "630d0fe564f21d9f", "scanner": "scanner-primary", "fingerprint": "98a932beb0d238e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-232d58c4d64e86c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/downloads/ChapterFileManager.ts:135"}, "properties": {"repobilityId": "4ad85275270d1aad", "scanner": "scanner-primary", "fingerprint": "232d58c4d64e86c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78d00fecf2c550c0", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/server/services/native-download/download-manager.ts:107"}, "properties": {"repobilityId": "0fdca705b6e8bcaf", "scanner": "scanner-primary", "fingerprint": "78d00fecf2c550c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af1ddcd6cfea9f49", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/events/cleanupTask.ts:75"}, "properties": {"repobilityId": "a6450e1c9b70964d", "scanner": "scanner-primary", "fingerprint": "af1ddcd6cfea9f49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4c29dee2e2aa269", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/singleton.ts:34"}, "properties": {"repobilityId": "afda3f29bc3c0a8f", "scanner": "scanner-primary", "fingerprint": "c4c29dee2e2aa269", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3ab4f745eaf2c19a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/index.ts:16"}, "properties": {"repobilityId": "502c4742557104c0", "scanner": "scanner-primary", "fingerprint": "3ab4f745eaf2c19a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e6ae95a597673e29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/flaresolverr/flareSolverrClient/index.ts:306"}, "properties": {"repobilityId": "5a6cad19e4f87825", "scanner": "scanner-primary", "fingerprint": "e6ae95a597673e29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58d82b1a98d3dd09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/shared/protectedFetch.ts:212"}, "properties": {"repobilityId": "295983be81980e9b", "scanner": "scanner-primary", "fingerprint": "58d82b1a98d3dd09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f4e5fb7ffd7a1d53", "level": "note", "message": {"text": "Legacy-named symbol `nightly_backup` in src/server/services/backup/scheduling.ts:32"}, "properties": {"repobilityId": "2ed81f954b9ef887", "scanner": "scanner-primary", "fingerprint": "f4e5fb7ffd7a1d53", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-25cb9e6c4b369abd", "level": "note", "message": {"text": "Legacy-named symbol `temp_config_backup` in src/server/services/backup/utils.ts:229"}, "properties": {"repobilityId": "218e4a635b3436b4", "scanner": "scanner-primary", "fingerprint": "25cb9e6c4b369abd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a5f85fea472ce7db", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/backup/utils.ts:215"}, "properties": {"repobilityId": "16a9d2e3e93510d0", "scanner": "scanner-primary", "fingerprint": "a5f85fea472ce7db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91a7685d2bbf862c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/backup/restore.ts:38"}, "properties": {"repobilityId": "8506134804a3ce9e", "scanner": "scanner-primary", "fingerprint": "91a7685d2bbf862c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9339b00849d11ff8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/backup/backup-operations.ts:107"}, "properties": {"repobilityId": "51a1adfde2fa2229", "scanner": "scanner-primary", "fingerprint": "9339b00849d11ff8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59a73d143860d724", "level": "note", "message": {"text": "Legacy-named symbol `daily_backup` in src/server/services/backup/backup-creation.ts:550"}, "properties": {"repobilityId": "4f99a50b1ce2bafa", "scanner": "scanner-primary", "fingerprint": "59a73d143860d724", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-08c06e3c95156c0a", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/server/services/backup/backup-creation.ts:570"}, "properties": {"repobilityId": "b6a608a20bb36f00", "scanner": "scanner-primary", "fingerprint": "08c06e3c95156c0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5614e3b87132a67", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/release-blocklist/blocklist-manager.ts:75"}, "properties": {"repobilityId": "2ebe041c6244f150", "scanner": "scanner-primary", "fingerprint": "f5614e3b87132a67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fbc0d676302386e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/release-blocklist/alternatives-finder.ts:107"}, "properties": {"repobilityId": "f4e2b5fe12a5cf99", "scanner": "scanner-primary", "fingerprint": "9fbc0d676302386e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d69e64ec8c9dc16", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/release-blocklist/__tests__/blocklist-manager.test.ts:72"}, "properties": {"repobilityId": "bbf21c8c39861ef7", "scanner": "scanner-primary", "fingerprint": "5d69e64ec8c9dc16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5663507c48f4989", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/services/comicvine/title-variants.ts:19"}, "properties": {"repobilityId": "f00f0bd76acede05", "scanner": "scanner-primary", "fingerprint": "b5663507c48f4989", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-861fbf0bdca382ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/comicvine/constants.ts:177"}, "properties": {"repobilityId": "b0c637eadbd05d63", "scanner": "scanner-primary", "fingerprint": "861fbf0bdca382ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76c82fc7fd489f2e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/comicvine/scrapingService.ts:41"}, "properties": {"repobilityId": "38b6ac034f6ef486", "scanner": "scanner-primary", "fingerprint": "76c82fc7fd489f2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d98b4ba98f560cb6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/services/comicvine/language-detection/content-detection.ts:54"}, "properties": {"repobilityId": "8f4df139ff449cd0", "scanner": "scanner-primary", "fingerprint": "d98b4ba98f560cb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74b9087b181a68f8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/comicvine/language-detection/types.ts:21"}, "properties": {"repobilityId": "15754fea0c264762", "scanner": "scanner-primary", "fingerprint": "74b9087b181a68f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c179b28d2a81b59c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/comicvine/comicvine/http-client.ts:427"}, "properties": {"repobilityId": "c160942ae1787243", "scanner": "scanner-primary", "fingerprint": "c179b28d2a81b59c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9902344ed1a6e2cb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/comicvine/modules/__tests__/integration.test.ts:26"}, "properties": {"repobilityId": "73463495a53f3809", "scanner": "scanner-primary", "fingerprint": "9902344ed1a6e2cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5971b8e7b3966241", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/services/comicvine/discovery/language-aware-matcher.ts:444"}, "properties": {"repobilityId": "283b2d5af8006c5b", "scanner": "scanner-primary", "fingerprint": "5971b8e7b3966241", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae84739ddd24f2dc", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/services/search/providers/AniListProvider.ts:51"}, "properties": {"repobilityId": "808cafb377a48412", "scanner": "scanner-primary", "fingerprint": "ae84739ddd24f2dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54aaaa34435bc360", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/search/providers/search-result-validator/anilist-validator.ts:364"}, "properties": {"repobilityId": "80390d83ecb5bccb", "scanner": "scanner-primary", "fingerprint": "54aaaa34435bc360", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-619fb72f8ee7bd26", "level": "note", "message": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/services/auto-labeling/parser-bridge/index.ts:83"}, "properties": {"repobilityId": "1be38f352d0412d8", "scanner": "scanner-primary", "fingerprint": "619fb72f8ee7bd26", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-faceebe12ae514b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/wikipedia/wikipedia-extractor/volume-table-extraction.ts:135"}, "properties": {"repobilityId": "d575d8de9c0671ca", "scanner": "scanner-primary", "fingerprint": "faceebe12ae514b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77af93ff9452b89e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/wikipedia/wikipedia/manga-extractor/index.ts:1270"}, "properties": {"repobilityId": "f7bc3222bc7e6386", "scanner": "scanner-primary", "fingerprint": "77af93ff9452b89e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aab1db877ab30379", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/services/wikipedia/wikipedia/manga-extractor/best-match-finder-helpers.ts:160"}, "properties": {"repobilityId": "847e7ea01ced027c", "scanner": "scanner-primary", "fingerprint": "aab1db877ab30379", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c936bebac7c5d8e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/jikan/client.ts:109"}, "properties": {"repobilityId": "57820ebec0bdecdf", "scanner": "scanner-primary", "fingerprint": "c936bebac7c5d8e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a70ac01e97eb19e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/logging/LogRetentionService.ts:325"}, "properties": {"repobilityId": "ed198bf6f4e7fd06", "scanner": "scanner-primary", "fingerprint": "8a70ac01e97eb19e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d15b89ffee6e7ead", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/metadata/metadata-persister.ts:216"}, "properties": {"repobilityId": "63ee30685f09fc64", "scanner": "scanner-primary", "fingerprint": "d15b89ffee6e7ead", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-883d8e973fed28f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/metadata/scrapers/WebScraper.ts:74"}, "properties": {"repobilityId": "6fe523dbfb2e0e48", "scanner": "scanner-primary", "fingerprint": "883d8e973fed28f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c57d722bdd7ea18", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/metadata/binding-validators/wiki-freshness-audit.ts:44"}, "properties": {"repobilityId": "45f599e900809649", "scanner": "scanner-primary", "fingerprint": "7c57d722bdd7ea18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09b71caffcdf70e1", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/services/metadata/selectors/select-categorical.ts:82"}, "properties": {"repobilityId": "24cc6a2639e777ac", "scanner": "scanner-primary", "fingerprint": "09b71caffcdf70e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c320d68e64f0759", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/metadata/provider-matching/core-matching.ts:485"}, "properties": {"repobilityId": "5ef6ed4ebf12ad73", "scanner": "scanner-primary", "fingerprint": "9c320d68e64f0759", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7beaa33fc6e4a34", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/prowlarr/mangaSearch.ts:70"}, "properties": {"repobilityId": "ba78613d46634c55", "scanner": "scanner-primary", "fingerprint": "d7beaa33fc6e4a34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e655c3ab0530bc7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/prowlarr/prowlarr-scoring.ts:40"}, "properties": {"repobilityId": "b1bdc48342dc495d", "scanner": "scanner-primary", "fingerprint": "e655c3ab0530bc7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b571074758c2250", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/services/prowlarr/relevance-gate.ts:80"}, "properties": {"repobilityId": "f45cb9ab9224da3a", "scanner": "scanner-primary", "fingerprint": "7b571074758c2250", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a21c281bea5ca40c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/completeness/manga-completeness.ts:159"}, "properties": {"repobilityId": "8558f339c21165e3", "scanner": "scanner-primary", "fingerprint": "a21c281bea5ca40c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccff2b66c1758d9f", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in src/server/services/packImport/deduplication.ts:244"}, "properties": {"repobilityId": "a7dc61d13c7a23b2", "scanner": "scanner-primary", "fingerprint": "ccff2b66c1758d9f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1eaf7388729ed092", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/services/packImport/chapter-organizer.ts:58"}, "properties": {"repobilityId": "13b377a63311b763", "scanner": "scanner-primary", "fingerprint": "1eaf7388729ed092", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-012a8ba36aa3f61d", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/server/services/packImport/file-scanner.ts:63"}, "properties": {"repobilityId": "4d7e7ddcbfdd17aa", "scanner": "scanner-primary", "fingerprint": "012a8ba36aa3f61d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ee597e2d9c150e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/packImport/packImportService.ts:302"}, "properties": {"repobilityId": "6d044d5c5632a105", "scanner": "scanner-primary", "fingerprint": "2ee597e2d9c150e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a5f47e492550199", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/packImport/library-scanner.ts:227"}, "properties": {"repobilityId": "1b78a3e451c30ca2", "scanner": "scanner-primary", "fingerprint": "7a5f47e492550199", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e817a9886d2e3f76", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/packImport/chapter-linker.ts:295"}, "properties": {"repobilityId": "6484ca4b6ee46ea0", "scanner": "scanner-primary", "fingerprint": "e817a9886d2e3f76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4dcc2ffd587500d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/services/download/downloadManager/download-manager.ts:200"}, "properties": {"repobilityId": "32049162b8bd6c33", "scanner": "scanner-primary", "fingerprint": "b4dcc2ffd587500d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-247b2f4094729f8d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/services/download/downloadManager/torrent-health.ts:276"}, "properties": {"repobilityId": "2f27d4241d4868a8", "scanner": "scanner-primary", "fingerprint": "247b2f4094729f8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12094b851f81c9bc", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/services/download/retry/failure-detector.ts:78"}, "properties": {"repobilityId": "36b434b41111cddc", "scanner": "scanner-primary", "fingerprint": "12094b851f81c9bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38d6cee8108ea5a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/download/retry/retry-service.ts:105"}, "properties": {"repobilityId": "a2399e4762447ecc", "scanner": "scanner-primary", "fingerprint": "38d6cee8108ea5a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b565d1c9a2dc7e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/download/download-monitor/chapter-manager.ts:322"}, "properties": {"repobilityId": "ae4a0f9a5a7961af", "scanner": "scanner-primary", "fingerprint": "7b565d1c9a2dc7e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f17f70bbc1a8a8f7", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/server/services/download/download-monitor/pack-import-handler.ts:390"}, "properties": {"repobilityId": "49408a1d4f95e9b1", "scanner": "scanner-primary", "fingerprint": "f17f70bbc1a8a8f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57c5b3c7d306fad4", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/server/services/download/clients/nzbgetClient.ts:209"}, "properties": {"repobilityId": "31b7a177e63c98bc", "scanner": "scanner-primary", "fingerprint": "57c5b3c7d306fad4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-445d5673e53560e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/download/clients/nzbgetClient.ts:103"}, "properties": {"repobilityId": "1a7901c54bff4471", "scanner": "scanner-primary", "fingerprint": "445d5673e53560e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bdc6a470ffb0b1a0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/download/clients/deluge/rpc-client.ts:262"}, "properties": {"repobilityId": "5b90bd49b89b3772", "scanner": "scanner-primary", "fingerprint": "bdc6a470ffb0b1a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20dd244f774525aa", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/download/fileImporter/file-operations.ts:230"}, "properties": {"repobilityId": "3c77d93a910f46df", "scanner": "scanner-primary", "fingerprint": "20dd244f774525aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc3c386c63953db4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/anilist/client.ts:158"}, "properties": {"repobilityId": "b44abc4bdeaaabad", "scanner": "scanner-primary", "fingerprint": "cc3c386c63953db4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-776bc0bfde882d3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/suwayomi/service.ts:431"}, "properties": {"repobilityId": "f060fb2642779e72", "scanner": "scanner-primary", "fingerprint": "776bc0bfde882d3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0211b47e12b58f33", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/services/suwayomi/suwayomi-service/lifecycle-manager.ts:108"}, "properties": {"repobilityId": "69040efee6adfb16", "scanner": "scanner-primary", "fingerprint": "0211b47e12b58f33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d70bfcc665d96dd7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/services/conversion/auto-convert-trigger.ts:92"}, "properties": {"repobilityId": "6d44ebd63b77e1ca", "scanner": "scanner-primary", "fingerprint": "d70bfcc665d96dd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ce6eea2640d4eca", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/services/conversion/FormatConversionService/job-execution.ts:321"}, "properties": {"repobilityId": "568044f8392d14e5", "scanner": "scanner-primary", "fingerprint": "6ce6eea2640d4eca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3387c740b37c6c54", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/conversion/utils/kindle-extractor.ts:84"}, "properties": {"repobilityId": "247b1ff622a52686", "scanner": "scanner-primary", "fingerprint": "3387c740b37c6c54", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-18d83b9bd356d1e5", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/server/services/fandom/types/popular-wikis.ts:16"}, "properties": {"repobilityId": "7b083d930f54c6b2", "scanner": "scanner-primary", "fingerprint": "18d83b9bd356d1e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94f97730f77b6df4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/fandom/chapter-detail/batch-processor.ts:222"}, "properties": {"repobilityId": "fbc657084a84f22b", "scanner": "scanner-primary", "fingerprint": "94f97730f77b6df4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49d1eab5e43ec297", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/url-discoverer.ts:72"}, "properties": {"repobilityId": "83a84a139fb87310", "scanner": "scanner-primary", "fingerprint": "49d1eab5e43ec297", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a1e242f1675efe97", "level": "note", "message": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/services/fandom/adaptive/orchestrator.ts:2323"}, "properties": {"repobilityId": "268a00bbdb9cebf2", "scanner": "scanner-primary", "fingerprint": "a1e242f1675efe97", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bf214892d93357db", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/fandom/adaptive/orchestrator.ts:393"}, "properties": {"repobilityId": "c54d9ab6165cfc28", "scanner": "scanner-primary", "fingerprint": "bf214892d93357db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9825c37d137b162a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/orchestrator.ts:1010"}, "properties": {"repobilityId": "b8cbcad174da240c", "scanner": "scanner-primary", "fingerprint": "9825c37d137b162a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e6e64cbbbfca4c1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/services/fandom/adaptive/per-volume-iterator.ts:1"}, "properties": {"repobilityId": "0943e9f779c00ec0", "scanner": "scanner-primary", "fingerprint": "e6e64cbbbfca4c1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58803ce7c320f48f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/series-page-resolver.ts:109"}, "properties": {"repobilityId": "de9e46eb6fb38cf2", "scanner": "scanner-primary", "fingerprint": "58803ce7c320f48f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1adfcbf36477f3f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/services/fandom/adaptive/category-chapter-discovery.ts:149"}, "properties": {"repobilityId": "460ab2a6ad076a6a", "scanner": "scanner-primary", "fingerprint": "b1adfcbf36477f3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4491ce4cdd925d61", "level": "note", "message": {"text": "Legacy-named symbol `fallbackToLegacy` in src/server/services/fandom/adaptive/types.ts:432"}, "properties": {"repobilityId": "63d18e7fb66dcd42", "scanner": "scanner-primary", "fingerprint": "4491ce4cdd925d61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7dd3befd1061fcde", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/fandom/adaptive/types.ts:532"}, "properties": {"repobilityId": "1bdd4bafdf68560c", "scanner": "scanner-primary", "fingerprint": "7dd3befd1061fcde", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-132d90a192ea1932", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/services/calendar/providers/AniListCalendarProvider.ts:95"}, "properties": {"repobilityId": "dd63848978b61747", "scanner": "scanner-primary", "fingerprint": "132d90a192ea1932", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb63b4f4d38797da", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/styles/ColorSchemeProvider.tsx:407"}, "properties": {"repobilityId": "9520df46b11c23a4", "scanner": "scanner-primary", "fingerprint": "bb63b4f4d38797da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cca5e042c84a0074", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/annotation/editor/page-view/helpers.ts:129"}, "properties": {"repobilityId": "b63c01d619ecc91b", "scanner": "scanner-primary", "fingerprint": "cca5e042c84a0074", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32824c1c50db24ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/sdk/kaizoku-api-sdk/client-base.ts:349"}, "properties": {"repobilityId": "39fa3b03903a0acc", "scanner": "scanner-primary", "fingerprint": "32824c1c50db24ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0b5e7cb1208a7cd", "level": "note", "message": {"text": "13 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "2737b8666c1f7eeb", "scanner": "scanner-primary", "fingerprint": "b0b5e7cb1208a7cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2846d591197ee671", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "804a0b0079da27e9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-c970cbfb13858049", "level": "warning", "message": {"text": "Frontend route `/system/media` has no Link/navigate to it \u2014 src/pages/system/media.tsx"}, "properties": {"repobilityId": "30d1a3334570a3f7", "scanner": "scanner-primary", "fingerprint": "c970cbfb13858049", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4ea03376cf860e45", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}/api/v1/ws (server-production.js:129)"}, "properties": {"repobilityId": "a4b10e4e0ba725ed", "scanner": "scanner-primary", "fingerprint": "4ea03376cf860e45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce7c3a40cd17700d", "level": "error", "message": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-debug2.mjs:7)"}, "properties": {"repobilityId": "f78ff1c858a474ab", "scanner": "scanner-primary", "fingerprint": "ce7c3a40cd17700d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-9210083c79562545", "level": "error", "message": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-structure.mjs:7)"}, "properties": {"repobilityId": "41dc9a01ef65d241", "scanner": "scanner-primary", "fingerprint": "9210083c79562545", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-0481b09ae5864644", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3000/api/trpc/metadata.fetchEnhancedMangaMetadata (tests/integration/test-enhanced-fandom.mjs:12)"}, "properties": {"repobilityId": "4ede7fed332feb84", "scanner": "scanner-primary", "fingerprint": "0481b09ae5864644", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e64467f2be4da6a2", "level": "error", "message": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-fire-force-parser.js:7)"}, "properties": {"repobilityId": "11a87dfe90ab92ea", "scanner": "scanner-primary", "fingerprint": "e64467f2be4da6a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-98a6723fc7c7e5e1", "level": "error", "message": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-direct.mjs:8)"}, "properties": {"repobilityId": "6c3ffc666bfc73e8", "scanner": "scanner-primary", "fingerprint": "98a6723fc7c7e5e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-fd626dca4b67d3b2", "level": "error", "message": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (tests/integration/test-parser-debug.mjs:7)"}, "properties": {"repobilityId": "c2ec971baa864124", "scanner": "scanner-primary", "fingerprint": "fd626dca4b67d3b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6b97826c2203d196", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.parseEnhancedVolumes (tests/integration/test-complete-flow.mjs:8)"}, "properties": {"repobilityId": "b0e63f1ecfa099cc", "scanner": "scanner-primary", "fingerprint": "6b97826c2203d196", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e83deeea09032ce5", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:12)"}, "properties": {"repobilityId": "7a2348e425d72dfb", "scanner": "scanner-primary", "fingerprint": "e83deeea09032ce5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6882d56929c492e5", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:36)"}, "properties": {"repobilityId": "83f2af99f703dc1c", "scanner": "scanner-primary", "fingerprint": "6882d56929c492e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a90d1d8791f15fec", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:6789/jsonrpc (tests/integration/test-axios-auth.js:61)"}, "properties": {"repobilityId": "004032f5d001a581", "scanner": "scanner-primary", "fingerprint": "a90d1d8791f15fec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4b10c531a07e9677", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-flow.js:16)"}, "properties": {"repobilityId": "a1793e896f2e9b24", "scanner": "scanner-primary", "fingerprint": "4b10c531a07e9677", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89f75e86545b0780", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/search.searchManga (scripts/testing/test-comicvine-flow.js:54)"}, "properties": {"repobilityId": "c21f881fb1e83196", "scanner": "scanner-primary", "fingerprint": "89f75e86545b0780", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83798f0a36304482", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.mjs:20)"}, "properties": {"repobilityId": "1bc837f61f3b51ab", "scanner": "scanner-primary", "fingerprint": "83798f0a36304482", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-641b6ffdee7e519a", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.mjs:154)"}, "properties": {"repobilityId": "c91962a1df133617", "scanner": "scanner-primary", "fingerprint": "641b6ffdee7e519a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e818891aa280589d", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.js:20)"}, "properties": {"repobilityId": "49e04ea8117b06d0", "scanner": "scanner-primary", "fingerprint": "e818891aa280589d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b80bce61fbfc638", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/trpc/metadata.fetchComicvineVolumeDetails (scripts/testing/test-comicvine-api-data.js:154)"}, "properties": {"repobilityId": "8a617428b00f2d9d", "scanner": "scanner-primary", "fingerprint": "6b80bce61fbfc638", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59409b933f855f84", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/auth/callback/credentials (scripts/testing/test-shutdown.js:17)"}, "properties": {"repobilityId": "3949c87ddef293b6", "scanner": "scanner-primary", "fingerprint": "59409b933f855f84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e00bf5daabf1951", "level": "error", "message": {"text": "Dangling fetch: GET https://fire-force.fandom.com/wiki/List_of_Volumes (scripts/testing/test-improved-parser.mjs:7)"}, "properties": {"repobilityId": "a18ad36eca8142e2", "scanner": "scanner-primary", "fingerprint": "5e00bf5daabf1951", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79b8612e544f5a00", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest (scripts/utilities/install-suwayomi.mjs:109)"}, "properties": {"repobilityId": "8ea6a6929287fee9", "scanner": "scanner-primary", "fingerprint": "79b8612e544f5a00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a9aa6be00b0713bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/create (docs/eslint/no-unsafe-assignment/schemas/index.ts:42)"}, "properties": {"repobilityId": "96211714d97dfba3", "scanner": "scanner-primary", "fingerprint": "a9aa6be00b0713bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-edbd00a16a0dd55f", "level": "error", "message": {"text": "Dangling fetch: GET https://comicvine.gamespot.com/api/search?${params} (scripts/comicvine/test-id-discovery.ts:112)"}, "properties": {"repobilityId": "39e6926962bf6713", "scanner": "scanner-primary", "fingerprint": "edbd00a16a0dd55f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-971cb1dd0449dbd1", "level": "error", "message": {"text": "Dangling fetch: GET https://comicvine.gamespot.com/api/search?${params} (scripts/comicvine/test-comicvine-search.ts:31)"}, "properties": {"repobilityId": "2dedf48104448a6f", "scanner": "scanner-primary", "fingerprint": "971cb1dd0449dbd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fac72cde424ac133", "level": "error", "message": {"text": "Dangling fetch: GET /api/prowlarr (src/utils/prowlarrApi.ts:261)"}, "properties": {"repobilityId": "a7b1fcc34d3c60bf", "scanner": "scanner-primary", "fingerprint": "fac72cde424ac133", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25f84e2c87196593", "level": "error", "message": {"text": "Dangling fetch: POST /api/logs (src/utils/logger/browser-logger.ts:87)"}, "properties": {"repobilityId": "b2eac621f2f7fca9", "scanner": "scanner-primary", "fingerprint": "25f84e2c87196593", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf1e5ca3c18c433c", "level": "error", "message": {"text": "Dangling fetch: GET /docs/${documentPath} (src/components/common/DocumentModal.tsx:214)"}, "properties": {"repobilityId": "a91c0f63b6b85cb6", "scanner": "scanner-primary", "fingerprint": "bf1e5ca3c18c433c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2955d577a75b5b57", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/openapi.json (src/pages/api-docs.tsx:17)"}, "properties": {"repobilityId": "84ca18ba0bad2e2b", "scanner": "scanner-primary", "fingerprint": "2955d577a75b5b57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2422c50fc3b9068", "level": "error", "message": {"text": "Dangling fetch: GET /api/cover-layers/${mangaId}/manifest.json (src/hooks/useCoverLayerManifest.ts:37)"}, "properties": {"repobilityId": "f511edb560a614b4", "scanner": "scanner-primary", "fingerprint": "a2422c50fc3b9068", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-daddfeecac7a2376", "level": "error", "message": {"text": "Dangling fetch: GET /dashboard (src/hooks/useNavigation.ts:68)"}, "properties": {"repobilityId": "e7a1ff1a4a3e4cd4", "scanner": "scanner-primary", "fingerprint": "daddfeecac7a2376", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea0122fc6673162d", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/test-client (src/hooks/useDownloadClientConfig/connection-tester.ts:95)"}, "properties": {"repobilityId": "e62849ffd30b4b00", "scanner": "scanner-primary", "fingerprint": "ea0122fc6673162d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa8efd7c47813a39", "level": "error", "message": {"text": "Dangling fetch: GET /api/reader/chapter-info/${mangaId}/${chapterId} (src/hooks/reader/useReaderArchive.ts:129)"}, "properties": {"repobilityId": "5092452a430581a4", "scanner": "scanner-primary", "fingerprint": "fa8efd7c47813a39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf9d4869fb68de37", "level": "error", "message": {"text": "Dangling fetch: GET /api/reader/progress/${mangaId}/${chapterId} (src/hooks/reader/useReaderArchive.ts:153)"}, "properties": {"repobilityId": "bbbbadf5a63dc91d", "scanner": "scanner-primary", "fingerprint": "bf9d4869fb68de37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e95e189219198700", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${port}${proxyUrl} (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/phase-finalize.ts:727)"}, "properties": {"repobilityId": "63c347fa1f9982e9", "scanner": "scanner-primary", "fingerprint": "e95e189219198700", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8a55a55d3e589f3", "level": "error", "message": {"text": "Dangling fetch: GET https://${domain}.fandom.com/api.php (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/interwiki-discovery.ts:150)"}, "properties": {"repobilityId": "e35a396160117217", "scanner": "scanner-primary", "fingerprint": "b8a55a55d3e589f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2911bc40acab0386", "level": "error", "message": {"text": "Dangling fetch: GET https://${subdomain}.fandom.com/api.php?${params.toString()} (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:63)"}, "properties": {"repobilityId": "efa939353d081bb1", "scanner": "scanner-primary", "fingerprint": "2911bc40acab0386", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-805fb041f1b6975d", "level": "error", "message": {"text": "Dangling fetch: GET https://${subdomain}.fandom.com/api.php?${params.toString()} (src/server/trpc/routers/manga/metadataOperations/enrichment-pipeline/wiki-discovery/parent-page-validator.ts:135)"}, "properties": {"repobilityId": "3521bec9295c4296", "scanner": "scanner-primary", "fingerprint": "805fb041f1b6975d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11d85d9634912c99", "level": "error", "message": {"text": "Dangling fetch: GET https://example.com (src/server/services/flaresolverr/singleton.ts:34)"}, "properties": {"repobilityId": "ba9770cf9b51f679", "scanner": "scanner-primary", "fingerprint": "11d85d9634912c99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9dd8e8980a16c0a", "level": "error", "message": {"text": "Dangling fetch: GET https://comicvine.gamespot.com/... (src/server/services/flaresolverr/index.ts:16)"}, "properties": {"repobilityId": "b10817946514de44", "scanner": "scanner-primary", "fingerprint": "e9dd8e8980a16c0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7069b179008dc51b", "level": "error", "message": {"text": "Dangling fetch: POST https://anilist.co/api/v2/oauth/token (src/server/services/anilist/client.ts:408)"}, "properties": {"repobilityId": "53e42d2f79cb99ef", "scanner": "scanner-primary", "fingerprint": "7069b179008dc51b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c7cfd364b4e0cb47", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest (src/server/services/suwayomi/suwayomi-service/installer.ts:122)"}, "properties": {"repobilityId": "85b6670a0f3329eb", "scanner": "scanner-primary", "fingerprint": "c7cfd364b4e0cb47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-320ac7d635225727", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/Articles/AsSimpleJson (src/server/services/fandom/FandomV1API.ts:71)"}, "properties": {"repobilityId": "f9ea694f38e3a913", "scanner": "scanner-primary", "fingerprint": "320ac7d635225727", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e6487a1aae5b59cc", "level": "error", "message": {"text": "Dangling fetch: GET https://${domain}/api.php?${params.toString()} (src/server/services/fandom/adaptive/series-page-resolver.ts:109)"}, "properties": {"repobilityId": "c0972bfced2e47c3", "scanner": "scanner-primary", "fingerprint": "e6487a1aae5b59cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e8a050c55320ab1", "level": "error", "message": {"text": "Dangling fetch: GET https://${domain}/api.php?${params.toString()} (src/server/services/fandom/adaptive/series-page-resolver.ts:132)"}, "properties": {"repobilityId": "b38963cd2796b710", "scanner": "scanner-primary", "fingerprint": "0e8a050c55320ab1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41aa9e92da3f14ad", "level": "note", "message": {"text": "Unused endpoint: GET /users/:id"}, "properties": {"repobilityId": "0bec5807aefe13ae", "scanner": "scanner-primary", "fingerprint": "41aa9e92da3f14ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "7f08f27f3546bcf8", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cc9bb190b082702b", "level": "note", "message": {"text": "Unused endpoint: GET /admin/queues/stats"}, "properties": {"repobilityId": "9e491bc8544bd3a8", "scanner": "scanner-primary", "fingerprint": "cc9bb190b082702b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1aae6d128d34be8", "level": "note", "message": {"text": "Unused endpoint: POST /admin/queues/retry"}, "properties": {"repobilityId": "699d40e8a5d86a3a", "scanner": "scanner-primary", "fingerprint": "b1aae6d128d34be8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-deeee937f7668686", "level": "note", "message": {"text": "Unused endpoint: DELETE /admin/queues/cleanup/:days"}, "properties": {"repobilityId": "a70af82b7734a6d1", "scanner": "scanner-primary", "fingerprint": "deeee937f7668686", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b186e887b1e3877c", "level": "note", "message": {"text": "Unused endpoint: GET /data"}, "properties": {"repobilityId": "e071f33b6cfeb2c9", "scanner": "scanner-primary", "fingerprint": "b186e887b1e3877c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d16e4fa529c520e9", "level": "note", "message": {"text": "Unused endpoint: GET /search"}, "properties": {"repobilityId": "cbe1c961bd18e815", "scanner": "scanner-primary", "fingerprint": "d16e4fa529c520e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd4763e6e0fcaa39", "level": "note", "message": {"text": "Unused endpoint: GET /issues"}, "properties": {"repobilityId": "e1e40f1b5a05a407", "scanner": "scanner-primary", "fingerprint": "cd4763e6e0fcaa39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d388b5b75933d1a8", "level": "note", "message": {"text": "Unused endpoint: GET /characters"}, "properties": {"repobilityId": "4a075572e9fe8e49", "scanner": "scanner-primary", "fingerprint": "d388b5b75933d1a8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7dab92be61cedbb8", "level": "note", "message": {"text": "Unused endpoint: GET /people"}, "properties": {"repobilityId": "144597693f50da79", "scanner": "scanner-primary", "fingerprint": "7dab92be61cedbb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a436691337284d03", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/health"}, "properties": {"repobilityId": "a3a2e3690fb6e628", "scanner": "scanner-primary", "fingerprint": "a436691337284d03", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d2fddf4fd17a205", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/release/push"}, "properties": {"repobilityId": "6fd68672474f40f6", "scanner": "scanner-primary", "fingerprint": "9d2fddf4fd17a205", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}