{"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-8e77764470e4bf57", "name": "Stray `console.log` in TS/JS \u2014 src/contexts/AuthContext.jsx:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/contexts/AuthContext.jsx:96"}, "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-cab1e43e8d4af27a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/WikiEditor.jsx:382", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/WikiEditor.jsx:382"}, "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-f015cbe064af4fa7", "name": "Icon-only button without accessible name \u2014 src/components/Scans.jsx:79", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/Scans.jsx:79"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0e28bce40fcd0e0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/TheoryDetail.jsx:239", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/TheoryDetail.jsx:239"}, "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-13de703273f4028b", "name": "Icon-only button without accessible name \u2014 src/components/MessagesPage.jsx:453", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/MessagesPage.jsx:453"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f340d04c3def60f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/StaffPanel.jsx:314", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/StaffPanel.jsx:314"}, "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-5b099bcfcb2c5281", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/TheoryEditor.jsx:142", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/TheoryEditor.jsx:142"}, "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-1e91f2dcf1ea53f6", "name": "TODO/FIXME marker in shipping code \u2014 src/components/StaffSettings.jsx:364", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/StaffSettings.jsx:364"}, "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-3d00b6eb51baa62c", "name": "Icon-only button without accessible name \u2014 src/components/ScansPage.jsx:109", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/ScansPage.jsx:109"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e0a75d73b9118a8", "name": "Icon-only button without accessible name \u2014 src/components/AboutModal.jsx:13", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/AboutModal.jsx:13"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53b382a71ace1bf8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/WikiArticle.jsx:205", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/WikiArticle.jsx:205"}, "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-270b0d98087c8b09", "name": "Icon-only button without accessible name \u2014 src/components/feed/StoriesBar.jsx:233", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/feed/StoriesBar.jsx:233"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c768088bf07980db", "name": "Icon-only button without accessible name \u2014 src/components/feed/QuoteModal.jsx:12", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/feed/QuoteModal.jsx:12"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f26d3a9e42020afc", "name": "Stray `console.log` in TS/JS \u2014 src/components/animehub/HeroCinematic.jsx:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/animehub/HeroCinematic.jsx: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-282b288b92d69094", "name": "Icon-only button without accessible name \u2014 src/components/tournament/TournamentDuel.jsx:32", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/tournament/TournamentDuel.jsx:32"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9eff819ba120b7d7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/GlobalAnimations.jsx:5", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/GlobalAnimations.jsx:5"}, "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-597993931fde1c03", "name": "Stray `console.log` in TS/JS \u2014 src/lib/supabase.js:347", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/supabase.js:347"}, "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-594e8b780dbf2477", "name": "Stray `console.log` in TS/JS \u2014 src/lib/crew/crewHQQueries.js:280", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/crew/crewHQQueries.js: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-dbf96b297df808d6", "name": "Stray `console.log` in TS/JS \u2014 public/stockfish/stockfish-18-lite-single.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/stockfish/stockfish-18-lite-single.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-38a2434c28409d6d", "name": "Insecure pattern 'direct_innerhtml_assignment' in bramsq-hub.html:370", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in bramsq-hub.html:370"}, "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-6a5e53fd5068de2c", "name": "Insecure pattern 'cors_wildcard' in vite.config.js:24", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in vite.config.js:24"}, "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-b7322b9c756d7645", "name": "Insecure pattern 'direct_innerhtml_assignment' in fonds-openings-preview.html:399", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in fonds-openings-preview.html:399"}, "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-7957ff651eda79c1", "name": "Insecure pattern 'cors_wildcard' in api/bot-tools.js:68", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/bot-tools.js:68"}, "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-9bee0b545946efb0", "name": "Insecure pattern 'cors_wildcard' in api/shop-admin.js:21", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/shop-admin.js:21"}, "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-42958d723a1af178", "name": "Insecure pattern 'cors_wildcard' in api/subtitles.js:104", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/subtitles.js:104"}, "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-b211cd21cd281b2a", "name": "Insecure pattern 'cors_wildcard' in api/hls.js:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/hls.js:34"}, "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-462b2b1d75cc413e", "name": "Insecure pattern 'cors_wildcard' in api/moderate.js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/moderate.js:13"}, "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-7c57bf08497a89e9", "name": "Insecure pattern 'cors_wildcard' in api/ticket.js:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ticket.js:15"}, "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-299d2e076291b6c5", "name": "Insecure pattern 'cors_wildcard' in api/tierlists.js:256", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/tierlists.js:256"}, "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-715f7f7bb1b3a612", "name": "Insecure pattern 'node_child_process' in scripts/upload-op14-blindtest-r2.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-op14-blindtest-r2.mjs: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-8a9e5b77b738e3e0", "name": "Insecure pattern 'node_child_process' in scripts/remux-upload-kaiju-r2.mjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/remux-upload-kaiju-r2.mjs: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-ea95741fcdf3b8be", "name": "Insecure pattern 'node_child_process' in scripts/gen-anime-thumbs-mid-r2.mjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/gen-anime-thumbs-mid-r2.mjs: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-c1ec1fad0ba36e76", "name": "Insecure pattern 'node_child_process' in scripts/remux-upload-vivy-r2.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/remux-upload-vivy-r2.mjs: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-771beba868d6ae77", "name": "Insecure pattern 'node_child_process' in scripts/gen-mha-thumbs.mjs:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/gen-mha-thumbs.mjs: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-388df682c9de44c9", "name": "Insecure pattern 'node_child_process' in scripts/upload-openings-blindtest-r2.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-openings-blindtest-r2.mjs: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-fb3f993474d54984", "name": "Insecure pattern 'node_child_process' in scripts/extract-upload-violet-audio-jp-r2.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/extract-upload-violet-audio-jp-r2.mjs: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-68ed5eadde4e5909", "name": "Insecure pattern 'node_child_process' in scripts/upload-violet-ova-r2.mjs:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-violet-ova-r2.mjs: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-a51241963297d568", "name": "Insecure pattern 'node_child_process' in scripts/upload-endings-blindtest-r2.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-endings-blindtest-r2.mjs: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-b5774ec116d5b51b", "name": "Insecure pattern 'node_child_process' in scripts/fix-dbs-init-r2.mjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-dbs-init-r2.mjs: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-663fad4116898b4f", "name": "Insecure pattern 'node_child_process' in scripts/upload-openings-batch2-r2.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-openings-batch2-r2.mjs: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-a050dfe5a3ac3d7d", "name": "Insecure pattern 'node_child_process' in scripts/build-upload-mha-hls-r2.mjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/build-upload-mha-hls-r2.mjs: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-27b2716f7f99a3cc", "name": "Insecure pattern 'node_child_process' in scripts/upload-dbs-r2.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-dbs-r2.mjs: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-74481f7cca43cb85", "name": "Insecure pattern 'node_child_process' in scripts/fix-upload-aot-s4-r2.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-upload-aot-s4-r2.mjs: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-888c306f70115107", "name": "Insecure pattern 'node_child_process' in scripts/upload-violet-evergarden-r2.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-violet-evergarden-r2.mjs: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-d95708a75d056bc0", "name": "Insecure pattern 'node_child_process' in scripts/upload-endings-batch2-r2.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-endings-batch2-r2.mjs: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-2aada16fcc8ab1fb", "name": "Insecure pattern 'node_child_process' in scripts/upload-anime-hls-batch-r2.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/upload-anime-hls-batch-r2.mjs: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-60e0bdeade815f31", "name": "Insecure pattern 'node_child_process' in scripts/extract-upload-onepiece-subtitles-r2.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/extract-upload-onepiece-subtitles-r2.mjs: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-85d16860a032e5ec", "name": "Insecure pattern 'node_child_process' in scripts/generate-thumbnails-r2.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/generate-thumbnails-r2.mjs: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-7906acf422408ec8", "name": "Insecure pattern 'node_child_process' in scripts/detect-op-ed-chromaprint.mjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/detect-op-ed-chromaprint.mjs: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-9183c6c277b74965", "name": "Insecure pattern 'node_child_process' in scripts/fix-mha-inits.mjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/fix-mha-inits.mjs: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-49d609e510bd5cca", "name": "Insecure pattern 'node_child_process' in scripts/transcode-upload-onepiece-r2.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/transcode-upload-onepiece-r2.mjs: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-9bd5a0de84d6bf63", "name": "Insecure pattern 'node_child_process' in scripts/extract-upload-vivy-subtitles-r2.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/extract-upload-vivy-subtitles-r2.mjs: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-719f08fe045b7a05", "name": "Insecure pattern 'node_child_process' in scripts/build-upload-dbs-hls-r2.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/build-upload-dbs-hls-r2.mjs: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-7318bd9b13f52414", "name": "Insecure pattern 'node_child_process' in scripts/extract-mha-subs.mjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/extract-mha-subs.mjs: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-c206044d630fb662", "name": "Insecure pattern 'local_storage_auth_token' in src/contexts/AuthContext.jsx:104", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/contexts/AuthContext.jsx:104"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf80ae34140f27f0", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/WikiEditor.jsx:382", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/WikiEditor.jsx:382"}, "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-ea7192e734a1726f", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/TheoryDetail.jsx:239", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/TheoryDetail.jsx:239"}, "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-741e953d9836b595", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/StaffPanel.jsx:314", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/StaffPanel.jsx:314"}, "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-f6464a2433626545", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/TheoryEditor.jsx:142", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/TheoryEditor.jsx:142"}, "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-8a5a2d129e1e65f4", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/WikiArticle.jsx:205", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/WikiArticle.jsx:205"}, "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-29e2c0f5608862e8", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/GlobalAnimations.jsx:5", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/GlobalAnimations.jsx:5"}, "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-05fbc1cb13f96107", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/bramsq-premium-hub.html:991", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/bramsq-premium-hub.html:991"}, "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-3bd01862f4d93666", "name": "Very large file: api/bot-tools.js (1327 lines)", "shortDescription": {"text": "Very large file: api/bot-tools.js (1327 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-756a8d90ac40bd95", "name": "Very large file: src/components/UnifiedSidebar.jsx (940 lines)", "shortDescription": {"text": "Very large file: src/components/UnifiedSidebar.jsx (940 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-e9d60c58964cd10c", "name": "Very large file: src/components/BlindTestPage.jsx (1650 lines)", "shortDescription": {"text": "Very large file: src/components/BlindTestPage.jsx (1650 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-2a6785eac3cdc36d", "name": "Very large file: src/components/AnimeHub.jsx (2327 lines)", "shortDescription": {"text": "Very large file: src/components/AnimeHub.jsx (2327 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-118f8f139ec14e33", "name": "Very large file: src/components/MessagesPage.jsx (1218 lines)", "shortDescription": {"text": "Very large file: src/components/MessagesPage.jsx (1218 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-fed43efa8b9f8fad", "name": "Very large file: src/components/TournamentRoomPage.jsx (1089 lines)", "shortDescription": {"text": "Very large file: src/components/TournamentRoomPage.jsx (1089 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-4b98d147836b20ca", "name": "Very large file: src/components/VideoPlayer.jsx (1482 lines)", "shortDescription": {"text": "Very large file: src/components/VideoPlayer.jsx (1482 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-d57a7fcbe6b1e5ec", "name": "Very large file: src/components/TierListPage.jsx (2819 lines)", "shortDescription": {"text": "Very large file: src/components/TierListPage.jsx (2819 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-84a1d250d57df249", "name": "Very large file: src/components/crew-hq/CrewHQPage.jsx (1649 lines)", "shortDescription": {"text": "Very large file: src/components/crew-hq/CrewHQPage.jsx (1649 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-335b366db33c3f44", "name": "Very large file: src/lib/blindTest.js (1598 lines)", "shortDescription": {"text": "Very large file: src/lib/blindTest.js (1598 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": "10 test file(s) for 400 source file(s) (ratio 0.03). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 253 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 127 placeholder/mock markers across 51 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests, operator-readme. 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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-981e0ea6835e0e15", "name": "Commented-code block (5 lines) in tailwind.config.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in tailwind.config.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-08d97a78bd9fd901", "name": "Commented-code block (10 lines) in api/bot-tools.js:1", "shortDescription": {"text": "Commented-code block (10 lines) in api/bot-tools.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-412f605247e2926b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/bot-tools.js:251", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/bot-tools.js:251"}, "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-b2658b4605293d15", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/subtitles.js:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/subtitles.js:68"}, "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-4d734e673d74147a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/moderate.js:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/moderate.js:76"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9eb9672be5f75817", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/leaderboard.js:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/leaderboard.js: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-1b1157d4ca2f735b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/chat.js:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/chat.js:68"}, "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-3dd40f65c76e8c7c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-reco-feedback-ruflo.mjs:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-reco-feedback-ruflo.mjs:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2273080636e7dd62", "name": "Commented-code block (5 lines) in scripts/gen-mha-thumbs.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/gen-mha-thumbs.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-865f313964a00f8f", "name": "Commented-code block (5 lines) in src/main.jsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/main.jsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-056f1be9c5a42f82", "name": "Legacy-named symbol `brams_tierlist_draft_v2` in src/tierlist/storage.ts:3", "shortDescription": {"text": "Legacy-named symbol `brams_tierlist_draft_v2` in src/tierlist/storage.ts:3"}, "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-6e03bfabc5e372ff", "name": "Legacy-named symbol `brams_bg_muted_v1` in src/contexts/OpeningBgContext.jsx:26", "shortDescription": {"text": "Legacy-named symbol `brams_bg_muted_v1` in src/contexts/OpeningBgContext.jsx:26"}, "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-e194fe36f15ac566", "name": "Commented-code block (5 lines) in src/contexts/OpeningBgContext.jsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/contexts/OpeningBgContext.jsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d221f1ca079a460", "name": "Commented-code block (7 lines) in src/contexts/AuthContext.jsx:130", "shortDescription": {"text": "Commented-code block (7 lines) in src/contexts/AuthContext.jsx:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d68da6659d24895", "name": "Commented-code block (7 lines) in src/hooks/useInView.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useInView.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cc13feebd912bea", "name": "Commented-code block (5 lines) in src/components/MonUniversPage.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/MonUniversPage.jsx: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-68405efcb5aa8718", "name": "Commented-code block (5 lines) in src/components/IdleCinema.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/IdleCinema.jsx: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-e73c7427e85cd914", "name": "Commented-code block (5 lines) in src/components/FunFX.jsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/FunFX.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fcd9d501c2f89279", "name": "Commented-code block (7 lines) in src/components/AkinatorPage.jsx:85", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/AkinatorPage.jsx:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e9b872636b8cc37", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AnimeHub.jsx:1492", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AnimeHub.jsx:1492"}, "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-80c9ded07da256cd", "name": "Commented-code block (5 lines) in src/components/AnimeBackdrop.jsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/AnimeBackdrop.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-515197989965cfc7", "name": "Commented-code block (5 lines) in src/components/AuthModal.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/AuthModal.jsx: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-6e91214488656022", "name": "Commented-code block (5 lines) in src/components/WrappedPage.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/WrappedPage.jsx: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-05bf6aa6af697aa3", "name": "Legacy-named symbol `brams_ia_adv_v1` in src/components/AIChatWidget.jsx:9", "shortDescription": {"text": "Legacy-named symbol `brams_ia_adv_v1` in src/components/AIChatWidget.jsx:9"}, "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-ced30aeadb0102fb", "name": "Commented-code block (5 lines) in src/components/BerryShop.jsx:126", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/BerryShop.jsx: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-89d29e6ff3c1a3d6", "name": "Commented-code block (6 lines) in src/components/FeedPage.jsx:231", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/FeedPage.jsx:231"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b226f537312a3b50", "name": "Legacy-named symbol `brams_staff_settings_v1` in src/components/StaffSettings.jsx:19", "shortDescription": {"text": "Legacy-named symbol `brams_staff_settings_v1` in src/components/StaffSettings.jsx:19"}, "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-16de963421c70882", "name": "Commented-code block (7 lines) in src/components/StaffSettings.jsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/StaffSettings.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75f3a6ae9ade3986", "name": "Commented-code block (6 lines) in src/components/TrailShop.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/TrailShop.jsx: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-999e42651df8e0c8", "name": "Legacy-named symbol `brams_subtitle_style_v1` in src/components/VideoPlayer.jsx:65", "shortDescription": {"text": "Legacy-named symbol `brams_subtitle_style_v1` in src/components/VideoPlayer.jsx:65"}, "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-c0a5da62990c48bb", "name": "Commented-code block (5 lines) in src/components/VideoPlayer.jsx:353", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/VideoPlayer.jsx:353"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c03305ae134094d", "name": "Commented-code block (5 lines) in src/components/EpisodeWatch.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/EpisodeWatch.jsx: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-095ce61ed2102f33", "name": "Commented-code block (7 lines) in src/components/TierListPage.jsx:1135", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/TierListPage.jsx:1135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92a1a050dcd29d65", "name": "Legacy-named symbol `lb_period_v2` in src/components/Leaderboard.jsx:38", "shortDescription": {"text": "Legacy-named symbol `lb_period_v2` in src/components/Leaderboard.jsx:38"}, "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-579f98c4fb54c547", "name": "Commented-code block (5 lines) in src/components/GoldBackdrop.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/GoldBackdrop.jsx: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-6ea3c1e72628dd31", "name": "Commented-code block (8 lines) in src/components/social/OpeningBgMedia.jsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/social/OpeningBgMedia.jsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a3d475f041b2ed1", "name": "Commented-code block (5 lines) in src/components/social/MemberSuggestions.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/social/MemberSuggestions.jsx: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-42554cf9a99a27a1", "name": "Commented-code block (5 lines) in src/components/social/OpeningVisualizer.jsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/social/OpeningVisualizer.jsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8b258ea69cc31f5", "name": "Commented-code block (7 lines) in src/components/social/EquippedOpeningBackground.jsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/social/EquippedOpeningBackground.jsx: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-4a2296a5d9c67724", "name": "Commented-code block (5 lines) in src/components/profile/FollowListModal.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/profile/FollowListModal.jsx: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-a0835451283ba31c", "name": "Commented-code block (5 lines) in src/components/feed/VideoTrimmer.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/feed/VideoTrimmer.jsx: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-0b4bb5fbb392a967", "name": "Legacy-named symbol `AmbientLegacy` in src/components/animehub/AnimeHubV2.jsx:43", "shortDescription": {"text": "Legacy-named symbol `AmbientLegacy` in src/components/animehub/AnimeHubV2.jsx:43"}, "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-7ac2bd2de5c0e5e9", "name": "Commented-code block (6 lines) in src/components/animehub/AnimeHubV2.jsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/animehub/AnimeHubV2.jsx: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-4eb356cc83ba851c", "name": "Commented-code block (5 lines) in src/components/boutique/FondCard.jsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/boutique/FondCard.jsx: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-0199c160991accaa", "name": "Commented-code block (5 lines) in src/features/echecs/hooks/useHorloge.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/echecs/hooks/useHorloge.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-182ea7f6f7c15579", "name": "Commented-code block (7 lines) in src/features/echecs/components/Plateau.jsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/echecs/components/Plateau.jsx: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-bc517e294becd472", "name": "Commented-code block (5 lines) in src/features/echecs/modes/Matchmaking.jsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/echecs/modes/Matchmaking.jsx: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-dcf48e8ef07cfaf5", "name": "Commented-code block (6 lines) in src/lib/supabase.js:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/supabase.js:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c9740e4d7c5aacc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/supabase.js:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/supabase.js: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-12b38c726af23881", "name": "Commented-code block (9 lines) in src/lib/undercoverRooms.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/undercoverRooms.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-23942ccdcb691dc4", "name": "Commented-code block (5 lines) in src/lib/profile.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/profile.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-2558b549238f8573", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gifProvider.js:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gifProvider.js: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-102731acabd40ff1", "name": "Commented-code block (7 lines) in src/lib/supabaseRest.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/supabaseRest.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-81a87b5afce7a5ae", "name": "Commented-code block (6 lines) in src/lib/watchStats.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/watchStats.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-4038da7eb537991f", "name": "Commented-code block (5 lines) in src/lib/tournamentRooms.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tournamentRooms.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-1c4b43342541f4ec", "name": "Commented-code block (5 lines) in src/lib/hubLive.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hubLive.js:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4261d51e73becda1", "name": "Legacy-named symbol `brams_tier_studio_v1` in src/lib/tierlist-storage.js:50", "shortDescription": {"text": "Legacy-named symbol `brams_tier_studio_v1` in src/lib/tierlist-storage.js:50"}, "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-ae29efb190fe1802", "name": "Commented-code block (6 lines) in src/styles/typography.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/styles/typography.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-bb0dc99ff6b77c60", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/stockfish/stockfish-18-lite-single.js:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/stockfish/stockfish-18-lite-single.js:11"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9df86f6e7ec50ecc", "name": "Frontend route `/manga/:slug` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/manga/:slug` has no Link/navigate to it \u2014 src/App.jsx"}, "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-09323c5041d4bbca", "name": "Frontend route `/u/:discordId` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/u/:discordId` has no Link/navigate to it \u2014 src/App.jsx"}, "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-205df301e8e9b436", "name": "Frontend route `/fil/recherche` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/fil/recherche` has no Link/navigate to it \u2014 src/App.jsx"}, "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-b08b20068109417d", "name": "Frontend route `/fil/:postId` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/fil/:postId` has no Link/navigate to it \u2014 src/App.jsx"}, "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-8e26694ad219272a", "name": "Frontend route `/wrapped/:token` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/wrapped/:token` has no Link/navigate to it \u2014 src/App.jsx"}, "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-c60f2e85446770e5", "name": "Frontend route `/flashback/:token` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/flashback/:token` has no Link/navigate to it \u2014 src/App.jsx"}, "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-6dcaee18928a0992", "name": "Frontend route `/wiki/*` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/wiki/*` has no Link/navigate to it \u2014 src/App.jsx"}, "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-28fdb553eea861a7", "name": "Frontend route `/theories/*` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/theories/*` has no Link/navigate to it \u2014 src/App.jsx"}, "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-0999f2f67bbde393", "name": "Frontend route `/equipage/:crewId` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/equipage/:crewId` has no Link/navigate to it \u2014 src/App.jsx"}, "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-6cb41e19475f9781", "name": "Frontend route `/fruits-du-demon` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/fruits-du-demon` has no Link/navigate to it \u2014 src/App.jsx"}, "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-1d62bef8c0b5eb24", "name": "Frontend route `/shop` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/shop` has no Link/navigate to it \u2014 src/App.jsx"}, "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-a008c307fcec4f4a", "name": "Frontend route `/messages/:conversationId` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/messages/:conversationId` has no Link/navigate to it \u2014 src/App.jsx"}, "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-10c60a687aef8af2", "name": "Frontend route `/brams-traitor` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/brams-traitor` has no Link/navigate to it \u2014 src/App.jsx"}, "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-2046d6b5d5b509e5", "name": "Frontend route `/pirate-arena` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/pirate-arena` has no Link/navigate to it \u2014 src/App.jsx"}, "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-a2b2aef3dc21493f", "name": "Frontend route `/tournoi/ost` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/tournoi/ost` has no Link/navigate to it \u2014 src/App.jsx"}, "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-b4d45255f85dc039", "name": "Frontend route `/tournoi-ost` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/tournoi-ost` has no Link/navigate to it \u2014 src/App.jsx"}, "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-9590823ef7d32987", "name": "Frontend route `/tournoi/openings` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/tournoi/openings` has no Link/navigate to it \u2014 src/App.jsx"}, "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-c1da671c40fa2d31", "name": "Frontend route `/tournoi/opening` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/tournoi/opening` has no Link/navigate to it \u2014 src/App.jsx"}, "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-2e8a7386e06750b8", "name": "Frontend route `/tournoi/endings` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/tournoi/endings` has no Link/navigate to it \u2014 src/App.jsx"}, "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-37f7800dfa33b523", "name": "Frontend route `/tournoi/ending` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/tournoi/ending` has no Link/navigate to it \u2014 src/App.jsx"}, "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-ba533971d880489a", "name": "Frontend route `/profil-yonkou` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/profil-yonkou` has no Link/navigate to it \u2014 src/App.jsx"}, "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-1297ef009c2c6bc0", "name": "Frontend route `/*` has no Link/navigate to it \u2014 src/App.jsx", "shortDescription": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 src/App.jsx"}, "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-c35c42c60dc4f2b8", "name": "Dangling fetch: GET https://api.supabase.com/v1${path} (delete-storage.mjs:10)", "shortDescription": {"text": "Dangling fetch: GET https://api.supabase.com/v1${path} (delete-storage.mjs:10)"}, "fullDescription": {"text": "`delete-storage.mjs:10` calls `GET https://api.supabase.com/v1${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.supabase.com/v1/<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-9953f83074e90489", "name": "Dangling fetch: GET https://${REF}.supabase.co/storage/v1${path} (delete-storage.mjs:18)", "shortDescription": {"text": "Dangling fetch: GET https://${REF}.supabase.co/storage/v1${path} (delete-storage.mjs:18)"}, "fullDescription": {"text": "`delete-storage.mjs:18` calls `GET https://${REF}.supabase.co/storage/v1${path}` 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>.supabase.co/storage/v1/<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-bcc0fd833ae3bea7", "name": "Dangling fetch: GET https://api.stripe.com${path} (api/bot-tools.js:725)", "shortDescription": {"text": "Dangling fetch: GET https://api.stripe.com${path} (api/bot-tools.js:725)"}, "fullDescription": {"text": "`api/bot-tools.js:725` calls `GET https://api.stripe.com${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.stripe.com/<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-26b9e8804ea39858", "name": "Dangling fetch: GET /api/bot-tools?tool=turn-credentials (src/contexts/CallContext.jsx:26)", "shortDescription": {"text": "Dangling fetch: GET /api/bot-tools?tool=turn-credentials (src/contexts/CallContext.jsx:26)"}, "fullDescription": {"text": "`src/contexts/CallContext.jsx:26` calls `GET /api/bot-tools?tool=turn-credentials` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/bot-tools`\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-21a4b467ec47cc65", "name": "Dangling fetch: GET /api/discord-feed (src/components/UnifiedSidebar.jsx:487)", "shortDescription": {"text": "Dangling fetch: GET /api/discord-feed (src/components/UnifiedSidebar.jsx:487)"}, "fullDescription": {"text": "`src/components/UnifiedSidebar.jsx:487` calls `GET /api/discord-feed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord-feed`\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-1c9f818864487e76", "name": "Dangling fetch: GET /api/announcements (src/components/CalendarPage.jsx:129)", "shortDescription": {"text": "Dangling fetch: GET /api/announcements (src/components/CalendarPage.jsx:129)"}, "fullDescription": {"text": "`src/components/CalendarPage.jsx:129` calls `GET /api/announcements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/announcements`\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-b8d831bb1f4e87ab", "name": "Dangling fetch: GET /api/discord-feed (src/components/DiscordFeed.jsx:101)", "shortDescription": {"text": "Dangling fetch: GET /api/discord-feed (src/components/DiscordFeed.jsx:101)"}, "fullDescription": {"text": "`src/components/DiscordFeed.jsx:101` calls `GET /api/discord-feed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord-feed`\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-40a336b30985a83f", "name": "Dangling fetch: POST /api/akinator (src/components/AkinatorPage.jsx:655)", "shortDescription": {"text": "Dangling fetch: POST /api/akinator (src/components/AkinatorPage.jsx:655)"}, "fullDescription": {"text": "`src/components/AkinatorPage.jsx:655` calls `POST /api/akinator` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/akinator`\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-5d9dc7460e2dfa00", "name": "Dangling fetch: POST /api/chat (src/components/AnimeHub.jsx:1492)", "shortDescription": {"text": "Dangling fetch: POST /api/chat (src/components/AnimeHub.jsx:1492)"}, "fullDescription": {"text": "`src/components/AnimeHub.jsx:1492` calls `POST /api/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat`\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-ebb1b7cbbd04335c", "name": "Dangling fetch: POST /api/ticket (src/components/SupportTicket.jsx:27)", "shortDescription": {"text": "Dangling fetch: POST /api/ticket (src/components/SupportTicket.jsx:27)"}, "fullDescription": {"text": "`src/components/SupportTicket.jsx:27` calls `POST /api/ticket` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ticket`\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-418335a8adaef0ed", "name": "Dangling fetch: POST /api/chat (src/components/AIChat.jsx:57)", "shortDescription": {"text": "Dangling fetch: POST /api/chat (src/components/AIChat.jsx:57)"}, "fullDescription": {"text": "`src/components/AIChat.jsx:57` calls `POST /api/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat`\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-01599adacd079b23", "name": "Dangling fetch: POST /api/ticket (src/components/Contact.jsx:26)", "shortDescription": {"text": "Dangling fetch: POST /api/ticket (src/components/Contact.jsx:26)"}, "fullDescription": {"text": "`src/components/Contact.jsx:26` calls `POST /api/ticket` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ticket`\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-52ebb7eae81bc245", "name": "Dangling fetch: POST /api/tierlists?action=${action} (src/components/UndercoverPage.jsx:212)", "shortDescription": {"text": "Dangling fetch: POST /api/tierlists?action=${action} (src/components/UndercoverPage.jsx:212)"}, "fullDescription": {"text": "`src/components/UndercoverPage.jsx:212` calls `POST /api/tierlists?action=${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tierlists`\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-9ab7a532e9d5276c", "name": "Dangling fetch: POST /api/chat (src/components/AIChatWidget.jsx:62)", "shortDescription": {"text": "Dangling fetch: POST /api/chat (src/components/AIChatWidget.jsx:62)"}, "fullDescription": {"text": "`src/components/AIChatWidget.jsx:62` calls `POST /api/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat`\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-9951f5c90e30f0f6", "name": "Dangling fetch: GET /api/leaderboard?limit=500&period=week (src/components/AIChatWidget.jsx:335)", "shortDescription": {"text": "Dangling fetch: GET /api/leaderboard?limit=500&period=week (src/components/AIChatWidget.jsx:335)"}, "fullDescription": {"text": "`src/components/AIChatWidget.jsx:335` calls `GET /api/leaderboard?limit=500&period=week` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leaderboard`\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-2741866694267229", "name": "Dangling fetch: GET /api/stripe-revenue (src/components/StaffPanel.jsx:293)", "shortDescription": {"text": "Dangling fetch: GET /api/stripe-revenue (src/components/StaffPanel.jsx:293)"}, "fullDescription": {"text": "`src/components/StaffPanel.jsx:293` calls `GET /api/stripe-revenue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe-revenue`\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-4a65397a2bbf9d8d", "name": "Dangling fetch: POST /api/tierlists?action=reco_feedback (src/components/AIRecommendations.jsx:197)", "shortDescription": {"text": "Dangling fetch: POST /api/tierlists?action=reco_feedback (src/components/AIRecommendations.jsx:197)"}, "fullDescription": {"text": "`src/components/AIRecommendations.jsx:197` calls `POST /api/tierlists?action=reco_feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tierlists`\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-7b253bca623c9390", "name": "Dangling fetch: POST /api/r2-presign (src/components/BlobUploadPage.jsx:129)", "shortDescription": {"text": "Dangling fetch: POST /api/r2-presign (src/components/BlobUploadPage.jsx:129)"}, "fullDescription": {"text": "`src/components/BlobUploadPage.jsx:129` calls `POST /api/r2-presign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/r2-presign`\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-e061eb08a2c47970", "name": "Dangling fetch: GET /api/stats/new-members?period=7d&_=${Date.now()} (src/components/JoinCTA.jsx:24)", "shortDescription": {"text": "Dangling fetch: GET /api/stats/new-members?period=7d&_=${Date.now()} (src/components/JoinCTA.jsx:24)"}, "fullDescription": {"text": "`src/components/JoinCTA.jsx:24` calls `GET /api/stats/new-members?period=7d&_=${Date.now()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stats/new-members`\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-e4476a1d96c59e0f", "name": "Dangling fetch: POST /api/r2-presign (src/components/TierListPage.jsx:317)", "shortDescription": {"text": "Dangling fetch: POST /api/r2-presign (src/components/TierListPage.jsx:317)"}, "fullDescription": {"text": "`src/components/TierListPage.jsx:317` calls `POST /api/r2-presign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/r2-presign`\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-b3511591901e9252", "name": "Dangling fetch: POST /api/tierlists?action=autosave (src/components/TierListPage.jsx:1883)", "shortDescription": {"text": "Dangling fetch: POST /api/tierlists?action=autosave (src/components/TierListPage.jsx:1883)"}, "fullDescription": {"text": "`src/components/TierListPage.jsx:1883` calls `POST /api/tierlists?action=autosave` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tierlists`\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-49fafd090e65a397", "name": "Dangling fetch: POST /api/stripe-donate (src/lib/berryShop.js:401)", "shortDescription": {"text": "Dangling fetch: POST /api/stripe-donate (src/lib/berryShop.js:401)"}, "fullDescription": {"text": "`src/lib/berryShop.js:401` calls `POST /api/stripe-donate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe-donate`\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-2f1affbe4d2ca66d", "name": "Dangling fetch: POST /api/stripe-donate-complete (src/lib/berryShop.js:413)", "shortDescription": {"text": "Dangling fetch: POST /api/stripe-donate-complete (src/lib/berryShop.js:413)"}, "fullDescription": {"text": "`src/lib/berryShop.js:413` calls `POST /api/stripe-donate-complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe-donate-complete`\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-a45bd5dcd5dcb7e2", "name": "Dangling fetch: POST /api/shop-admin?action=upsert (src/lib/berryShop.js:519)", "shortDescription": {"text": "Dangling fetch: POST /api/shop-admin?action=upsert (src/lib/berryShop.js:519)"}, "fullDescription": {"text": "`src/lib/berryShop.js:519` calls `POST /api/shop-admin?action=upsert` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/shop-admin`\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-863a9fe1bf114f0e", "name": "Dangling fetch: POST /api/chat (src/lib/episodeSynopsis.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/chat (src/lib/episodeSynopsis.js:23)"}, "fullDescription": {"text": "`src/lib/episodeSynopsis.js:23` calls `POST /api/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat`\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-9ef222611ddf1884", "name": "Dangling fetch: GET /api/stats/new-members?period=${period} (src/lib/hubLive.js:49)", "shortDescription": {"text": "Dangling fetch: GET /api/stats/new-members?period=${period} (src/lib/hubLive.js:49)"}, "fullDescription": {"text": "`src/lib/hubLive.js:49` calls `GET /api/stats/new-members?period=${period}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stats/new-members`\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-2e7d8ccf056dec2f", "name": "Dangling fetch: POST /api/r2-presign (src/lib/social.js:144)", "shortDescription": {"text": "Dangling fetch: POST /api/r2-presign (src/lib/social.js:144)"}, "fullDescription": {"text": "`src/lib/social.js:144` calls `POST /api/r2-presign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/r2-presign`\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-61292061e29331e3", "name": "Dangling fetch: GET /api/og?url=${encodeURIComponent(url)}&_=${Date.now()} (src/lib/feed.js:61)", "shortDescription": {"text": "Dangling fetch: GET /api/og?url=${encodeURIComponent(url)}&_=${Date.now()} (src/lib/feed.js:61)"}, "fullDescription": {"text": "`src/lib/feed.js:61` calls `GET /api/og?url=${encodeURIComponent(url)}&_=${Date.now()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/og`\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-1bf97fa9b57ebcf1", "name": "Dangling fetch: GET /api/tierlists?action=public (src/lib/tierlists.js:71)", "shortDescription": {"text": "Dangling fetch: GET /api/tierlists?action=public (src/lib/tierlists.js:71)"}, "fullDescription": {"text": "`src/lib/tierlists.js:71` calls `GET /api/tierlists?action=public` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-2484268e2c5ab070", "name": "Dangling fetch: GET /api/tierlists?action=get&id=${encodeURIComponent(id)} (src/lib/tierlists.js:78)", "shortDescription": {"text": "Dangling fetch: GET /api/tierlists?action=get&id=${encodeURIComponent(id)} (src/lib/tierlists.js:78)"}, "fullDescription": {"text": "`src/lib/tierlists.js:78` calls `GET /api/tierlists?action=get&id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-0e8e9ea9a2336c0b", "name": "Dangling fetch: GET /api/tierlists?action=mine (src/lib/tierlists.js:83)", "shortDescription": {"text": "Dangling fetch: GET /api/tierlists?action=mine (src/lib/tierlists.js:83)"}, "fullDescription": {"text": "`src/lib/tierlists.js:83` calls `GET /api/tierlists?action=mine` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-37049aa6e75b913b", "name": "Dangling fetch: GET /api/tierlists?action=draft (src/lib/tierlists.js:88)", "shortDescription": {"text": "Dangling fetch: GET /api/tierlists?action=draft (src/lib/tierlists.js:88)"}, "fullDescription": {"text": "`src/lib/tierlists.js:88` calls `GET /api/tierlists?action=draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-14858584875d9214", "name": "Dangling fetch: POST /api/tierlists?action=autosave (src/lib/tierlists.js:93)", "shortDescription": {"text": "Dangling fetch: POST /api/tierlists?action=autosave (src/lib/tierlists.js:93)"}, "fullDescription": {"text": "`src/lib/tierlists.js:93` calls `POST /api/tierlists?action=autosave` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-f7637568b5c60db2", "name": "Dangling fetch: POST /api/tierlists?action=publish (src/lib/tierlists.js:100)", "shortDescription": {"text": "Dangling fetch: POST /api/tierlists?action=publish (src/lib/tierlists.js:100)"}, "fullDescription": {"text": "`src/lib/tierlists.js:100` calls `POST /api/tierlists?action=publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-22317488b935137e", "name": "Dangling fetch: POST /api/tierlists?action=delete (src/lib/tierlists.js:107)", "shortDescription": {"text": "Dangling fetch: POST /api/tierlists?action=delete (src/lib/tierlists.js:107)"}, "fullDescription": {"text": "`src/lib/tierlists.js:107` calls `POST /api/tierlists?action=delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-8d1edb646282a930", "name": "Dangling fetch: POST /api/tierlists?action=like (src/lib/tierlists.js:114)", "shortDescription": {"text": "Dangling fetch: POST /api/tierlists?action=like (src/lib/tierlists.js:114)"}, "fullDescription": {"text": "`src/lib/tierlists.js:114` calls `POST /api/tierlists?action=like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tierlists`\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-407e45520e0fafe2", "name": "Unused endpoint: USE /anime", "shortDescription": {"text": "Unused endpoint: USE /anime"}, "fullDescription": {"text": "`vite.config.js` declares `USE /anime` 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/24087"}, "properties": {"repository": "AlFreydiss/Brams-Score-By-Freydiss", "repoUrl": "https://github.com/AlFreydiss/Brams-Score-By-Freydiss", "branch": "main"}, "results": [{"ruleId": "scanner-8e77764470e4bf57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/contexts/AuthContext.jsx:96"}, "properties": {"repobilityId": "7f59f169c10d94a1", "scanner": "scanner-primary", "fingerprint": "8e77764470e4bf57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cab1e43e8d4af27a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/WikiEditor.jsx:382"}, "properties": {"repobilityId": "30aee7b23515bd32", "scanner": "scanner-primary", "fingerprint": "cab1e43e8d4af27a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f015cbe064af4fa7", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/Scans.jsx:79"}, "properties": {"repobilityId": "83488cf6c0006a2b", "scanner": "scanner-primary", "fingerprint": "f015cbe064af4fa7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-c0e28bce40fcd0e0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/TheoryDetail.jsx:239"}, "properties": {"repobilityId": "95887a1352106dc4", "scanner": "scanner-primary", "fingerprint": "c0e28bce40fcd0e0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-13de703273f4028b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/MessagesPage.jsx:453"}, "properties": {"repobilityId": "1397f5fa4d9574ff", "scanner": "scanner-primary", "fingerprint": "13de703273f4028b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-5f340d04c3def60f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/StaffPanel.jsx:314"}, "properties": {"repobilityId": "7231fa4818b5dbd1", "scanner": "scanner-primary", "fingerprint": "5f340d04c3def60f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5b099bcfcb2c5281", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/TheoryEditor.jsx:142"}, "properties": {"repobilityId": "09b8089380817e8d", "scanner": "scanner-primary", "fingerprint": "5b099bcfcb2c5281", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1e91f2dcf1ea53f6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/StaffSettings.jsx:364"}, "properties": {"repobilityId": "11815a45e7e4bac6", "scanner": "scanner-primary", "fingerprint": "1e91f2dcf1ea53f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3d00b6eb51baa62c", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/ScansPage.jsx:109"}, "properties": {"repobilityId": "cab7b6b0c3e462da", "scanner": "scanner-primary", "fingerprint": "3d00b6eb51baa62c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7e0a75d73b9118a8", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/AboutModal.jsx:13"}, "properties": {"repobilityId": "a406f8ecd1d6831d", "scanner": "scanner-primary", "fingerprint": "7e0a75d73b9118a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-53b382a71ace1bf8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/WikiArticle.jsx:205"}, "properties": {"repobilityId": "4974f3617daba826", "scanner": "scanner-primary", "fingerprint": "53b382a71ace1bf8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-270b0d98087c8b09", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/feed/StoriesBar.jsx:233"}, "properties": {"repobilityId": "2d54168e5e29f02a", "scanner": "scanner-primary", "fingerprint": "270b0d98087c8b09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-c768088bf07980db", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/feed/QuoteModal.jsx:12"}, "properties": {"repobilityId": "df827ebfd7b61f02", "scanner": "scanner-primary", "fingerprint": "c768088bf07980db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f26d3a9e42020afc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/animehub/HeroCinematic.jsx:57"}, "properties": {"repobilityId": "8ab23e53e81cf191", "scanner": "scanner-primary", "fingerprint": "f26d3a9e42020afc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-282b288b92d69094", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/tournament/TournamentDuel.jsx:32"}, "properties": {"repobilityId": "a3b946e6bbf4b3b2", "scanner": "scanner-primary", "fingerprint": "282b288b92d69094", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9eff819ba120b7d7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/GlobalAnimations.jsx:5"}, "properties": {"repobilityId": "a9a00cad4268a82a", "scanner": "scanner-primary", "fingerprint": "9eff819ba120b7d7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-597993931fde1c03", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/supabase.js:347"}, "properties": {"repobilityId": "c52a55ddd5fe3f18", "scanner": "scanner-primary", "fingerprint": "597993931fde1c03", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-594e8b780dbf2477", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/crew/crewHQQueries.js:280"}, "properties": {"repobilityId": "0121d314f9c41932", "scanner": "scanner-primary", "fingerprint": "594e8b780dbf2477", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbf96b297df808d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/stockfish/stockfish-18-lite-single.js:11"}, "properties": {"repobilityId": "0ec0deea8ab2ac0e", "scanner": "scanner-primary", "fingerprint": "dbf96b297df808d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38a2434c28409d6d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in bramsq-hub.html:370"}, "properties": {"repobilityId": "3ef3ca930ec9b0a8", "scanner": "scanner-primary", "fingerprint": "38a2434c28409d6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bramsq-hub.html"}, "region": {"startLine": 370}}}]}, {"ruleId": "scanner-6a5e53fd5068de2c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in vite.config.js:24"}, "properties": {"repobilityId": "f4cae5143c01bb73", "scanner": "scanner-primary", "fingerprint": "6a5e53fd5068de2c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vite.config.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-b7322b9c756d7645", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in fonds-openings-preview.html:399"}, "properties": {"repobilityId": "921925cf781a1ac7", "scanner": "scanner-primary", "fingerprint": "b7322b9c756d7645", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fonds-openings-preview.html"}, "region": {"startLine": 399}}}]}, {"ruleId": "scanner-7957ff651eda79c1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/bot-tools.js:68"}, "properties": {"repobilityId": "837fcccc2126d8ab", "scanner": "scanner-primary", "fingerprint": "7957ff651eda79c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/bot-tools.js"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-9bee0b545946efb0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/shop-admin.js:21"}, "properties": {"repobilityId": "6ca4ec7ee844dbd7", "scanner": "scanner-primary", "fingerprint": "9bee0b545946efb0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/shop-admin.js"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-42958d723a1af178", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/subtitles.js:104"}, "properties": {"repobilityId": "2dd9fb3ed456100b", "scanner": "scanner-primary", "fingerprint": "42958d723a1af178", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/subtitles.js"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-b211cd21cd281b2a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/hls.js:34"}, "properties": {"repobilityId": "5393b30ee8e3765f", "scanner": "scanner-primary", "fingerprint": "b211cd21cd281b2a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/hls.js"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-462b2b1d75cc413e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/moderate.js:13"}, "properties": {"repobilityId": "278dd7fb2dcedb18", "scanner": "scanner-primary", "fingerprint": "462b2b1d75cc413e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/moderate.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-7c57bf08497a89e9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ticket.js:15"}, "properties": {"repobilityId": "dfb7bbac368f0d6b", "scanner": "scanner-primary", "fingerprint": "7c57bf08497a89e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ticket.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-299d2e076291b6c5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/tierlists.js:256"}, "properties": {"repobilityId": "56808d355a31797b", "scanner": "scanner-primary", "fingerprint": "299d2e076291b6c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/tierlists.js"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-715f7f7bb1b3a612", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-op14-blindtest-r2.mjs:7"}, "properties": {"repobilityId": "f142c0d4480ccbae", "scanner": "scanner-primary", "fingerprint": "715f7f7bb1b3a612", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-op14-blindtest-r2.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-8a9e5b77b738e3e0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/remux-upload-kaiju-r2.mjs:12"}, "properties": {"repobilityId": "f66323ff290c12da", "scanner": "scanner-primary", "fingerprint": "8a9e5b77b738e3e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/remux-upload-kaiju-r2.mjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-ea95741fcdf3b8be", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/gen-anime-thumbs-mid-r2.mjs:17"}, "properties": {"repobilityId": "c93da50b7ccce1b0", "scanner": "scanner-primary", "fingerprint": "ea95741fcdf3b8be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/gen-anime-thumbs-mid-r2.mjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-c1ec1fad0ba36e76", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/remux-upload-vivy-r2.mjs:14"}, "properties": {"repobilityId": "58d8571004bdc15e", "scanner": "scanner-primary", "fingerprint": "c1ec1fad0ba36e76", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/remux-upload-vivy-r2.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-771beba868d6ae77", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/gen-mha-thumbs.mjs:11"}, "properties": {"repobilityId": "ab156bed9b289e9d", "scanner": "scanner-primary", "fingerprint": "771beba868d6ae77", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/gen-mha-thumbs.mjs"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-388df682c9de44c9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-openings-blindtest-r2.mjs:7"}, "properties": {"repobilityId": "5d5b7a69bc064a49", "scanner": "scanner-primary", "fingerprint": "388df682c9de44c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-openings-blindtest-r2.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-fb3f993474d54984", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/extract-upload-violet-audio-jp-r2.mjs:13"}, "properties": {"repobilityId": "be082183a15506c6", "scanner": "scanner-primary", "fingerprint": "fb3f993474d54984", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/extract-upload-violet-audio-jp-r2.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-68ed5eadde4e5909", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-violet-ova-r2.mjs:18"}, "properties": {"repobilityId": "0d689b6a29d9d180", "scanner": "scanner-primary", "fingerprint": "68ed5eadde4e5909", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-violet-ova-r2.mjs"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-a51241963297d568", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-endings-blindtest-r2.mjs:6"}, "properties": {"repobilityId": "43fe42e3987cb620", "scanner": "scanner-primary", "fingerprint": "a51241963297d568", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-endings-blindtest-r2.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-b5774ec116d5b51b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-dbs-init-r2.mjs:17"}, "properties": {"repobilityId": "87b49bfd05573007", "scanner": "scanner-primary", "fingerprint": "b5774ec116d5b51b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-dbs-init-r2.mjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-663fad4116898b4f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-openings-batch2-r2.mjs:7"}, "properties": {"repobilityId": "14c39a57517f612f", "scanner": "scanner-primary", "fingerprint": "663fad4116898b4f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-openings-batch2-r2.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-a050dfe5a3ac3d7d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/build-upload-mha-hls-r2.mjs:12"}, "properties": {"repobilityId": "c74053582e26623f", "scanner": "scanner-primary", "fingerprint": "a050dfe5a3ac3d7d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/build-upload-mha-hls-r2.mjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-27b2716f7f99a3cc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-dbs-r2.mjs:6"}, "properties": {"repobilityId": "3f40234cd938efe8", "scanner": "scanner-primary", "fingerprint": "27b2716f7f99a3cc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-dbs-r2.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-74481f7cca43cb85", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-upload-aot-s4-r2.mjs:14"}, "properties": {"repobilityId": "dcfe1006920eff58", "scanner": "scanner-primary", "fingerprint": "74481f7cca43cb85", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-upload-aot-s4-r2.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-888c306f70115107", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-violet-evergarden-r2.mjs:5"}, "properties": {"repobilityId": "21910bd81d38966b", "scanner": "scanner-primary", "fingerprint": "888c306f70115107", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-violet-evergarden-r2.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-d95708a75d056bc0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-endings-batch2-r2.mjs:7"}, "properties": {"repobilityId": "87e3e2b285a3397a", "scanner": "scanner-primary", "fingerprint": "d95708a75d056bc0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-endings-batch2-r2.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-2aada16fcc8ab1fb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/upload-anime-hls-batch-r2.mjs:5"}, "properties": {"repobilityId": "fd14b37267622e2e", "scanner": "scanner-primary", "fingerprint": "2aada16fcc8ab1fb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/upload-anime-hls-batch-r2.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-60e0bdeade815f31", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/extract-upload-onepiece-subtitles-r2.mjs:5"}, "properties": {"repobilityId": "239c68f9081b9fca", "scanner": "scanner-primary", "fingerprint": "60e0bdeade815f31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/extract-upload-onepiece-subtitles-r2.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-85d16860a032e5ec", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/generate-thumbnails-r2.mjs:13"}, "properties": {"repobilityId": "b4582ec224220477", "scanner": "scanner-primary", "fingerprint": "85d16860a032e5ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-thumbnails-r2.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-7906acf422408ec8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/detect-op-ed-chromaprint.mjs:17"}, "properties": {"repobilityId": "0d03716ead2df42c", "scanner": "scanner-primary", "fingerprint": "7906acf422408ec8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/detect-op-ed-chromaprint.mjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-9183c6c277b74965", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/fix-mha-inits.mjs:17"}, "properties": {"repobilityId": "2bc71a8e72f65d66", "scanner": "scanner-primary", "fingerprint": "9183c6c277b74965", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fix-mha-inits.mjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-49d609e510bd5cca", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/transcode-upload-onepiece-r2.mjs:13"}, "properties": {"repobilityId": "acd23e6ecffeb55f", "scanner": "scanner-primary", "fingerprint": "49d609e510bd5cca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/transcode-upload-onepiece-r2.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-9bd5a0de84d6bf63", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/extract-upload-vivy-subtitles-r2.mjs:13"}, "properties": {"repobilityId": "5c0d7ddefff36156", "scanner": "scanner-primary", "fingerprint": "9bd5a0de84d6bf63", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/extract-upload-vivy-subtitles-r2.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-719f08fe045b7a05", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/build-upload-dbs-hls-r2.mjs:5"}, "properties": {"repobilityId": "e9efd4436f77eaac", "scanner": "scanner-primary", "fingerprint": "719f08fe045b7a05", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/build-upload-dbs-hls-r2.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-7318bd9b13f52414", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/extract-mha-subs.mjs:12"}, "properties": {"repobilityId": "155969f17218657d", "scanner": "scanner-primary", "fingerprint": "7318bd9b13f52414", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/extract-mha-subs.mjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-c206044d630fb662", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/contexts/AuthContext.jsx:104"}, "properties": {"repobilityId": "09ac462f0aec2737", "scanner": "scanner-primary", "fingerprint": "c206044d630fb662", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/contexts/AuthContext.jsx"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-cf80ae34140f27f0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/WikiEditor.jsx:382"}, "properties": {"repobilityId": "a456ead4651e5106", "scanner": "scanner-primary", "fingerprint": "cf80ae34140f27f0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/WikiEditor.jsx"}, "region": {"startLine": 382}}}]}, {"ruleId": "scanner-ea7192e734a1726f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/TheoryDetail.jsx:239"}, "properties": {"repobilityId": "c45d344075d22925", "scanner": "scanner-primary", "fingerprint": "ea7192e734a1726f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/TheoryDetail.jsx"}, "region": {"startLine": 239}}}]}, {"ruleId": "scanner-741e953d9836b595", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/StaffPanel.jsx:314"}, "properties": {"repobilityId": "b5d2cc01d64f8169", "scanner": "scanner-primary", "fingerprint": "741e953d9836b595", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/StaffPanel.jsx"}, "region": {"startLine": 314}}}]}, {"ruleId": "scanner-f6464a2433626545", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/TheoryEditor.jsx:142"}, "properties": {"repobilityId": "8cd04b541347ecbb", "scanner": "scanner-primary", "fingerprint": "f6464a2433626545", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/TheoryEditor.jsx"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-8a5a2d129e1e65f4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/WikiArticle.jsx:205"}, "properties": {"repobilityId": "d446f9ca0b9daa67", "scanner": "scanner-primary", "fingerprint": "8a5a2d129e1e65f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/WikiArticle.jsx"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-29e2c0f5608862e8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/GlobalAnimations.jsx:5"}, "properties": {"repobilityId": "d426633b3c95450d", "scanner": "scanner-primary", "fingerprint": "29e2c0f5608862e8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/GlobalAnimations.jsx"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-05fbc1cb13f96107", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/bramsq-premium-hub.html:991"}, "properties": {"repobilityId": "8cead0a8c94d7bfb", "scanner": "scanner-primary", "fingerprint": "05fbc1cb13f96107", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/bramsq-premium-hub.html"}, "region": {"startLine": 991}}}]}, {"ruleId": "scanner-3bd01862f4d93666", "level": "note", "message": {"text": "Very large file: api/bot-tools.js (1327 lines)"}, "properties": {"repobilityId": "86159af33f63147e", "scanner": "scanner-primary", "fingerprint": "3bd01862f4d93666", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-756a8d90ac40bd95", "level": "note", "message": {"text": "Very large file: src/components/UnifiedSidebar.jsx (940 lines)"}, "properties": {"repobilityId": "77b202bcf2c28944", "scanner": "scanner-primary", "fingerprint": "756a8d90ac40bd95", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e9d60c58964cd10c", "level": "note", "message": {"text": "Very large file: src/components/BlindTestPage.jsx (1650 lines)"}, "properties": {"repobilityId": "ab2938a816e9cc48", "scanner": "scanner-primary", "fingerprint": "e9d60c58964cd10c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2a6785eac3cdc36d", "level": "note", "message": {"text": "Very large file: src/components/AnimeHub.jsx (2327 lines)"}, "properties": {"repobilityId": "2989c8cc0c8fdcc5", "scanner": "scanner-primary", "fingerprint": "2a6785eac3cdc36d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-118f8f139ec14e33", "level": "note", "message": {"text": "Very large file: src/components/MessagesPage.jsx (1218 lines)"}, "properties": {"repobilityId": "7cfe8d54dc492d09", "scanner": "scanner-primary", "fingerprint": "118f8f139ec14e33", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fed43efa8b9f8fad", "level": "note", "message": {"text": "Very large file: src/components/TournamentRoomPage.jsx (1089 lines)"}, "properties": {"repobilityId": "d10c82f147195460", "scanner": "scanner-primary", "fingerprint": "fed43efa8b9f8fad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4b98d147836b20ca", "level": "note", "message": {"text": "Very large file: src/components/VideoPlayer.jsx (1482 lines)"}, "properties": {"repobilityId": "80888e6e7b5097d8", "scanner": "scanner-primary", "fingerprint": "4b98d147836b20ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d57a7fcbe6b1e5ec", "level": "note", "message": {"text": "Very large file: src/components/TierListPage.jsx (2819 lines)"}, "properties": {"repobilityId": "6c9a66679b92c458", "scanner": "scanner-primary", "fingerprint": "d57a7fcbe6b1e5ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-84a1d250d57df249", "level": "note", "message": {"text": "Very large file: src/components/crew-hq/CrewHQPage.jsx (1649 lines)"}, "properties": {"repobilityId": "1648332c584ff838", "scanner": "scanner-primary", "fingerprint": "84a1d250d57df249", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-335b366db33c3f44", "level": "note", "message": {"text": "Very large file: src/lib/blindTest.js (1598 lines)"}, "properties": {"repobilityId": "528585148285aec2", "scanner": "scanner-primary", "fingerprint": "335b366db33c3f44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "86c434cd8c692bbc", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "e27a69d96ae11f81", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "658d0b320d1770b3", "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": "bcd5aa9387e80d2d", "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": "9d5c776ab84be2d9", "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": "4621edc445622d27", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "8b902815cd13ce91", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5d02f9c3706b97a0", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-981e0ea6835e0e15", "level": "none", "message": {"text": "Commented-code block (5 lines) in tailwind.config.js:5"}, "properties": {"repobilityId": "eef68d11f303a112", "scanner": "scanner-primary", "fingerprint": "981e0ea6835e0e15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08d97a78bd9fd901", "level": "none", "message": {"text": "Commented-code block (10 lines) in api/bot-tools.js:1"}, "properties": {"repobilityId": "623ed8c8d54f105c", "scanner": "scanner-primary", "fingerprint": "08d97a78bd9fd901", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-412f605247e2926b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/bot-tools.js:251"}, "properties": {"repobilityId": "d6852958bc20d089", "scanner": "scanner-primary", "fingerprint": "412f605247e2926b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2658b4605293d15", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/subtitles.js:68"}, "properties": {"repobilityId": "af1547a9075b0f87", "scanner": "scanner-primary", "fingerprint": "b2658b4605293d15", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d734e673d74147a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/moderate.js:76"}, "properties": {"repobilityId": "8b6059fc30c0b672", "scanner": "scanner-primary", "fingerprint": "4d734e673d74147a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9eb9672be5f75817", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/leaderboard.js:95"}, "properties": {"repobilityId": "0c59c6ff5f66dc93", "scanner": "scanner-primary", "fingerprint": "9eb9672be5f75817", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1b1157d4ca2f735b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/chat.js:68"}, "properties": {"repobilityId": "b008d0adc6ff1907", "scanner": "scanner-primary", "fingerprint": "1b1157d4ca2f735b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3dd40f65c76e8c7c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/sync-reco-feedback-ruflo.mjs:35"}, "properties": {"repobilityId": "8e12b870ab8dae14", "scanner": "scanner-primary", "fingerprint": "3dd40f65c76e8c7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2273080636e7dd62", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/gen-mha-thumbs.mjs:1"}, "properties": {"repobilityId": "26c0cd14453387f2", "scanner": "scanner-primary", "fingerprint": "2273080636e7dd62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-865f313964a00f8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/main.jsx:25"}, "properties": {"repobilityId": "e7692522d9337e5c", "scanner": "scanner-primary", "fingerprint": "865f313964a00f8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-056f1be9c5a42f82", "level": "note", "message": {"text": "Legacy-named symbol `brams_tierlist_draft_v2` in src/tierlist/storage.ts:3"}, "properties": {"repobilityId": "744201f9f0e7d978", "scanner": "scanner-primary", "fingerprint": "056f1be9c5a42f82", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6e03bfabc5e372ff", "level": "note", "message": {"text": "Legacy-named symbol `brams_bg_muted_v1` in src/contexts/OpeningBgContext.jsx:26"}, "properties": {"repobilityId": "676bddd5e41d9298", "scanner": "scanner-primary", "fingerprint": "6e03bfabc5e372ff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e194fe36f15ac566", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/contexts/OpeningBgContext.jsx:15"}, "properties": {"repobilityId": "bf62322ed44a6ec2", "scanner": "scanner-primary", "fingerprint": "e194fe36f15ac566", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d221f1ca079a460", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/contexts/AuthContext.jsx:130"}, "properties": {"repobilityId": "607092950156dad0", "scanner": "scanner-primary", "fingerprint": "5d221f1ca079a460", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d68da6659d24895", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useInView.js:3"}, "properties": {"repobilityId": "af3060e98d6d8174", "scanner": "scanner-primary", "fingerprint": "5d68da6659d24895", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cc13feebd912bea", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/MonUniversPage.jsx:1"}, "properties": {"repobilityId": "62e9f9e3dc50bc49", "scanner": "scanner-primary", "fingerprint": "0cc13feebd912bea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68405efcb5aa8718", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/IdleCinema.jsx:1"}, "properties": {"repobilityId": "d2d1cc9b40c2a2fb", "scanner": "scanner-primary", "fingerprint": "68405efcb5aa8718", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e73c7427e85cd914", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/FunFX.jsx:3"}, "properties": {"repobilityId": "810061b7ed321417", "scanner": "scanner-primary", "fingerprint": "e73c7427e85cd914", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcd9d501c2f89279", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/AkinatorPage.jsx:85"}, "properties": {"repobilityId": "d03d463c32854daf", "scanner": "scanner-primary", "fingerprint": "fcd9d501c2f89279", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e9b872636b8cc37", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AnimeHub.jsx:1492"}, "properties": {"repobilityId": "8819946de92be1cb", "scanner": "scanner-primary", "fingerprint": "9e9b872636b8cc37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80c9ded07da256cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/AnimeBackdrop.jsx:3"}, "properties": {"repobilityId": "212a4ff174890059", "scanner": "scanner-primary", "fingerprint": "80c9ded07da256cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-515197989965cfc7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/AuthModal.jsx:1"}, "properties": {"repobilityId": "75c1853bdd304f2f", "scanner": "scanner-primary", "fingerprint": "515197989965cfc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e91214488656022", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/WrappedPage.jsx:1"}, "properties": {"repobilityId": "3def4c93e7d62040", "scanner": "scanner-primary", "fingerprint": "6e91214488656022", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05bf6aa6af697aa3", "level": "note", "message": {"text": "Legacy-named symbol `brams_ia_adv_v1` in src/components/AIChatWidget.jsx:9"}, "properties": {"repobilityId": "d48814ffbb90c7f9", "scanner": "scanner-primary", "fingerprint": "05bf6aa6af697aa3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ced30aeadb0102fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/BerryShop.jsx:126"}, "properties": {"repobilityId": "33ae86195daea25a", "scanner": "scanner-primary", "fingerprint": "ced30aeadb0102fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89d29e6ff3c1a3d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/FeedPage.jsx:231"}, "properties": {"repobilityId": "9fcf4cee91046732", "scanner": "scanner-primary", "fingerprint": "89d29e6ff3c1a3d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b226f537312a3b50", "level": "note", "message": {"text": "Legacy-named symbol `brams_staff_settings_v1` in src/components/StaffSettings.jsx:19"}, "properties": {"repobilityId": "2dd58fbbe7ee2a3a", "scanner": "scanner-primary", "fingerprint": "b226f537312a3b50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-16de963421c70882", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/StaffSettings.jsx:3"}, "properties": {"repobilityId": "a92bee46fc221dc4", "scanner": "scanner-primary", "fingerprint": "16de963421c70882", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75f3a6ae9ade3986", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/TrailShop.jsx:1"}, "properties": {"repobilityId": "81d441d01139f5c5", "scanner": "scanner-primary", "fingerprint": "75f3a6ae9ade3986", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-999e42651df8e0c8", "level": "note", "message": {"text": "Legacy-named symbol `brams_subtitle_style_v1` in src/components/VideoPlayer.jsx:65"}, "properties": {"repobilityId": "99445c9bf4761e39", "scanner": "scanner-primary", "fingerprint": "999e42651df8e0c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c0a5da62990c48bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/VideoPlayer.jsx:353"}, "properties": {"repobilityId": "bcef881e41623bc1", "scanner": "scanner-primary", "fingerprint": "c0a5da62990c48bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c03305ae134094d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/EpisodeWatch.jsx:1"}, "properties": {"repobilityId": "4e6304904de59d99", "scanner": "scanner-primary", "fingerprint": "6c03305ae134094d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-095ce61ed2102f33", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/TierListPage.jsx:1135"}, "properties": {"repobilityId": "49f90d5ec942550a", "scanner": "scanner-primary", "fingerprint": "095ce61ed2102f33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92a1a050dcd29d65", "level": "note", "message": {"text": "Legacy-named symbol `lb_period_v2` in src/components/Leaderboard.jsx:38"}, "properties": {"repobilityId": "04f99c208e6f1e07", "scanner": "scanner-primary", "fingerprint": "92a1a050dcd29d65", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-579f98c4fb54c547", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/GoldBackdrop.jsx:1"}, "properties": {"repobilityId": "e928b8aa6189246a", "scanner": "scanner-primary", "fingerprint": "579f98c4fb54c547", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ea3c1e72628dd31", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/social/OpeningBgMedia.jsx:3"}, "properties": {"repobilityId": "010c7cac8282813e", "scanner": "scanner-primary", "fingerprint": "6ea3c1e72628dd31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a3d475f041b2ed1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/social/MemberSuggestions.jsx:1"}, "properties": {"repobilityId": "12dfca7a51b8d992", "scanner": "scanner-primary", "fingerprint": "4a3d475f041b2ed1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42554cf9a99a27a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/social/OpeningVisualizer.jsx:4"}, "properties": {"repobilityId": "6ccc7d53a7681a48", "scanner": "scanner-primary", "fingerprint": "42554cf9a99a27a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8b258ea69cc31f5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/social/EquippedOpeningBackground.jsx:6"}, "properties": {"repobilityId": "3416e1cb4224fa17", "scanner": "scanner-primary", "fingerprint": "a8b258ea69cc31f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a2296a5d9c67724", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/profile/FollowListModal.jsx:1"}, "properties": {"repobilityId": "3000f08ada2613b7", "scanner": "scanner-primary", "fingerprint": "4a2296a5d9c67724", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0835451283ba31c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/feed/VideoTrimmer.jsx:1"}, "properties": {"repobilityId": "e5697d340e995e5e", "scanner": "scanner-primary", "fingerprint": "a0835451283ba31c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b4bb5fbb392a967", "level": "note", "message": {"text": "Legacy-named symbol `AmbientLegacy` in src/components/animehub/AnimeHubV2.jsx:43"}, "properties": {"repobilityId": "376f34a0a5fcc343", "scanner": "scanner-primary", "fingerprint": "0b4bb5fbb392a967", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7ac2bd2de5c0e5e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/animehub/AnimeHubV2.jsx:1"}, "properties": {"repobilityId": "8a665e86b0e520d8", "scanner": "scanner-primary", "fingerprint": "7ac2bd2de5c0e5e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4eb356cc83ba851c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/boutique/FondCard.jsx:6"}, "properties": {"repobilityId": "c60c1f301edb3138", "scanner": "scanner-primary", "fingerprint": "4eb356cc83ba851c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0199c160991accaa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/echecs/hooks/useHorloge.js:1"}, "properties": {"repobilityId": "e15f08782aedcc7a", "scanner": "scanner-primary", "fingerprint": "0199c160991accaa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-182ea7f6f7c15579", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/echecs/components/Plateau.jsx:1"}, "properties": {"repobilityId": "3b1b39d2ecfcacdd", "scanner": "scanner-primary", "fingerprint": "182ea7f6f7c15579", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc517e294becd472", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/echecs/modes/Matchmaking.jsx:1"}, "properties": {"repobilityId": "acdfc5ca978f85c6", "scanner": "scanner-primary", "fingerprint": "bc517e294becd472", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcf48e8ef07cfaf5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/supabase.js:13"}, "properties": {"repobilityId": "8553e096f88e44b1", "scanner": "scanner-primary", "fingerprint": "dcf48e8ef07cfaf5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c9740e4d7c5aacc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/supabase.js:52"}, "properties": {"repobilityId": "5f59a7762371cbd1", "scanner": "scanner-primary", "fingerprint": "5c9740e4d7c5aacc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-12b38c726af23881", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/undercoverRooms.js:1"}, "properties": {"repobilityId": "da099eb1b0627411", "scanner": "scanner-primary", "fingerprint": "12b38c726af23881", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23942ccdcb691dc4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/profile.js:1"}, "properties": {"repobilityId": "11fa6289db53fee2", "scanner": "scanner-primary", "fingerprint": "23942ccdcb691dc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2558b549238f8573", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gifProvider.js:34"}, "properties": {"repobilityId": "45b6109dbe8eacab", "scanner": "scanner-primary", "fingerprint": "2558b549238f8573", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-102731acabd40ff1", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/supabaseRest.js:1"}, "properties": {"repobilityId": "8703365dc218fd76", "scanner": "scanner-primary", "fingerprint": "102731acabd40ff1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81a87b5afce7a5ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/watchStats.js:1"}, "properties": {"repobilityId": "7d4a1ef8fb5735d7", "scanner": "scanner-primary", "fingerprint": "81a87b5afce7a5ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4038da7eb537991f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tournamentRooms.js:1"}, "properties": {"repobilityId": "b87e64f1b5438a37", "scanner": "scanner-primary", "fingerprint": "4038da7eb537991f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c4b43342541f4ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hubLive.js:8"}, "properties": {"repobilityId": "3128b22ed9e7e983", "scanner": "scanner-primary", "fingerprint": "1c4b43342541f4ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4261d51e73becda1", "level": "note", "message": {"text": "Legacy-named symbol `brams_tier_studio_v1` in src/lib/tierlist-storage.js:50"}, "properties": {"repobilityId": "d02260fb0900e7e0", "scanner": "scanner-primary", "fingerprint": "4261d51e73becda1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ae29efb190fe1802", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/styles/typography.js:1"}, "properties": {"repobilityId": "10fd3a0b79403408", "scanner": "scanner-primary", "fingerprint": "ae29efb190fe1802", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb0dc99ff6b77c60", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/stockfish/stockfish-18-lite-single.js:11"}, "properties": {"repobilityId": "5e97d2d04cbec8d8", "scanner": "scanner-primary", "fingerprint": "bb0dc99ff6b77c60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9df86f6e7ec50ecc", "level": "warning", "message": {"text": "Frontend route `/manga/:slug` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "f21aab7d9458fb32", "scanner": "scanner-primary", "fingerprint": "9df86f6e7ec50ecc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-09323c5041d4bbca", "level": "warning", "message": {"text": "Frontend route `/u/:discordId` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "2063f5be92915e92", "scanner": "scanner-primary", "fingerprint": "09323c5041d4bbca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-205df301e8e9b436", "level": "warning", "message": {"text": "Frontend route `/fil/recherche` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "a0a906f4a75a0387", "scanner": "scanner-primary", "fingerprint": "205df301e8e9b436", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b08b20068109417d", "level": "warning", "message": {"text": "Frontend route `/fil/:postId` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "5d47f43bf5fdfe33", "scanner": "scanner-primary", "fingerprint": "b08b20068109417d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8e26694ad219272a", "level": "warning", "message": {"text": "Frontend route `/wrapped/:token` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "820d1a5abc42c4f3", "scanner": "scanner-primary", "fingerprint": "8e26694ad219272a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c60f2e85446770e5", "level": "warning", "message": {"text": "Frontend route `/flashback/:token` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "393cc34b88daffe2", "scanner": "scanner-primary", "fingerprint": "c60f2e85446770e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6dcaee18928a0992", "level": "warning", "message": {"text": "Frontend route `/wiki/*` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "fcd53acf4df267af", "scanner": "scanner-primary", "fingerprint": "6dcaee18928a0992", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-28fdb553eea861a7", "level": "warning", "message": {"text": "Frontend route `/theories/*` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "55be5c750c304423", "scanner": "scanner-primary", "fingerprint": "28fdb553eea861a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0999f2f67bbde393", "level": "warning", "message": {"text": "Frontend route `/equipage/:crewId` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "e0dae9e22cd18aec", "scanner": "scanner-primary", "fingerprint": "0999f2f67bbde393", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6cb41e19475f9781", "level": "warning", "message": {"text": "Frontend route `/fruits-du-demon` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "e742d25da7ff6abb", "scanner": "scanner-primary", "fingerprint": "6cb41e19475f9781", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1d62bef8c0b5eb24", "level": "warning", "message": {"text": "Frontend route `/shop` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "92eecbc4d06e31e1", "scanner": "scanner-primary", "fingerprint": "1d62bef8c0b5eb24", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a008c307fcec4f4a", "level": "warning", "message": {"text": "Frontend route `/messages/:conversationId` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "20b33b5a0f58a750", "scanner": "scanner-primary", "fingerprint": "a008c307fcec4f4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-10c60a687aef8af2", "level": "warning", "message": {"text": "Frontend route `/brams-traitor` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "2165602cd5d21439", "scanner": "scanner-primary", "fingerprint": "10c60a687aef8af2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2046d6b5d5b509e5", "level": "warning", "message": {"text": "Frontend route `/pirate-arena` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "f95897c06ef6d0ac", "scanner": "scanner-primary", "fingerprint": "2046d6b5d5b509e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a2b2aef3dc21493f", "level": "warning", "message": {"text": "Frontend route `/tournoi/ost` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "7aeb7ea6752d6429", "scanner": "scanner-primary", "fingerprint": "a2b2aef3dc21493f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b4d45255f85dc039", "level": "warning", "message": {"text": "Frontend route `/tournoi-ost` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "68f115af38dac5fd", "scanner": "scanner-primary", "fingerprint": "b4d45255f85dc039", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9590823ef7d32987", "level": "warning", "message": {"text": "Frontend route `/tournoi/openings` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "2dd633635527c8ce", "scanner": "scanner-primary", "fingerprint": "9590823ef7d32987", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c1da671c40fa2d31", "level": "warning", "message": {"text": "Frontend route `/tournoi/opening` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "37927201f8b0f5a0", "scanner": "scanner-primary", "fingerprint": "c1da671c40fa2d31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2e8a7386e06750b8", "level": "warning", "message": {"text": "Frontend route `/tournoi/endings` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "ca8de7762ad7a3b4", "scanner": "scanner-primary", "fingerprint": "2e8a7386e06750b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-37f7800dfa33b523", "level": "warning", "message": {"text": "Frontend route `/tournoi/ending` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "f5b69a08e626c2fe", "scanner": "scanner-primary", "fingerprint": "37f7800dfa33b523", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ba533971d880489a", "level": "warning", "message": {"text": "Frontend route `/profil-yonkou` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "e55f963593e66a35", "scanner": "scanner-primary", "fingerprint": "ba533971d880489a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1297ef009c2c6bc0", "level": "warning", "message": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 src/App.jsx"}, "properties": {"repobilityId": "f87c08f0ec456eb2", "scanner": "scanner-primary", "fingerprint": "1297ef009c2c6bc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c35c42c60dc4f2b8", "level": "error", "message": {"text": "Dangling fetch: GET https://api.supabase.com/v1${path} (delete-storage.mjs:10)"}, "properties": {"repobilityId": "591fc66fa003997b", "scanner": "scanner-primary", "fingerprint": "c35c42c60dc4f2b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9953f83074e90489", "level": "error", "message": {"text": "Dangling fetch: GET https://${REF}.supabase.co/storage/v1${path} (delete-storage.mjs:18)"}, "properties": {"repobilityId": "71745adfc8f41003", "scanner": "scanner-primary", "fingerprint": "9953f83074e90489", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bcc0fd833ae3bea7", "level": "error", "message": {"text": "Dangling fetch: GET https://api.stripe.com${path} (api/bot-tools.js:725)"}, "properties": {"repobilityId": "f987ad4bbba2c4ae", "scanner": "scanner-primary", "fingerprint": "bcc0fd833ae3bea7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26b9e8804ea39858", "level": "error", "message": {"text": "Dangling fetch: GET /api/bot-tools?tool=turn-credentials (src/contexts/CallContext.jsx:26)"}, "properties": {"repobilityId": "699ef2cb9ace5202", "scanner": "scanner-primary", "fingerprint": "26b9e8804ea39858", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21a4b467ec47cc65", "level": "error", "message": {"text": "Dangling fetch: GET /api/discord-feed (src/components/UnifiedSidebar.jsx:487)"}, "properties": {"repobilityId": "eb1b2f351afb808b", "scanner": "scanner-primary", "fingerprint": "21a4b467ec47cc65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c9f818864487e76", "level": "error", "message": {"text": "Dangling fetch: GET /api/announcements (src/components/CalendarPage.jsx:129)"}, "properties": {"repobilityId": "a7960f53d528fda6", "scanner": "scanner-primary", "fingerprint": "1c9f818864487e76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8d831bb1f4e87ab", "level": "error", "message": {"text": "Dangling fetch: GET /api/discord-feed (src/components/DiscordFeed.jsx:101)"}, "properties": {"repobilityId": "f34306bed0378cc6", "scanner": "scanner-primary", "fingerprint": "b8d831bb1f4e87ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40a336b30985a83f", "level": "error", "message": {"text": "Dangling fetch: POST /api/akinator (src/components/AkinatorPage.jsx:655)"}, "properties": {"repobilityId": "76b635c24678a2a1", "scanner": "scanner-primary", "fingerprint": "40a336b30985a83f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d9dc7460e2dfa00", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat (src/components/AnimeHub.jsx:1492)"}, "properties": {"repobilityId": "d85c0c27e649ff59", "scanner": "scanner-primary", "fingerprint": "5d9dc7460e2dfa00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ebb1b7cbbd04335c", "level": "error", "message": {"text": "Dangling fetch: POST /api/ticket (src/components/SupportTicket.jsx:27)"}, "properties": {"repobilityId": "643d280e60dcf995", "scanner": "scanner-primary", "fingerprint": "ebb1b7cbbd04335c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-418335a8adaef0ed", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat (src/components/AIChat.jsx:57)"}, "properties": {"repobilityId": "9f197e2fe58526a4", "scanner": "scanner-primary", "fingerprint": "418335a8adaef0ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01599adacd079b23", "level": "error", "message": {"text": "Dangling fetch: POST /api/ticket (src/components/Contact.jsx:26)"}, "properties": {"repobilityId": "a3717f2e33450a8a", "scanner": "scanner-primary", "fingerprint": "01599adacd079b23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52ebb7eae81bc245", "level": "error", "message": {"text": "Dangling fetch: POST /api/tierlists?action=${action} (src/components/UndercoverPage.jsx:212)"}, "properties": {"repobilityId": "6e249448ee123110", "scanner": "scanner-primary", "fingerprint": "52ebb7eae81bc245", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ab7a532e9d5276c", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat (src/components/AIChatWidget.jsx:62)"}, "properties": {"repobilityId": "7b60163f2050b0f8", "scanner": "scanner-primary", "fingerprint": "9ab7a532e9d5276c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9951f5c90e30f0f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/leaderboard?limit=500&period=week (src/components/AIChatWidget.jsx:335)"}, "properties": {"repobilityId": "2f604037750a2fd4", "scanner": "scanner-primary", "fingerprint": "9951f5c90e30f0f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2741866694267229", "level": "error", "message": {"text": "Dangling fetch: GET /api/stripe-revenue (src/components/StaffPanel.jsx:293)"}, "properties": {"repobilityId": "5b6103f9c0e206aa", "scanner": "scanner-primary", "fingerprint": "2741866694267229", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a65397a2bbf9d8d", "level": "error", "message": {"text": "Dangling fetch: POST /api/tierlists?action=reco_feedback (src/components/AIRecommendations.jsx:197)"}, "properties": {"repobilityId": "16af46e8d2d01166", "scanner": "scanner-primary", "fingerprint": "4a65397a2bbf9d8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b253bca623c9390", "level": "error", "message": {"text": "Dangling fetch: POST /api/r2-presign (src/components/BlobUploadPage.jsx:129)"}, "properties": {"repobilityId": "92c26eec0a21cbb9", "scanner": "scanner-primary", "fingerprint": "7b253bca623c9390", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e061eb08a2c47970", "level": "error", "message": {"text": "Dangling fetch: GET /api/stats/new-members?period=7d&_=${Date.now()} (src/components/JoinCTA.jsx:24)"}, "properties": {"repobilityId": "b7c17bc5dde67aeb", "scanner": "scanner-primary", "fingerprint": "e061eb08a2c47970", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4476a1d96c59e0f", "level": "error", "message": {"text": "Dangling fetch: POST /api/r2-presign (src/components/TierListPage.jsx:317)"}, "properties": {"repobilityId": "4cf77901c853c701", "scanner": "scanner-primary", "fingerprint": "e4476a1d96c59e0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3511591901e9252", "level": "error", "message": {"text": "Dangling fetch: POST /api/tierlists?action=autosave (src/components/TierListPage.jsx:1883)"}, "properties": {"repobilityId": "8ea17332a8af032c", "scanner": "scanner-primary", "fingerprint": "b3511591901e9252", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49fafd090e65a397", "level": "error", "message": {"text": "Dangling fetch: POST /api/stripe-donate (src/lib/berryShop.js:401)"}, "properties": {"repobilityId": "cca7eb20af909847", "scanner": "scanner-primary", "fingerprint": "49fafd090e65a397", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f1affbe4d2ca66d", "level": "error", "message": {"text": "Dangling fetch: POST /api/stripe-donate-complete (src/lib/berryShop.js:413)"}, "properties": {"repobilityId": "704939ff52eb42aa", "scanner": "scanner-primary", "fingerprint": "2f1affbe4d2ca66d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a45bd5dcd5dcb7e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/shop-admin?action=upsert (src/lib/berryShop.js:519)"}, "properties": {"repobilityId": "c155c3aa1e02eb76", "scanner": "scanner-primary", "fingerprint": "a45bd5dcd5dcb7e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-863a9fe1bf114f0e", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat (src/lib/episodeSynopsis.js:23)"}, "properties": {"repobilityId": "0a0326c45a73b6e2", "scanner": "scanner-primary", "fingerprint": "863a9fe1bf114f0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ef222611ddf1884", "level": "error", "message": {"text": "Dangling fetch: GET /api/stats/new-members?period=${period} (src/lib/hubLive.js:49)"}, "properties": {"repobilityId": "1882f980859cbfd1", "scanner": "scanner-primary", "fingerprint": "9ef222611ddf1884", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e7d8ccf056dec2f", "level": "error", "message": {"text": "Dangling fetch: POST /api/r2-presign (src/lib/social.js:144)"}, "properties": {"repobilityId": "8f4a6f11faf03aae", "scanner": "scanner-primary", "fingerprint": "2e7d8ccf056dec2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61292061e29331e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/og?url=${encodeURIComponent(url)}&_=${Date.now()} (src/lib/feed.js:61)"}, "properties": {"repobilityId": "cdc77859290b5449", "scanner": "scanner-primary", "fingerprint": "61292061e29331e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bf97fa9b57ebcf1", "level": "error", "message": {"text": "Dangling fetch: GET /api/tierlists?action=public (src/lib/tierlists.js:71)"}, "properties": {"repobilityId": "d3bee9e44a202014", "scanner": "scanner-primary", "fingerprint": "1bf97fa9b57ebcf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2484268e2c5ab070", "level": "error", "message": {"text": "Dangling fetch: GET /api/tierlists?action=get&id=${encodeURIComponent(id)} (src/lib/tierlists.js:78)"}, "properties": {"repobilityId": "d85581fc240d3259", "scanner": "scanner-primary", "fingerprint": "2484268e2c5ab070", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0e8e9ea9a2336c0b", "level": "error", "message": {"text": "Dangling fetch: GET /api/tierlists?action=mine (src/lib/tierlists.js:83)"}, "properties": {"repobilityId": "9ec3c3ca1ac63246", "scanner": "scanner-primary", "fingerprint": "0e8e9ea9a2336c0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-37049aa6e75b913b", "level": "error", "message": {"text": "Dangling fetch: GET /api/tierlists?action=draft (src/lib/tierlists.js:88)"}, "properties": {"repobilityId": "8023576dc2795b05", "scanner": "scanner-primary", "fingerprint": "37049aa6e75b913b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-14858584875d9214", "level": "error", "message": {"text": "Dangling fetch: POST /api/tierlists?action=autosave (src/lib/tierlists.js:93)"}, "properties": {"repobilityId": "503a3fb27f48aff0", "scanner": "scanner-primary", "fingerprint": "14858584875d9214", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f7637568b5c60db2", "level": "error", "message": {"text": "Dangling fetch: POST /api/tierlists?action=publish (src/lib/tierlists.js:100)"}, "properties": {"repobilityId": "864c28b655d0c015", "scanner": "scanner-primary", "fingerprint": "f7637568b5c60db2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-22317488b935137e", "level": "error", "message": {"text": "Dangling fetch: POST /api/tierlists?action=delete (src/lib/tierlists.js:107)"}, "properties": {"repobilityId": "9d9a70363b9b29b2", "scanner": "scanner-primary", "fingerprint": "22317488b935137e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8d1edb646282a930", "level": "error", "message": {"text": "Dangling fetch: POST /api/tierlists?action=like (src/lib/tierlists.js:114)"}, "properties": {"repobilityId": "0f10fc8b9c23efbd", "scanner": "scanner-primary", "fingerprint": "8d1edb646282a930", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-407e45520e0fafe2", "level": "note", "message": {"text": "Unused endpoint: USE /anime"}, "properties": {"repobilityId": "9bb782b547b31877", "scanner": "scanner-primary", "fingerprint": "407e45520e0fafe2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}