{"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-70ffc6b3172d79be", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84029237e93c0403", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca07ebb532d0db66", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/building/BuildingToolbar.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/building/BuildingToolbar.tsx:137"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c227bdbedae11395", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/panel-controls/PanelSelect.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/panel-controls/PanelSelect.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-759c722d10342d1a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/panel-controls/PanelMultiSelect.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/panel-controls/PanelMultiSelect.tsx:64"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69121444c1c09e1e", "name": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/TransformationTap.tsx:125", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/TransformationTap.tsx:125"}, "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-819e970c11ad3b66", "name": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SystemSolver.tsx:120", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SystemSolver.tsx:120"}, "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-b6f114be9e9d6bd2", "name": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SlopeSprint.tsx:138", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SlopeSprint.tsx:138"}, "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-d518f9cd4fc86527", "name": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/LinearGraphMatch.tsx:106", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/LinearGraphMatch.tsx:106"}, "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-6b790bff06aecc84", "name": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/FunctionMachine.tsx:116", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/FunctionMachine.tsx:116"}, "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-e75f750dbc8d6958", "name": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/PythagorasPop.tsx:106", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/PythagorasPop.tsx:106"}, "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-ff240ea8c3b90bfa", "name": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SciNotationSlide.tsx:45", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SciNotationSlide.tsx:45"}, "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-0a36bd9d968f8b21", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SettingsPanel.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SettingsPanel.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e85a0bb79f5c4ce2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SlimeGeneratedView.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SlimeGeneratedView.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc4e84dd9dd52b3b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SlimeShowcasePanel.tsx:514", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SlimeShowcasePanel.tsx:514"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28034ca5d60b3912", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/ChatAssetPicker.tsx:329", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/ChatAssetPicker.tsx:329"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff4f4773c8f25571", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/MarketplaceLibraryPanel.tsx:304", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/MarketplaceLibraryPanel.tsx:304"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-463e92e3fdf82f8b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/PixellabPreviewDialog.tsx:201", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/PixellabPreviewDialog.tsx:201"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a939bfe6a069feed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/RockSlopePicker.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/RockSlopePicker.tsx:116"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef6747e6d0dcc2eb", "name": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TiledImportPanel.tsx:235", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TiledImportPanel.tsx:235"}, "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-429bec809e8a2682", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/PartStudioPanel.tsx:454", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/PartStudioPanel.tsx:454"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efae243ffe7f5d35", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/GeneratedFilesPanel.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/GeneratedFilesPanel.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61b9ea845c3803de", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/TilesetGenerationForm.tsx:734", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/TilesetGenerationForm.tsx:734"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72797c42c1b540ca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/Freeform3DAssetsView.tsx:469", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/Freeform3DAssetsView.tsx:469"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2376f392abb5e3bb", "name": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4922", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4922"}, "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-a8265b652a6be725", "name": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TileAssetsView.tsx:912", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TileAssetsView.tsx:912"}, "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-099e776b2487be05", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/AssetsPanel.tsx:284", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/AssetsPanel.tsx:284"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfbe233e1d83c81d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/WorldGenPanel.tsx:1575", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/WorldGenPanel.tsx:1575"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b18eedf3bd92822", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/task-sections/AttachmentsSection.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/task-sections/AttachmentsSection.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-158923d83a49217b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/views/KanbanView.tsx:235", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/views/KanbanView.tsx:235"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5379a2c340f4af2a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/views/TimelineBar.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/views/TimelineBar.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b57604dbd9266b7", "name": "React Flow <Controls> without dark theming \u2014 src/components/studio/views/FlowchartView.tsx:381", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 src/components/studio/views/FlowchartView.tsx:381"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1ff6b677548a348", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:137", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:137"}, "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-e800829e5301a976", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/TilesetGrid.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/TilesetGrid.tsx:165"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2d5bcaddc31cf2e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/PackClient.tsx:270", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/PackClient.tsx:270"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-992a57a2355ff886", "name": "Stray `console.log` in TS/JS \u2014 src/app/extend-mlp/rock-slope-pack/overlays.ts:789", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/extend-mlp/rock-slope-pack/overlays.ts:789"}, "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-e414dab4b8dcc3ec", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/MapPreview.tsx:394", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/MapPreview.tsx:394"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4585abf6e7a4c90", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:3411", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:3411"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a4cec773fe040f2", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-character-template-animation/route.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-character-template-animation/route.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a4ca8f678913190", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab/run/[mcpName]/route.ts:327", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab/run/[mcpName]/route.ts:327"}, "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-46c50c1f677386e8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-transfer-outfit/route.ts:195", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-transfer-outfit/route.ts:195"}, "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-c9e8a61ff0141f25", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-character-animation/route.ts:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-character-animation/route.ts:192"}, "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-6ecc784a0c6b6b81", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/auth.ts:73", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/auth.ts:73"}, "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-f7eeea75078315e0", "name": "Stray `console.log` in TS/JS \u2014 src/lib/character-template-anim-poller.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/character-template-anim-poller.ts:134"}, "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-957f036c295bea3b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/kid-style-3d/script-runtime.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/kid-style-3d/script-runtime.ts:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e1c75e889c0ca8e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/game-engine/bundler.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/game-engine/bundler.ts:153"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a76af149d2544f75", "name": "Stray `console.log` in TS/JS \u2014 src/store/tile-store.ts:5254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/store/tile-store.ts:5254"}, "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-04e0e1232ae481e6", "name": "Insecure pattern 'dangerous_innerhtml' in docs/roblox-ui/README.md:38", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/roblox-ui/README.md:38"}, "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-61b5fcbf75ec4eeb", "name": "Insecure pattern 'new_function_used' in scripts/sync-farmer-anims.mjs:147", "shortDescription": {"text": "Insecure pattern 'new_function_used' in scripts/sync-farmer-anims.mjs:147"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f825af29a0dfa21f", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/medieval-demo-hq.html:289", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/medieval-demo-hq.html:289"}, "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-bc4311afdcf163d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/game-engine.html:692", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/game-engine.html:692"}, "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-e2a74de7f787e71f", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/farmer-anims/index.html:223", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/farmer-anims/index.html:223"}, "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-f06dbd9a71838243", "name": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.jsep.mjs:51", "shortDescription": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.jsep.mjs:51"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd2fe1c87f363631", "name": "Insecure pattern 'new_function_used' in public/onnx/ort.jspi.bundle.min.mjs:8", "shortDescription": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.jspi.bundle.min.mjs:8"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62be309d461f5f00", "name": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.jspi.mjs:51", "shortDescription": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.jspi.mjs:51"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13f16eb43b6e4de5", "name": "Insecure pattern 'new_function_used' in public/onnx/ort.all.bundle.min.mjs:1805", "shortDescription": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.all.bundle.min.mjs:1805"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a9b7fa8e7224186", "name": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.asyncify.mjs:49", "shortDescription": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.asyncify.mjs:49"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb4eb1c92a2c20b2", "name": "Insecure pattern 'new_function_used' in public/onnx/ort.bundle.min.mjs:9", "shortDescription": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.bundle.min.mjs:9"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-593b7ee120bd6d3c", "name": "Insecure pattern 'new_function_used' in public/onnx/ort.webgpu.bundle.min.mjs:8", "shortDescription": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.webgpu.bundle.min.mjs:8"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f18fda82a25ab987", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:137", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:137"}, "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-49e216b3a94157e4", "name": "Insecure pattern 'node_child_process' in src/app/api/freeform3d-agent/route.ts:25", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/freeform3d-agent/route.ts:25"}, "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-27ab524d7888a07d", "name": "Insecure pattern 'node_child_process' in src/app/api/lesson-tutor/route.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/lesson-tutor/route.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1c59265f630ba4b", "name": "Insecure pattern 'node_child_process' in src/app/api/generate-part/route.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/generate-part/route.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-407c2238f943fb98", "name": "Insecure pattern 'node_child_process' in src/app/api/agent/route.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/agent/route.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77f750ed075e99dc", "name": "Insecure pattern 'node_child_process' in src/app/api/starter-units/draft/route.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/starter-units/draft/route.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1761d22f593911b4", "name": "Insecure pattern 'node_child_process' in src/app/api/chat/route.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/chat/route.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-73f354f6f0753b6e", "name": "Insecure pattern 'node_child_process' in src/app/api/studio-agent/route.ts:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/studio-agent/route.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b2a66d2d446463a", "name": "Insecure pattern 'cors_wildcard' in src/app/api/khan-save/route.ts:8", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/khan-save/route.ts:8"}, "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90491e8f9530892e", "name": "Very large file: public/onnx/ort.all.min.mjs (4675 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.all.min.mjs (4675 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-69298c290a1ec9ad", "name": "Very large file: public/onnx/ort.webgl.min.mjs (1826 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.webgl.min.mjs (1826 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-8bef745bf5277307", "name": "Very large file: public/onnx/ort.jspi.mjs (4467 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.jspi.mjs (4467 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-f26bb3fd2020f764", "name": "Very large file: public/onnx/ort.webgpu.mjs (4467 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.webgpu.mjs (4467 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-f2daf51cbcfe82e4", "name": "Very large file: public/onnx/ort.all.bundle.min.mjs (4680 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.all.bundle.min.mjs (4680 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-e1d3944de609985c", "name": "Very large file: public/onnx/ort.wasm.mjs (3664 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.wasm.mjs (3664 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-a92a608d87b64a42", "name": "Very large file: public/onnx/ort.bundle.min.mjs (2861 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.bundle.min.mjs (2861 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-1bef1cdeaf8b738f", "name": "Very large file: public/onnx/ort.min.mjs (2856 lines)", "shortDescription": {"text": "Very large file: public/onnx/ort.min.mjs (2856 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-3e00c0fab35bddf4", "name": "Very large file: src/components/building/BuildingCanvas.tsx (1661 lines)", "shortDescription": {"text": "Very large file: src/components/building/BuildingCanvas.tsx (1661 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-fd3cdf439ee59af0", "name": "Very large file: src/components/studio/panels/TiledImportPanel.tsx (2168 lines)", "shortDescription": {"text": "Very large file: src/components/studio/panels/TiledImportPanel.tsx (2168 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-ac4ecd56abbc864a", "name": "Very large file: src/components/studio/panels/PackReadonlyView.tsx (2183 lines)", "shortDescription": {"text": "Very large file: src/components/studio/panels/PackReadonlyView.tsx (2183 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-e822d2881e29060e", "name": "Very large file: src/components/studio/panels/TileAssetPropertiesPanel.tsx (2776 lines)", "shortDescription": {"text": "Very large file: src/components/studio/panels/TileAssetPropertiesPanel.tsx (2776 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-5d540765fb063ad7", "name": "Very large file: src/components/studio/panels/TileCharacterPropertiesPanel.tsx (5203 lines)", "shortDescription": {"text": "Very large file: src/components/studio/panels/TileCharacterPropertiesPanel.tsx (5203 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-1b2e8de47715b7ec", "name": "Very large file: src/components/studio/panels/ManaSeedCustomizerModal.tsx (1479 lines)", "shortDescription": {"text": "Very large file: src/components/studio/panels/ManaSeedCustomizerModal.tsx (1479 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-9e3c5c3403ede65d", "name": "Very large file: src/components/studio/panels/TileAssetsView.tsx (13192 lines)", "shortDescription": {"text": "Very large file: src/components/studio/panels/TileAssetsView.tsx (13192 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-bd14045b932266b8", "name": "Very large file: src/components/studio/panels/WorldGenPanel.tsx (1936 lines)", "shortDescription": {"text": "Very large file: src/components/studio/panels/WorldGenPanel.tsx (1936 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-883dced6556cbd9a", "name": "Very large file: src/components/studio/views/TileView.tsx (7696 lines)", "shortDescription": {"text": "Very large file: src/components/studio/views/TileView.tsx (7696 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-3768b9749f6841a5", "name": "Very large file: src/components/studio/views/FreeformView.tsx (1253 lines)", "shortDescription": {"text": "Very large file: src/components/studio/views/FreeformView.tsx (1253 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-1b9b5d97f51db6ed", "name": "Very large file: src/app/extend-mlp/page.tsx (3572 lines)", "shortDescription": {"text": "Very large file: src/app/extend-mlp/page.tsx (3572 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-804f7e7fde9b1887", "name": "Very large file: src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx (4027 lines)", "shortDescription": {"text": "Very large file: src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx (4027 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-1f8fe81e73dc242f", "name": "Very large file: src/app/extend-mlp/tiled-wang-brush/page.tsx (1286 lines)", "shortDescription": {"text": "Very large file: src/app/extend-mlp/tiled-wang-brush/page.tsx (1286 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-f285212f24292877", "name": "Very large file: src/app/extend-mlp/sea-motion/page.tsx (3638 lines)", "shortDescription": {"text": "Very large file: src/app/extend-mlp/sea-motion/page.tsx (3638 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-912d86ae67334f3d", "name": "Very large file: src/lib/wang-tiles.ts (1269 lines)", "shortDescription": {"text": "Very large file: src/lib/wang-tiles.ts (1269 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-8d544b7972d9b6e4", "name": "Very large file: src/lib/fantasy-world-gen.ts (2026 lines)", "shortDescription": {"text": "Very large file: src/lib/fantasy-world-gen.ts (2026 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-af0d13fe773fdc44", "name": "Very large file: src/lib/pixellab-tools.ts (1763 lines)", "shortDescription": {"text": "Very large file: src/lib/pixellab-tools.ts (1763 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-88149bbe8ccfc349", "name": "Very large file: src/lib/wang-world.ts (3088 lines)", "shortDescription": {"text": "Very large file: src/lib/wang-world.ts (3088 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-13ef768f4eab84c7", "name": "Very large file: src/lib/town/crowd-runtime.ts (1492 lines)", "shortDescription": {"text": "Very large file: src/lib/town/crowd-runtime.ts (1492 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-460ebc4daf051442", "name": "Very large file: src/content/lang/zh-CN.generated.ts (6608 lines)", "shortDescription": {"text": "Very large file: src/content/lang/zh-CN.generated.ts (6608 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-fcfded681b45fa38", "name": "Very large file: src/content/lang/hi.generated.ts (6613 lines)", "shortDescription": {"text": "Very large file: src/content/lang/hi.generated.ts (6613 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-e47602a2481ad45a", "name": "Very large file: src/content/lang/pt-BR.generated.ts (6346 lines)", "shortDescription": {"text": "Very large file: src/content/lang/pt-BR.generated.ts (6346 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-cbd43f1be593bec9", "name": "Very large file: src/content/lang/tr.generated.ts (6494 lines)", "shortDescription": {"text": "Very large file: src/content/lang/tr.generated.ts (6494 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-eef3283661f46b51", "name": "Very large file: src/content/lang/ar.generated.ts (6190 lines)", "shortDescription": {"text": "Very large file: src/content/lang/ar.generated.ts (6190 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-ee6059dfdab788b3", "name": "Very large file: src/content/lang/es.generated.ts (6357 lines)", "shortDescription": {"text": "Very large file: src/content/lang/es.generated.ts (6357 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-209ff9dbca29ed86", "name": "Very large file: src/content/lang/de.generated.ts (6388 lines)", "shortDescription": {"text": "Very large file: src/content/lang/de.generated.ts (6388 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-b99fd266d0a96b18", "name": "Very large file: src/content/lang/it.generated.ts (6490 lines)", "shortDescription": {"text": "Very large file: src/content/lang/it.generated.ts (6490 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-79e2282a6656dfb8", "name": "Very large file: src/content/lang/id.generated.ts (6581 lines)", "shortDescription": {"text": "Very large file: src/content/lang/id.generated.ts (6581 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-5076e1543208281b", "name": "Very large file: src/content/lang/fr.generated.ts (6522 lines)", "shortDescription": {"text": "Very large file: src/content/lang/fr.generated.ts (6522 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-3325284d44446164", "name": "Very large file: src/content/lang/ru.generated.ts (6577 lines)", "shortDescription": {"text": "Very large file: src/content/lang/ru.generated.ts (6577 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-5d45f23520c0d396", "name": "Very large file: src/store/tile-store.ts (5472 lines)", "shortDescription": {"text": "Very large file: src/store/tile-store.ts (5472 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": "13 test file(s) for 897 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 104 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 276 placeholder/mock markers across 105 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. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-77da665fbe400b70", "name": "Commented-code block (5 lines) in next.config.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in next.config.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3551c1e7098e8c74", "name": "Commented-code block (7 lines) in scratch-patches/scratch3_animations/index.js:8", "shortDescription": {"text": "Commented-code block (7 lines) in scratch-patches/scratch3_animations/index.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-6f3ddef4eebafa8c", "name": "Commented-code block (12 lines) in tests/plateau-maze.test.mjs:1", "shortDescription": {"text": "Commented-code block (12 lines) in tests/plateau-maze.test.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-a514a6aba67f084f", "name": "Commented-code block (7 lines) in tests/helpers/canvas-model.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in tests/helpers/canvas-model.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-c91c678ccf9246ae", "name": "Commented-code block (6 lines) in tests/helpers/load-ts.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in tests/helpers/load-ts.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-96e673f57eb05ce3", "name": "Commented-code block (8 lines) in scripts/import-mana-seed-farmers.mjs:56", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/import-mana-seed-farmers.mjs:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96c3da12db643c37", "name": "Commented-code block (7 lines) in scripts/import-fantasy-tileset.mjs:177", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/import-fantasy-tileset.mjs:177"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8e827a516b61f83", "name": "Commented-code block (6 lines) in scripts/wfc-train-remote.py:214", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/wfc-train-remote.py:214"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86bf223b3cd15135", "name": "Commented-code block (5 lines) in scripts/sync-farmer-anims.mjs:30", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/sync-farmer-anims.mjs:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-140ab9271bc1834f", "name": "Commented-code block (7 lines) in scripts/wfc-train.py:226", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/wfc-train.py:226"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdfdcb6b79552327", "name": "Commented-code block (5 lines) in scripts/lang/build-courses.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/lang/build-courses.mjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef4d9f7179e2cca9", "name": "Commented-code block (9 lines) in modal/wfc_trainer.py:42", "shortDescription": {"text": "Commented-code block (9 lines) in modal/wfc_trainer.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-938da9c8c1c9e958", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.min.mjs:7", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.min.mjs:7"}, "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-e8cd87c591c3f069", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.min.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.min.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-70390c59008428ea", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.all.min.mjs:1802", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.all.min.mjs:1802"}, "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-2aa818766b9672ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.all.min.mjs:1802", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.all.min.mjs:1802"}, "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-b9ed309ce8560f2e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgl.min.mjs:1802", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgl.min.mjs:1802"}, "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-3555f9e0a61ad0f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.jsep.mjs:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.jsep.mjs:8"}, "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-14978b3975158615", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.bundle.min.mjs:9", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.bundle.min.mjs: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-394e7fcbfa2ea1da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.bundle.min.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.bundle.min.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72f1ffaee69e9919", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.mjs:2648", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.mjs:2648"}, "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-396294cb4f65ba1b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.mjs:1453", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.mjs:1453"}, "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-5d09ce88e0c8def3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.jspi.mjs:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.jspi.mjs:4"}, "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-9e3295a2a1b29b9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.node.min.mjs:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.node.min.mjs:7"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ddeb8e7885a551b9", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.mjs:2648", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.mjs:2648"}, "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-aaee3eba395c455f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.mjs:1453", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.mjs:1453"}, "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-fe8d1a34f7861ee6", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.all.bundle.min.mjs:1807", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.all.bundle.min.mjs:1807"}, "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-f8695b06093bdc29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.all.bundle.min.mjs:1802", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.all.bundle.min.mjs:1802"}, "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-20aa871bc51c2fa5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.asyncify.mjs:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.asyncify.mjs:5"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ecdc905d3a02e0a", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.min.mjs:7", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.min.mjs:7"}, "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-86cd73fc49f5e244", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.min.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.min.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3aa8c9ce811e683b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.bundle.min.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.bundle.min.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a48827333430b75", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.wasm.mjs:2490", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.wasm.mjs:2490"}, "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-bcc30e388f2dd506", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.mjs:1453", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.mjs:1453"}, "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-f913164142db58b5", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.bundle.min.mjs:11", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.bundle.min.mjs:11"}, "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-bee644b5de209907", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.bundle.min.mjs:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.bundle.min.mjs:7"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b2eb9f1c4b1a5dd5", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.min.mjs:6", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.min.mjs:6"}, "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-2294eddf72d9e5c4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.min.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.min.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e1298e95cfd627c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.min.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.min.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a61e5953efe07353", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.mjs:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.mjs:4"}, "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-5f0e7262043fb94c", "name": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.bundle.min.mjs:9", "shortDescription": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.bundle.min.mjs: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-00e50f171f126986", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.bundle.min.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.bundle.min.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-536d7c6a53ded7fd", "name": "Commented-code block (8 lines) in src/components/scribble-overlay.tsx:35", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/scribble-overlay.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-795bb6fdd7786e09", "name": "Commented-code block (5 lines) in src/components/student/StudentApp.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/student/StudentApp.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5b21ec4973509fc", "name": "Commented-code block (6 lines) in src/components/student/RobloxAvatar.tsx:49", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/student/RobloxAvatar.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b8304d18115212e", "name": "Commented-code block (8 lines) in src/components/student/wardrobe/ItemPreview.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/student/wardrobe/ItemPreview.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49d88dab7caf5cd9", "name": "Commented-code block (8 lines) in src/components/student/wardrobe/AvatarScene.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/student/wardrobe/AvatarScene.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f83950a06c2a6b5c", "name": "Commented-code block (5 lines) in src/components/student/wardrobe/avatar-map.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/student/wardrobe/avatar-map.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-194503d80069b5f9", "name": "Commented-code block (7 lines) in src/components/student/crates/Crate3D.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/student/crates/Crate3D.tsx: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-9134b6af8f7453c9", "name": "Commented-code block (8 lines) in src/components/student/crates/CrateUnboxing.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/student/crates/CrateUnboxing.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-654cb1f22b0b0b3c", "name": "Commented-code block (6 lines) in src/components/student/crates/crate-textures.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/student/crates/crate-textures.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7d2aa76dc353181", "name": "Commented-code block (8 lines) in src/components/building/BuildingCanvas.tsx:234", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/building/BuildingCanvas.tsx:234"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21fb61d167651ad2", "name": "Commented-code block (5 lines) in src/components/building/character.ts:119", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/building/character.ts:119"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de978b3773f449e4", "name": "Commented-code block (7 lines) in src/components/teacher-setup/SetupHelpChat.tsx:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/teacher-setup/SetupHelpChat.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a403a0337aae0f8", "name": "Commented-code block (5 lines) in src/components/teacher-setup/ClassroomSetupApp.tsx:71", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/ClassroomSetupApp.tsx:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c270cabdeaf24882", "name": "Commented-code block (5 lines) in src/components/teacher-setup/StepRoster.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/StepRoster.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9afaa53dc511b4a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/teacher-setup/StepRoster.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/teacher-setup/StepRoster.tsx:67"}, "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-0bd083574a862fc2", "name": "Commented-code block (5 lines) in src/components/teacher-setup/ClassroomRosterPreview.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/ClassroomRosterPreview.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f903a1429ca61d4", "name": "Commented-code block (7 lines) in src/components/teacher-setup/StepUnit.tsx:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/teacher-setup/StepUnit.tsx: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-201fc5c94086cca7", "name": "Commented-code block (5 lines) in src/components/teacher-setup/types.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/types.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cdc5a50f1a4c66d", "name": "Commented-code block (5 lines) in src/components/homework/ap-probe/types.ts:71", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/homework/ap-probe/types.ts:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db515c0f6ab27652", "name": "Commented-code block (5 lines) in src/components/homework/tutor/TutorChatbot.tsx:108", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/homework/tutor/TutorChatbot.tsx:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ed3f353c8cdb2af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/homework/tutor/TutorChatbot.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/homework/tutor/TutorChatbot.tsx: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-de9be2d3c92046e7", "name": "Commented-code block (5 lines) in src/components/homework/tutor/TutorAvatar.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/homework/tutor/TutorAvatar.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3ae940bd67f231e", "name": "Commented-code block (6 lines) in src/components/scratch/BlocksGameShell.tsx:89", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/scratch/BlocksGameShell.tsx:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14ff1f8006fcc524", "name": "Commented-code block (8 lines) in src/components/scratch/BricksPanels.tsx:8", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/scratch/BricksPanels.tsx: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-877ef97365a102eb", "name": "Commented-code block (12 lines) in src/components/studio/StudioLayout.tsx:14", "shortDescription": {"text": "Commented-code block (12 lines) in src/components/studio/StudioLayout.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe8ecd9b135716c5", "name": "Commented-code block (6 lines) in src/components/studio/WangHeadlessBaker.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/studio/WangHeadlessBaker.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c28f1c7f9b3a7db9", "name": "Commented-code block (5 lines) in src/components/studio/TopMenuBar.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/TopMenuBar.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-739cb26c5bee2837", "name": "Commented-code block (7 lines) in src/components/studio/WangChunkStreamer.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/studio/WangChunkStreamer.tsx: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-f329dca58f395d1f", "name": "Commented-code block (5 lines) in src/components/studio/StudioOverlay.tsx:50", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/StudioOverlay.tsx:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a4a9b8bd4df3911", "name": "Commented-code block (8 lines) in src/components/studio/LeftPanel.tsx:10", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/studio/LeftPanel.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-311a6ff3e82ac1b6", "name": "Commented-code block (5 lines) in src/components/studio/GameToolbar.tsx:53", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/GameToolbar.tsx:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-615217f35f57e0ce", "name": "Commented-code block (5 lines) in src/components/studio/StudioActions.tsx:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/StudioActions.tsx:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd801df46b5d6453", "name": "Commented-code block (7 lines) in src/components/studio/RightPanel.tsx:11", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/studio/RightPanel.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f50cd1abf501b2c5", "name": "Commented-code block (6 lines) in src/components/studio/modals/NewGameDialog.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/studio/modals/NewGameDialog.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dafb047b9fcac7f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/SlimeShowcasePanel.tsx:186", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/SlimeShowcasePanel.tsx:186"}, "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-93075ded43b2c93e", "name": "Commented-code block (5 lines) in src/components/studio/panels/MarketplaceLibraryPanel.tsx:241", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/MarketplaceLibraryPanel.tsx:241"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc4b4f7a8264e7bf", "name": "Commented-code block (5 lines) in src/components/studio/panels/ConnectorsPanel.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/ConnectorsPanel.tsx: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-b2435496e4b85ae7", "name": "Commented-code block (5 lines) in src/components/studio/panels/TiledImportPanel.tsx:151", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TiledImportPanel.tsx:151"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b884ec14b0a1fe4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TiledImportPanel.tsx:1973", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TiledImportPanel.tsx:1973"}, "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-19dfaf27a296a289", "name": "Commented-code block (5 lines) in src/components/studio/panels/PackReadonlyView.tsx:230", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/PackReadonlyView.tsx:230"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7724619562c7a2e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/PackReadonlyView.tsx:1666", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/PackReadonlyView.tsx:1666"}, "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-f64a53465ffb4ce5", "name": "Commented-code block (6 lines) in src/components/studio/panels/PixelLabToolForm.tsx:522", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/studio/panels/PixelLabToolForm.tsx:522"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7af17aa81a84283a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/PixelLabToolForm.tsx:509", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/PixelLabToolForm.tsx:509"}, "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-68ceca66deb5bcaf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/ProceduralElementPropertiesPanel.tsx:233", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/ProceduralElementPropertiesPanel.tsx:233"}, "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-71eda9ab0150f35b", "name": "Commented-code block (5 lines) in src/components/studio/panels/ScenePanel.tsx:163", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/ScenePanel.tsx:163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-129a045fffc4f1e2", "name": "Commented-code block (5 lines) in src/components/studio/panels/TileAssetPropertiesPanel.tsx:188", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TileAssetPropertiesPanel.tsx:188"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34225c4a8cf54f03", "name": "Commented-code block (6 lines) in src/components/studio/panels/RecreateOptionsDialog.tsx:131", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/studio/panels/RecreateOptionsDialog.tsx:131"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4dba30ee9c2c76a1", "name": "Commented-code block (5 lines) in src/components/studio/panels/TilesetGenerationForm.tsx:31", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TilesetGenerationForm.tsx:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb18a7618f4cdb29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TilesetGenerationForm.tsx:276", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TilesetGenerationForm.tsx:276"}, "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-34cc1c136d4d8ba0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/CharacterImportOverlay.tsx:161", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/CharacterImportOverlay.tsx:161"}, "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-acfe2727f91d6e3e", "name": "Commented-code block (5 lines) in src/components/studio/panels/TileCharacterPropertiesPanel.tsx:92", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TileCharacterPropertiesPanel.tsx:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ebe0d2ec6b3f9dbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TileCharacterPropertiesPanel.tsx:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TileCharacterPropertiesPanel.tsx:226"}, "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-3af2505a26de41a8", "name": "Commented-code block (6 lines) in src/components/studio/panels/ManaSeedCustomizerModal.tsx:237", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/studio/panels/ManaSeedCustomizerModal.tsx:237"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99eff16081d24830", "name": "Commented-code block (5 lines) in src/components/studio/panels/TileTexturePropertiesPanel.tsx:106", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TileTexturePropertiesPanel.tsx:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c5b8b15acd2e7ab", "name": "Commented-code block (6 lines) in src/components/studio/panels/TileSheetPanel.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/studio/panels/TileSheetPanel.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c890e9cec1b888b", "name": "Legacy-named symbol `bulkAnimateHideOld` in src/components/studio/panels/TileAssetsView.tsx:5844", "shortDescription": {"text": "Legacy-named symbol `bulkAnimateHideOld` in src/components/studio/panels/TileAssetsView.tsx:5844"}, "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-2f7b83904fbdb0d4", "name": "Commented-code block (9 lines) in src/components/studio/panels/TileAssetsView.tsx:155", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/studio/panels/TileAssetsView.tsx:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2150576acd9a3966", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TileAssetsView.tsx:6871", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TileAssetsView.tsx:6871"}, "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-cde89381eec48b69", "name": "Commented-code block (5 lines) in src/components/studio/panels/WorldGenPanel.tsx:82", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/panels/WorldGenPanel.tsx:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3fbf69f135b0d82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/WorldGenPanel.tsx:148", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/WorldGenPanel.tsx:148"}, "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-4f1bb92fe93f67ed", "name": "Commented-code block (5 lines) in src/components/studio/views/FreeformView3D.tsx:246", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/views/FreeformView3D.tsx:246"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f072fcbb42cdadce", "name": "Commented-code block (8 lines) in src/components/studio/views/RoomZoneOverlay.tsx:99", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/studio/views/RoomZoneOverlay.tsx:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed09b0a0b23129be", "name": "Commented-code block (11 lines) in src/components/studio/views/WorkspaceView.tsx:12", "shortDescription": {"text": "Commented-code block (11 lines) in src/components/studio/views/WorkspaceView.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1310144600cfedc2", "name": "Commented-code block (5 lines) in src/components/studio/views/FlowchartView.tsx:79", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/views/FlowchartView.tsx:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb408d62d581b25a", "name": "Commented-code block (5 lines) in src/components/studio/views/TileView.tsx:853", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/views/TileView.tsx:853"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ac619995f3c255e", "name": "Commented-code block (5 lines) in src/components/studio/views/RoomViewSwitcher.tsx:97", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/views/RoomViewSwitcher.tsx:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdb991c9952d2813", "name": "Commented-code block (6 lines) in src/components/studio/views/FreeformView.tsx:184", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/studio/views/FreeformView.tsx:184"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ba0c053e3603f73", "name": "Commented-code block (5 lines) in src/components/studio/views/freeform3d/PlayHUD.tsx:163", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/views/freeform3d/PlayHUD.tsx:163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a12e1b62033a51d4", "name": "Commented-code block (5 lines) in src/components/studio/views/freeform3d/PlayTicker.tsx:153", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/studio/views/freeform3d/PlayTicker.tsx:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30682682d9f4ae3d", "name": "Commented-code block (6 lines) in src/components/teacher/teacher-data-context.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/teacher/teacher-data-context.tsx: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-4c520dfe8d71fc7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/teacher/teacher-data-context.tsx:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/teacher/teacher-data-context.tsx:130"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce3111c5113f2f5d", "name": "Commented-code block (8 lines) in src/components/teacher/NewAssignment.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/teacher/NewAssignment.tsx: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-b0bd01ee3af3e753", "name": "Commented-code block (6 lines) in src/components/teacher/sample-data.ts:30", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/teacher/sample-data.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55ab81bb2db57b76", "name": "Commented-code block (5 lines) in src/components/teacher/shared.tsx:54", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/teacher/shared.tsx:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee561085f768f269", "name": "Commented-code block (5 lines) in src/components/teacher/TeacherApp.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/teacher/TeacherApp.tsx: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-ef80fad2f14d22dc", "name": "Commented-code block (6 lines) in src/components/teach/LiveHost.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/teach/LiveHost.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4aecf81ea805e58", "name": "Commented-code block (5 lines) in src/app/extend-mlp/page.tsx:124", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/page.tsx:124"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f87202e194c5bd91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/page.tsx:3483", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/page.tsx:3483"}, "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-defb024867dd118f", "name": "Commented-code block (5 lines) in src/app/extend-mlp/maze/page.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/maze/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36be0f8616f4abed", "name": "Commented-code block (7 lines) in src/app/extend-mlp/maze/looks.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/extend-mlp/maze/looks.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d198723b3734d960", "name": "Commented-code block (7 lines) in src/app/extend-mlp/rock-slope-pack/overlays.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/extend-mlp/rock-slope-pack/overlays.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-789a23e69109ea6a", "name": "Commented-code block (5 lines) in src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbc1ca2ea6772daa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:473", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:473"}, "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-7fdd5d90a469f2ab", "name": "Commented-code block (8 lines) in src/app/extend-mlp/rock-slopes/page.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/rock-slopes/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e753f8a044a8857b", "name": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/use-mesa-render.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/use-mesa-render.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3fabdfdfb3f821d", "name": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/mesa-generate.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/mesa-generate.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f2ccf26c71c0004", "name": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/page.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54fc82cf344a4ffa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tileset-compare/page.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tileset-compare/page.tsx:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85dc887e9b41c5d6", "name": "Commented-code block (15 lines) in src/app/extend-mlp/tiled-wang-brush/tile-match.ts:3", "shortDescription": {"text": "Commented-code block (15 lines) in src/app/extend-mlp/tiled-wang-brush/tile-match.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e25bd9788841095", "name": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/maze-blob.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/maze-blob.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e5a9afa23852771", "name": "Commented-code block (11 lines) in src/app/extend-mlp/tiled-wang-brush/maze-validate.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/extend-mlp/tiled-wang-brush/maze-validate.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e174d80f8670a5c", "name": "Commented-code block (8 lines) in src/app/extend-mlp/tiled-wang-brush/export-csv.ts:34", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/tiled-wang-brush/export-csv.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a18896e587d3863b", "name": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/export-level-map.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/export-level-map.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5757c27ef388c4e", "name": "Commented-code block (10 lines) in src/app/extend-mlp/tiled-wang-brush/stairs.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/extend-mlp/tiled-wang-brush/stairs.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1463ce81525ae551", "name": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/stair-validity.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/stair-validity.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a8a9b9efc129bc3", "name": "Commented-code block (15 lines) in src/app/extend-mlp/tiled-wang-brush/wangid.ts:23", "shortDescription": {"text": "Commented-code block (15 lines) in src/app/extend-mlp/tiled-wang-brush/wangid.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27e77dcdf629442e", "name": "Commented-code block (11 lines) in src/app/extend-mlp/tiled-wang-brush/maze-stamp.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/app/extend-mlp/tiled-wang-brush/maze-stamp.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72975b57ca266876", "name": "Commented-code block (10 lines) in src/app/extend-mlp/tiled-wang-brush/maze-plan.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/extend-mlp/tiled-wang-brush/maze-plan.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb19995c0910becf", "name": "Commented-code block (6 lines) in src/app/extend-mlp/tiled-wang-brush/maze-carve.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/tiled-wang-brush/maze-carve.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54f9f8b40149db00", "name": "Commented-code block (12 lines) in src/app/extend-mlp/tiled-wang-brush/page.tsx:5", "shortDescription": {"text": "Commented-code block (12 lines) in src/app/extend-mlp/tiled-wang-brush/page.tsx: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-e728d1935578d093", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tiled-wang-brush/page.tsx:240", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tiled-wang-brush/page.tsx:240"}, "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-ec296ca48dee6157", "name": "Commented-code block (9 lines) in src/app/extend-mlp/tiled-wang-brush/use-render-canvas.ts:159", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/extend-mlp/tiled-wang-brush/use-render-canvas.ts:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3abd6a52b97ee4e9", "name": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/use-tile-overlays.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/use-tile-overlays.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42887cb0780ca879", "name": "Commented-code block (9 lines) in src/app/extend-mlp/tiled-wang-brush/face-tiles.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/extend-mlp/tiled-wang-brush/face-tiles.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c45b934ac7005399", "name": "Commented-code block (12 lines) in src/app/extend-mlp/tiled-wang-brush/maze-generate.ts:45", "shortDescription": {"text": "Commented-code block (12 lines) in src/app/extend-mlp/tiled-wang-brush/maze-generate.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6442448eb3871f22", "name": "Commented-code block (8 lines) in src/app/extend-mlp/tiled-wang-brush/cursor-paint.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/tiled-wang-brush/cursor-paint.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e2839c47f3dd56c", "name": "Commented-code block (5 lines) in src/app/extend-mlp/sea-motion/page.tsx:124", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/sea-motion/page.tsx:124"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-113dc6133456d249", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/sea-motion/page.tsx:3549", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/sea-motion/page.tsx:3549"}, "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-77322b579ab01da7", "name": "Commented-code block (7 lines) in src/app/extend-mlp/rock-slope-level2/page.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/extend-mlp/rock-slope-level2/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2a5e3d040081fe8", "name": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-automap/page.tsx:124", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-automap/page.tsx:124"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5dc6a9fb97cf1c9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tiled-automap/page.tsx:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tiled-automap/page.tsx:215"}, "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-d8c32d8956fbdb44", "name": "Commented-code block (8 lines) in src/app/extend-mlp/shore-preview/page.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/shore-preview/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eceb3264b124e791", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/shore-preview/page.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/shore-preview/page.tsx: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-7c896d5a11ac9490", "name": "Commented-code block (5 lines) in src/app/play/quiz/[pin]/page.tsx:609", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/play/quiz/[pin]/page.tsx:609"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a215fcc08e76e83", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/play/quiz/[pin]/page.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/play/quiz/[pin]/page.tsx: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-87dda7416187f3d6", "name": "Commented-code block (7 lines) in src/app/play/race/[pin]/page.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/play/race/[pin]/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-016c7759be8d80a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/play/race/[pin]/page.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/play/race/[pin]/page.tsx:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7afa6a92d876c97", "name": "Commented-code block (6 lines) in src/app/play/[gameId]/page.tsx:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/play/[gameId]/page.tsx: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-f954947408c74a7d", "name": "Commented-code block (5 lines) in src/app/api/lang/profile/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/lang/profile/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ee22bdb86351fd5", "name": "Commented-code block (6 lines) in src/app/api/scenes/freeform-2d/route.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/scenes/freeform-2d/route.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32ea5611cb470501", "name": "Commented-code block (6 lines) in src/app/api/schools/search/route.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/schools/search/route.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e90219c574ddec3d", "name": "Commented-code block (7 lines) in src/app/api/tutor-help/route.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/tutor-help/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f21eeb2f1c277333", "name": "Commented-code block (7 lines) in src/app/api/tile-characters/route.ts:16", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/tile-characters/route.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3016e0554235f229", "name": "Commented-code block (5 lines) in src/app/api/games/route.ts:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/games/route.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01224071d2b29ad1", "name": "Commented-code block (6 lines) in src/app/api/games/save/route.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/games/save/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-908a9793908abeb5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab/library/route.ts:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab/library/route.ts:156"}, "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-6a06942a1e202b5b", "name": "Commented-code block (5 lines) in src/app/api/pixellab/library/preview/route.ts:77", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/pixellab/library/preview/route.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01b6197ae2a17246", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab/library/preview/route.ts:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab/library/preview/route.ts:102"}, "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-87ffb5330828423a", "name": "Commented-code block (7 lines) in src/app/api/pixellab/library/characters/[id]/route.ts:217", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/pixellab/library/characters/[id]/route.ts:217"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78788743d71a0fd4", "name": "Commented-code block (6 lines) in src/app/api/pixellab/run/[mcpName]/route.ts:226", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/pixellab/run/[mcpName]/route.ts:226"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfc61e388bbee998", "name": "Commented-code block (6 lines) in src/app/api/moderation/queue/route.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/moderation/queue/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da6ffe87cc39d46b", "name": "Commented-code block (5 lines) in src/app/api/moderation/reports/[id]/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/moderation/reports/[id]/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-073bb3d0049591c7", "name": "Commented-code block (17 lines) in src/app/api/agent/route.ts:259", "shortDescription": {"text": "Commented-code block (17 lines) in src/app/api/agent/route.ts:259"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5df42867499d0469", "name": "Commented-code block (6 lines) in src/app/api/tile-objects/route.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/tile-objects/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56020f8e2e66b19d", "name": "Commented-code block (7 lines) in src/app/api/students/join/route.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/students/join/route.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51c823e96ee32174", "name": "Commented-code block (6 lines) in src/app/api/students/link/route.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/students/link/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fd804e367fc3162", "name": "Commented-code block (6 lines) in src/app/api/pixellab-transfer-outfit/route.ts:176", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/pixellab-transfer-outfit/route.ts:176"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a14c1b2d2f5826a9", "name": "Commented-code block (5 lines) in src/app/api/tile-character-animations/route.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/tile-character-animations/route.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fbdf5b27f65eedce", "name": "Commented-code block (5 lines) in src/app/api/classes/route.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/classes/route.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14ec372ff500d209", "name": "Commented-code block (7 lines) in src/app/api/classes/[classId]/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/classes/[classId]/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f4c7f8dd5492858", "name": "Commented-code block (5 lines) in src/app/api/classes/lookup/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/classes/lookup/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a43eaabaa1d7143e", "name": "Commented-code block (5 lines) in src/app/api/pixellab-character-animation/route.ts:182", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/pixellab-character-animation/route.ts:182"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87659b29a62cb885", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab-character-animation/route.ts:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab-character-animation/route.ts:162"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4485f082cb504bb", "name": "Commented-code block (5 lines) in src/app/api/quiz/rooms/[roomId]/answer/image/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiz/rooms/[roomId]/answer/image/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2438e7312d4ff677", "name": "Commented-code block (5 lines) in src/app/api/quiz/rooms/[roomId]/advance/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/quiz/rooms/[roomId]/advance/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-997c2e89916c9b0e", "name": "Commented-code block (5 lines) in src/app/api/admin/teachers/[googleSub]/role/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/teachers/[googleSub]/role/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0da86636bb310ef2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/route.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/route.ts:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5149034280dfdbea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/route.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/route.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-284c92816c444f7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/topics/route.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/topics/route.ts:23"}, "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-184c8a6df9983a7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/announcements/route.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/announcements/route.ts:24"}, "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-c6f46113703d824f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/coursework/route.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/coursework/route.ts:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb5c0d5cf725023a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/people/route.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/people/route.ts:26"}, "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-28fc3610cced8e7a", "name": "Commented-code block (5 lines) in src/app/api/pixellab-recreate-character/route.ts:127", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/pixellab-recreate-character/route.ts:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ca98dd290200f75", "name": "Commented-code block (5 lines) in src/app/api/credits/route.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/credits/route.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22e30a639af39a4a", "name": "Commented-code block (5 lines) in src/app/api/automap/route.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/automap/route.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb9ba6535e7b4b59", "name": "Commented-code block (6 lines) in src/app/api/coppa/data-request/route.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/coppa/data-request/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a68eac9455a29f6", "name": "Commented-code block (5 lines) in src/app/api/pack-curation/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/pack-curation/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-faddbeebc70c3b25", "name": "Commented-code block (6 lines) in src/app/api/tile-sheets/route.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/tile-sheets/route.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b4d68b13e4ef950", "name": "Commented-code block (5 lines) in src/app/extend-wfc/page.tsx:231", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/extend-wfc/page.tsx: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-fef7a971fc568065", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-wfc/page.tsx:186", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-wfc/page.tsx:186"}, "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-e119ccbc22907170", "name": "Commented-code block (6 lines) in src/app/extend-train/page.tsx:412", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/extend-train/page.tsx:412"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdc7ed8dd79a3465", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-train/page.tsx:261", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-train/page.tsx:261"}, "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-9b5011e56a8f2a69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/world-gen-demo/page.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/world-gen-demo/page.tsx:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17e96fd0ca4c5315", "name": "Commented-code block (5 lines) in src/app/teach/quiz/page.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/teach/quiz/page.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1eefca59dfc3d8e8", "name": "Commented-code block (5 lines) in src/app/teach/race/page.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/teach/race/page.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd4b2a0fdb71a4e9", "name": "Commented-code block (6 lines) in src/lib/export-bundle.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/export-bundle.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0e4d712fde8817a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-cloud.ts:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-cloud.ts: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-8805219043d95109", "name": "Commented-code block (6 lines) in src/lib/auth.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/auth.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bedbf54c5d4be060", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/object-cloud.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/object-cloud.ts:60"}, "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-baf0b912198d26fb", "name": "Commented-code block (6 lines) in src/lib/tiled-automap.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/tiled-automap.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28544413fd100502", "name": "Commented-code block (5 lines) in src/lib/wang-bake.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/wang-bake.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-575122cc67777ffb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/wang-bake.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/wang-bake.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1baeacec59a07b4c", "name": "Commented-code block (11 lines) in src/lib/tile-map-sync.ts:17", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/tile-map-sync.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-504fda7871debb5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-map-sync.ts:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-map-sync.ts:132"}, "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-30136cba707466a4", "name": "Commented-code block (5 lines) in src/lib/tile-realtime.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tile-realtime.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42da1e5bd3f1c115", "name": "Commented-code block (5 lines) in src/lib/character-actions.ts:41", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/character-actions.ts:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54390731b0a1d23b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pack-curation-cloud.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pack-curation-cloud.ts:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91377ed23c29b1c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-sheet-cloud.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-sheet-cloud.ts:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02d9f11f26890089", "name": "Commented-code block (7 lines) in src/lib/restyle-image-tiles.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/restyle-image-tiles.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca7c258fbb7dddf7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/restyle-image-tiles.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/restyle-image-tiles.ts:64"}, "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-ee6f9faabf611800", "name": "Commented-code block (8 lines) in src/lib/tile-slicer.ts:128", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/tile-slicer.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d9a92432506d5ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/user-workspace-cloud.ts:163", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/user-workspace-cloud.ts:163"}, "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-c6e1e6467517a125", "name": "Commented-code block (6 lines) in src/lib/rock-slope-tilesets.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/rock-slope-tilesets.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57179525fff058f1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/rock-slope-tilesets.ts:158", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/rock-slope-tilesets.ts:158"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d0a4bb6559f4c83", "name": "Commented-code block (5 lines) in src/lib/supabase-server.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/supabase-server.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01cb0d1f59829cbf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-group-cloud.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-group-cloud.ts: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-3cb3a6de1f5f06bb", "name": "Commented-code block (8 lines) in src/lib/tiled-import.ts:528", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/tiled-import.ts:528"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b7c9b7f028c19e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/object-class-cloud.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/object-class-cloud.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-06dd52f15b1219cb", "name": "Commented-code block (5 lines) in src/lib/world-gen.ts:286", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/world-gen.ts:286"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fb873f87c827689", "name": "Commented-code block (5 lines) in src/lib/character-logic.ts:301", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/character-logic.ts:301"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdff6ad10ab14f79", "name": "Commented-code block (5 lines) in src/lib/tile-junction-scatter.ts:124", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tile-junction-scatter.ts:124"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3afcd3d2a6fc883", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pixellab-import.ts:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pixellab-import.ts:96"}, "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-1e2ef5d109d2c075", "name": "Commented-code block (11 lines) in src/lib/wang-tiles.ts:179", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/wang-tiles.ts:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5f01b9ebd067ef1", "name": "Commented-code block (5 lines) in src/lib/tiled-wangset-f26a0b0.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/tiled-wangset-f26a0b0.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0e496d4863422c7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiled-wangset-f26a0b0.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiled-wangset-f26a0b0.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6896acf8ce38205", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/freesound.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/freesound.ts:41"}, "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-83cd09063c79e93d", "name": "Commented-code block (8 lines) in src/lib/local-dev-cloud-cache.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/local-dev-cloud-cache.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a71e8077ca96f055", "name": "Commented-code block (8 lines) in src/lib/tmx-tilesets.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/tmx-tilesets.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbd5b55d52c7144c", "name": "Commented-code block (6 lines) in src/lib/tiled-wangset.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/tiled-wangset.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-990bec47f76661c0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiled-wangset.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiled-wangset.ts:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e1dc9f8e2243fc5", "name": "Commented-code block (5 lines) in src/lib/character-anim-poller.ts:128", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/character-anim-poller.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dadcf820088cb668", "name": "Commented-code block (9 lines) in src/lib/fantasy-world-gen.ts:241", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/fantasy-world-gen.ts:241"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a695af496a114f19", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/fantasy-world-gen.ts:233", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/fantasy-world-gen.ts:233"}, "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-996123a93bfabb2d", "name": "Commented-code block (8 lines) in src/lib/rate-limit.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/rate-limit.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37d287c812b7a87c", "name": "Commented-code block (6 lines) in src/lib/tile-collider-hydrate.ts:172", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/tile-collider-hydrate.ts:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8a26362ac44ef9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-map-cloud.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-map-cloud.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9877b69fcab727a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pixellab.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pixellab.ts: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-adb4f29e94b30ab0", "name": "Commented-code block (5 lines) in src/lib/wang-world-farms.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/wang-world-farms.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfe2856eb45e51af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/lang-cloud.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/lang-cloud.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e06f715d888de941", "name": "Commented-code block (5 lines) in src/lib/wang-world-stairs.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/wang-world-stairs.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b39f623e68e97f8f", "name": "Commented-code block (5 lines) in src/lib/teacher-auth.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/teacher-auth.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d60f74211459705a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-cloud.ts:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-cloud.ts:153"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dc51ce4d62925c30", "name": "Commented-code block (5 lines) in src/lib/pixellab-tools.ts:826", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/pixellab-tools.ts:826"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e6e6c043bc87fef", "name": "Commented-code block (5 lines) in src/lib/wang-world-settlements.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/wang-world-settlements.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b36f3be32891762f", "name": "Commented-code block (8 lines) in src/lib/tile-group-sync.ts:30", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/tile-group-sync.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc2763412018266f", "name": "Commented-code block (6 lines) in src/lib/wang-world.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/wang-world.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89c9df1bddf8f303", "name": "Commented-code block (6 lines) in src/lib/character-template-anim-poller.ts:192", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/character-template-anim-poller.ts:192"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48f2f9400ba77be4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-template-anim-poller.ts:522", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-template-anim-poller.ts:522"}, "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-ce3a1a5778b2fe91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/arcade/content.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/arcade/content.ts:67"}, "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-e7c4231ee4a94697", "name": "Commented-code block (5 lines) in src/lib/town/combat-runtime.ts:547", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/town/combat-runtime.ts:547"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-484d3e6ee6bf56ae", "name": "Commented-code block (5 lines) in src/lib/town/crowd-pathfind.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/town/crowd-pathfind.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-239f2886160bc352", "name": "Commented-code block (5 lines) in src/lib/town/crowd-runtime.ts:561", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/town/crowd-runtime.ts:561"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4371f1f1c9d4fe7b", "name": "Commented-code block (5 lines) in src/lib/kid-style-3d/play-controller.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/play-controller.ts:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-579119d3a9872d4d", "name": "Commented-code block (5 lines) in src/lib/kid-style-3d/world-apply.ts:107", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/world-apply.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7283c745385fca1", "name": "Commented-code block (5 lines) in src/lib/kid-style-3d/gizmo.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/gizmo.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8100878333ecf3a9", "name": "Commented-code block (11 lines) in src/lib/kid-style-3d/engine.ts:107", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/kid-style-3d/engine.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66a036627ca5930f", "name": "Commented-code block (6 lines) in src/lib/kid-style-3d/prefabs/nature.ts:235", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/kid-style-3d/prefabs/nature.ts:235"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fce44957d638fa67", "name": "Commented-code block (5 lines) in src/lib/kid-style-3d/prefabs/buildings.ts:76", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/prefabs/buildings.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-012546aabb5b8da1", "name": "Commented-code block (5 lines) in src/lib/kid-style-3d/prefabs/character.ts:119", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/prefabs/character.ts:119"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df0bc2cf72bad240", "name": "Commented-code block (10 lines) in src/lib/tile-publish/build-game-files.ts:6", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/tile-publish/build-game-files.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b8fdc6ab5981ff5", "name": "Commented-code block (7 lines) in src/lib/tile-publish/bake-world.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/tile-publish/bake-world.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d98c997db84e6777", "name": "Commented-code block (10 lines) in src/lib/tile-publish/index.ts:5", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/tile-publish/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20e2dcb9071b60e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-publish/index.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-publish/index.ts:93"}, "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-f21d27f9b1f46ded", "name": "Commented-code block (6 lines) in src/lib/quiz/use-room.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/quiz/use-room.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efb7c73d554ae954", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/studio/save-game.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/studio/save-game.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9cfc2339918c31a", "name": "Commented-code block (5 lines) in src/lib/game-engine/engine.js:57", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/game-engine/engine.js:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a0276f59e82bcd3", "name": "Commented-code block (6 lines) in src/lib/game-engine/voxel/controls.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/game-engine/voxel/controls.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-e16454decb761a93", "name": "Commented-code block (5 lines) in src/lib/game-engine/voxel/mesher.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/mesher.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-529050cbe7dbc7c4", "name": "Commented-code block (5 lines) in src/lib/game-engine/voxel/raycast.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/raycast.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-d29c4afde7f1d314", "name": "Commented-code block (6 lines) in src/lib/game-engine/voxel/blocks.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/game-engine/voxel/blocks.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-32069dc458bb0618", "name": "Commented-code block (5 lines) in src/lib/game-engine/voxel/world.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/world.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-f688a79c6c1c747c", "name": "Commented-code block (5 lines) in src/lib/game-engine/voxel/atlas.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/atlas.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-f68a264e85d6ff3f", "name": "Commented-code block (7 lines) in src/lib/mana-seed/composer.ts:68", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/mana-seed/composer.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-808a3287b55ea7ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-game-state.ts:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-game-state.ts:164"}, "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-c4ce1800feecaf2c", "name": "Commented-code block (8 lines) in src/hooks/use-live-world-streamer.ts:185", "shortDescription": {"text": "Commented-code block (8 lines) in src/hooks/use-live-world-streamer.ts:185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7a82a9c70dfe073", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-live-world-streamer.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-live-world-streamer.ts:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8df8e30222b8da4b", "name": "Commented-code block (7 lines) in src/store/freeform3d-store.ts:774", "shortDescription": {"text": "Commented-code block (7 lines) in src/store/freeform3d-store.ts:774"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d21eb392820fd8c", "name": "Commented-code block (5 lines) in src/store/auth-store.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/store/auth-store.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31559ea03326be84", "name": "Commented-code block (5 lines) in src/store/studio-store.ts:38", "shortDescription": {"text": "Commented-code block (5 lines) in src/store/studio-store.ts:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-613316ae3c83d0b2", "name": "Commented-code block (5 lines) in src/store/tile-store.ts:2356", "shortDescription": {"text": "Commented-code block (5 lines) in src/store/tile-store.ts:2356"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adac65a8989381b0", "name": "Commented-code block (6 lines) in src/store/room-store.ts:305", "shortDescription": {"text": "Commented-code block (6 lines) in src/store/room-store.ts:305"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b37b5068a010761e", "name": "Commented-code block (6 lines) in src/store/data-source-store.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/store/data-source-store.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52b398a1bcad38e7", "name": "Commented-code block (6 lines) in src/store/freeform-store.ts:714", "shortDescription": {"text": "Commented-code block (6 lines) in src/store/freeform-store.ts:714"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/wfc-train-remote.py:owner_for_gid, scripts/wfc-train.py:owner_for_gid\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09d3643df22f09d6", "name": "Dangling fetch: GET /api/students/me (src/components/student/StudentApp.tsx:96)", "shortDescription": {"text": "Dangling fetch: GET /api/students/me (src/components/student/StudentApp.tsx:96)"}, "fullDescription": {"text": "`src/components/student/StudentApp.tsx:96` calls `GET /api/students/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/me`\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-c4e0c938abbf220f", "name": "Dangling fetch: POST /api/students/link (src/components/student/StudentApp.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/students/link (src/components/student/StudentApp.tsx:153)"}, "fullDescription": {"text": "`src/components/student/StudentApp.tsx:153` calls `POST /api/students/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/link`\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-84d979dd423b0d1c", "name": "Dangling fetch: POST /api/chat (src/components/teacher-setup/SetupHelpChat.tsx:142)", "shortDescription": {"text": "Dangling fetch: POST /api/chat (src/components/teacher-setup/SetupHelpChat.tsx:142)"}, "fullDescription": {"text": "`src/components/teacher-setup/SetupHelpChat.tsx:142` 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-e4874c7f51d79a74", "name": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher-setup/ShareScreen.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher-setup/ShareScreen.tsx:44)"}, "fullDescription": {"text": "`src/components/teacher-setup/ShareScreen.tsx:44` calls `GET /api/classes/${classId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes/<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-ab0deae791260e0a", "name": "Dangling fetch: POST /api/classroom/courses/${cls.classroom_course_id}/announcements (src/components/teacher-setup/Share", "shortDescription": {"text": "Dangling fetch: POST /api/classroom/courses/${cls.classroom_course_id}/announcements (src/components/teacher-setup/ShareScreen.tsx:80)"}, "fullDescription": {"text": "`src/components/teacher-setup/ShareScreen.tsx:80` calls `POST /api/classroom/courses/${cls.classroom_course_id}/announcements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classroom/courses/<p>/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-5e35aec88c16428a", "name": "Dangling fetch: POST /api/classes (src/components/teacher-setup/ClassroomSetupApp.tsx:151)", "shortDescription": {"text": "Dangling fetch: POST /api/classes (src/components/teacher-setup/ClassroomSetupApp.tsx:151)"}, "fullDescription": {"text": "`src/components/teacher-setup/ClassroomSetupApp.tsx:151` calls `POST /api/classes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes`\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-751bb4722accd573", "name": "Dangling fetch: POST /api/starter-units (src/components/teacher-setup/ClassroomSetupApp.tsx:189)", "shortDescription": {"text": "Dangling fetch: POST /api/starter-units (src/components/teacher-setup/ClassroomSetupApp.tsx:189)"}, "fullDescription": {"text": "`src/components/teacher-setup/ClassroomSetupApp.tsx:189` calls `POST /api/starter-units` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/starter-units`\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-2192404834109fc7", "name": "Dangling fetch: POST /api/classes (src/components/teacher-setup/StepRoster.tsx:67)", "shortDescription": {"text": "Dangling fetch: POST /api/classes (src/components/teacher-setup/StepRoster.tsx:67)"}, "fullDescription": {"text": "`src/components/teacher-setup/StepRoster.tsx:67` calls `POST /api/classes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes`\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-46f7f943d69a159f", "name": "Dangling fetch: GET /api/starter-units?subject=${encodeURIComponent(data.classSubject)}&grade=${encodeURIComponent(data.", "shortDescription": {"text": "Dangling fetch: GET /api/starter-units?subject=${encodeURIComponent(data.classSubject)}&grade=${encodeURIComponent(data.grade)} (src/components/teacher-setup/StepUnit.tsx:80)"}, "fullDescription": {"text": "`src/components/teacher-setup/StepUnit.tsx:80` calls `GET /api/starter-units?subject=${encodeURIComponent(data.classSubject)}&grade=${encodeURIComponent(data.grade)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/starter-units`\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-0bcc0d0f56f7bf2c", "name": "Dangling fetch: POST /api/starter-units/draft (src/components/teacher-setup/StepUnit.tsx:104)", "shortDescription": {"text": "Dangling fetch: POST /api/starter-units/draft (src/components/teacher-setup/StepUnit.tsx:104)"}, "fullDescription": {"text": "`src/components/teacher-setup/StepUnit.tsx:104` calls `POST /api/starter-units/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/starter-units/draft`\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-0f7bbade118bb17f", "name": "Dangling fetch: GET /api/classes/${classId}/students (src/components/teacher-setup/ClassroomPreview.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/classes/${classId}/students (src/components/teacher-setup/ClassroomPreview.tsx:25)"}, "fullDescription": {"text": "`src/components/teacher-setup/ClassroomPreview.tsx:25` calls `GET /api/classes/${classId}/students` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes/<p>/students`\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-2a97753ac4ee1580", "name": "Dangling fetch: GET /api/classes/lookup?code=${encodeURIComponent(data.joinCode)} (src/components/teacher-setup/Classroo", "shortDescription": {"text": "Dangling fetch: GET /api/classes/lookup?code=${encodeURIComponent(data.joinCode)} (src/components/teacher-setup/ClassroomPreview.tsx:74)"}, "fullDescription": {"text": "`src/components/teacher-setup/ClassroomPreview.tsx:74` calls `GET /api/classes/lookup?code=${encodeURIComponent(data.joinCode)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes/lookup`\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-04f162495254a9bf", "name": "Dangling fetch: POST /api/tutor-review (src/components/homework/ap-probe/MicroQuestion.tsx:98)", "shortDescription": {"text": "Dangling fetch: POST /api/tutor-review (src/components/homework/ap-probe/MicroQuestion.tsx:98)"}, "fullDescription": {"text": "`src/components/homework/ap-probe/MicroQuestion.tsx:98` calls `POST /api/tutor-review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tutor-review`\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-69486d84fa54a789", "name": "Dangling fetch: POST /api/tutor-help (src/components/homework/tutor/TutorChatbot.tsx:184)", "shortDescription": {"text": "Dangling fetch: POST /api/tutor-help (src/components/homework/tutor/TutorChatbot.tsx:184)"}, "fullDescription": {"text": "`src/components/homework/tutor/TutorChatbot.tsx:184` calls `POST /api/tutor-help` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tutor-help`\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-7468091ede1f8998", "name": "Dangling fetch: POST /api/agent (src/components/studio/Terminal.tsx:148)", "shortDescription": {"text": "Dangling fetch: POST /api/agent (src/components/studio/Terminal.tsx:148)"}, "fullDescription": {"text": "`src/components/studio/Terminal.tsx:148` calls `POST /api/agent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent`\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-90f0d770c467a6ab", "name": "Dangling fetch: POST /api/scenes/freeform-2d (src/components/studio/StudioActions.tsx:170)", "shortDescription": {"text": "Dangling fetch: POST /api/scenes/freeform-2d (src/components/studio/StudioActions.tsx:170)"}, "fullDescription": {"text": "`src/components/studio/StudioActions.tsx:170` calls `POST /api/scenes/freeform-2d` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scenes/freeform-2d`\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-a23993565866c9a1", "name": "Dangling fetch: GET /api/scenes/freeform-2d (src/components/studio/StudioActions.tsx:548)", "shortDescription": {"text": "Dangling fetch: GET /api/scenes/freeform-2d (src/components/studio/StudioActions.tsx:548)"}, "fullDescription": {"text": "`src/components/studio/StudioActions.tsx:548` calls `GET /api/scenes/freeform-2d` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scenes/freeform-2d`\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-3be6efe9f10e4f55", "name": "Dangling fetch: GET /api/scenes/freeform-2d?name=${encodeURIComponent(name)} (src/components/studio/StudioActions.tsx:57", "shortDescription": {"text": "Dangling fetch: GET /api/scenes/freeform-2d?name=${encodeURIComponent(name)} (src/components/studio/StudioActions.tsx:575)"}, "fullDescription": {"text": "`src/components/studio/StudioActions.tsx:575` calls `GET /api/scenes/freeform-2d?name=${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scenes/freeform-2d`\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-1e763efa46e76d55", "name": "Dangling fetch: DELETE /api/scenes/freeform-2d?name=${encodeURIComponent(name)} (src/components/studio/StudioActions.tsx", "shortDescription": {"text": "Dangling fetch: DELETE /api/scenes/freeform-2d?name=${encodeURIComponent(name)} (src/components/studio/StudioActions.tsx:625)"}, "fullDescription": {"text": "`src/components/studio/StudioActions.tsx:625` calls `DELETE /api/scenes/freeform-2d?name=${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scenes/freeform-2d`\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-09dbcc7f11d90746", "name": "Dangling fetch: GET /slime-demo/manifest.json (src/components/studio/panels/SlimeShowcasePanel.tsx:113)", "shortDescription": {"text": "Dangling fetch: GET /slime-demo/manifest.json (src/components/studio/panels/SlimeShowcasePanel.tsx:113)"}, "fullDescription": {"text": "`src/components/studio/panels/SlimeShowcasePanel.tsx:113` calls `GET /slime-demo/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/slime-demo/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f309836e6828b59", "name": "Dangling fetch: POST /api/pixellab/run/edit-images-v2 (src/components/studio/panels/SlimeShowcasePanel.tsx:186)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab/run/edit-images-v2 (src/components/studio/panels/SlimeShowcasePanel.tsx:186)"}, "fullDescription": {"text": "`src/components/studio/panels/SlimeShowcasePanel.tsx:186` calls `POST /api/pixellab/run/edit-images-v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/run/edit-images-v2`\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-666244db3971ddd4", "name": "Dangling fetch: GET /api/games?userId=${encodeURIComponent(currentUserId)} (src/components/studio/panels/LibraryPanel.ts", "shortDescription": {"text": "Dangling fetch: GET /api/games?userId=${encodeURIComponent(currentUserId)} (src/components/studio/panels/LibraryPanel.tsx:55)"}, "fullDescription": {"text": "`src/components/studio/panels/LibraryPanel.tsx:55` calls `GET /api/games?userId=${encodeURIComponent(currentUserId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games`\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-9bc1306eaec543a5", "name": "Dangling fetch: GET /api/games/${gameId} (src/components/studio/panels/LibraryPanel.tsx:111)", "shortDescription": {"text": "Dangling fetch: GET /api/games/${gameId} (src/components/studio/panels/LibraryPanel.tsx:111)"}, "fullDescription": {"text": "`src/components/studio/panels/LibraryPanel.tsx:111` calls `GET /api/games/${gameId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/<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-23a370789e3a2739", "name": "Dangling fetch: DELETE /api/games/${gameId} (src/components/studio/panels/LibraryPanel.tsx:161)", "shortDescription": {"text": "Dangling fetch: DELETE /api/games/${gameId} (src/components/studio/panels/LibraryPanel.tsx:161)"}, "fullDescription": {"text": "`src/components/studio/panels/LibraryPanel.tsx:161` calls `DELETE /api/games/${gameId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/<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-b800fa36f7b7148f", "name": "Dangling fetch: POST /api/recraft/remove-bg (src/components/studio/panels/TileObjectPropertiesPanel.tsx:48)", "shortDescription": {"text": "Dangling fetch: POST /api/recraft/remove-bg (src/components/studio/panels/TileObjectPropertiesPanel.tsx:48)"}, "fullDescription": {"text": "`src/components/studio/panels/TileObjectPropertiesPanel.tsx:48` calls `POST /api/recraft/remove-bg` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/recraft/remove-bg`\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-f484edf2c73f69d4", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/MarketplaceLibraryPanel.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/MarketplaceLibraryPanel.tsx:56)"}, "fullDescription": {"text": "`src/components/studio/panels/MarketplaceLibraryPanel.tsx:56` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0162c4d8cf0f7aaf", "name": "Dangling fetch: POST /api/game-rooms (src/components/studio/panels/PlayersPanel.tsx:117)", "shortDescription": {"text": "Dangling fetch: POST /api/game-rooms (src/components/studio/panels/PlayersPanel.tsx:117)"}, "fullDescription": {"text": "`src/components/studio/panels/PlayersPanel.tsx:117` calls `POST /api/game-rooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/game-rooms`\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-c2d653f12088f21c", "name": "Dangling fetch: GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)} (src/components/studio/panels/Pixel", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)} (src/components/studio/panels/PixellabPreviewDialog.tsx:105)"}, "fullDescription": {"text": "`src/components/studio/panels/PixellabPreviewDialog.tsx:105` calls `GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/library/characters/<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-65616b518833403c", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/TiledImportPanel.tsx:670)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/TiledImportPanel.tsx:670)"}, "fullDescription": {"text": "`src/components/studio/panels/TiledImportPanel.tsx:670` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bebf1f2caeba81fe", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/components/studio/panels/TiledImportPanel.tsx:671)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/components/studio/panels/TiledImportPanel.tsx:671)"}, "fullDescription": {"text": "`src/components/studio/panels/TiledImportPanel.tsx:671` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52f0f384ec50f7e2", "name": "Dangling fetch: POST /api/pixellab/run/${encodeURIComponent(tool.id)} (src/components/studio/panels/PixelLabToolForm.tsx", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab/run/${encodeURIComponent(tool.id)} (src/components/studio/panels/PixelLabToolForm.tsx:509)"}, "fullDescription": {"text": "`src/components/studio/panels/PixelLabToolForm.tsx:509` calls `POST /api/pixellab/run/${encodeURIComponent(tool.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/run/<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-84aaf024a252115b", "name": "Dangling fetch: POST /api/ui-generate (src/components/studio/panels/UIPanel.tsx:107)", "shortDescription": {"text": "Dangling fetch: POST /api/ui-generate (src/components/studio/panels/UIPanel.tsx:107)"}, "fullDescription": {"text": "`src/components/studio/panels/UIPanel.tsx:107` calls `POST /api/ui-generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ui-generate`\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-60cc86e6125b230f", "name": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TilesetGenerationForm.tsx:156)", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TilesetGenerationForm.tsx:156)"}, "fullDescription": {"text": "`src/components/studio/panels/TilesetGenerationForm.tsx:156` calls `GET /api/pixellab/library` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/library`\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-bf776e177dda4938", "name": "Dangling fetch: POST /api/pixellab/run/${encodeURIComponent(toolId)} (src/components/studio/panels/TilesetGenerationForm", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab/run/${encodeURIComponent(toolId)} (src/components/studio/panels/TilesetGenerationForm.tsx:276)"}, "fullDescription": {"text": "`src/components/studio/panels/TilesetGenerationForm.tsx:276` calls `POST /api/pixellab/run/${encodeURIComponent(toolId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/run/<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-acbdae6498a71fe0", "name": "Dangling fetch: GET /slime-demo/original/manifest.json (src/components/studio/panels/CharacterImportOverlay.tsx:178)", "shortDescription": {"text": "Dangling fetch: GET /slime-demo/original/manifest.json (src/components/studio/panels/CharacterImportOverlay.tsx:178)"}, "fullDescription": {"text": "`src/components/studio/panels/CharacterImportOverlay.tsx:178` calls `GET /slime-demo/original/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/slime-demo/original/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-faaa7751d927ab6c", "name": "Dangling fetch: POST /api/pixellab-create-character-state (src/components/studio/panels/TileCharacterPropertiesPanel.tsx", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-create-character-state (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:574)"}, "fullDescription": {"text": "`src/components/studio/panels/TileCharacterPropertiesPanel.tsx:574` calls `POST /api/pixellab-create-character-state` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-create-character-state`\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-456595129b32cb30", "name": "Dangling fetch: POST /api/pixellab-recreate-character (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:668", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-recreate-character (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:668)"}, "fullDescription": {"text": "`src/components/studio/panels/TileCharacterPropertiesPanel.tsx:668` calls `POST /api/pixellab-recreate-character` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-recreate-character`\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-dfd086a09a8799fd", "name": "Dangling fetch: POST /api/pixellab-character-template-animation (src/components/studio/panels/TileCharacterPropertiesPan", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-character-template-animation (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4337)"}, "fullDescription": {"text": "`src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4337` calls `POST /api/pixellab-character-template-animation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-character-template-animation`\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-be10286d1385892b", "name": "Dangling fetch: POST /api/pixellab/run/${endpoint} (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4872)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab/run/${endpoint} (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4872)"}, "fullDescription": {"text": "`src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4872` calls `POST /api/pixellab/run/${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/run/<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-2963b40a5c6ccaee", "name": "Dangling fetch: POST /api/pixellab/run/estimate-skeleton (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab/run/estimate-skeleton (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4913)"}, "fullDescription": {"text": "`src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4913` calls `POST /api/pixellab/run/estimate-skeleton` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/run/estimate-skeleton`\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-1cbd5088e15473ef", "name": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TileAssetsView.tsx:782)", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TileAssetsView.tsx:782)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:782` calls `GET /api/pixellab/library` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/library`\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-928b5a9546e2bcaf", "name": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TileAssetsView.tsx:2819)", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TileAssetsView.tsx:2819)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:2819` calls `GET /api/pixellab/library` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/library`\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-bed8fa16630f4565", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/TileAssetsView.tsx:5670)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/TileAssetsView.tsx:5670)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:5670` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5448bbb31784195", "name": "Dangling fetch: POST /api/pixellab-recreate-character (src/components/studio/panels/TileAssetsView.tsx:6871)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-recreate-character (src/components/studio/panels/TileAssetsView.tsx:6871)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:6871` calls `POST /api/pixellab-recreate-character` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-recreate-character`\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-3f9989ad631a5606", "name": "Dangling fetch: GET /api/pixellab/library/characters?limit=100 (src/components/studio/panels/TileAssetsView.tsx:7001)", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab/library/characters?limit=100 (src/components/studio/panels/TileAssetsView.tsx:7001)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:7001` calls `GET /api/pixellab/library/characters?limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/library/characters`\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-bdf44430aeae4f52", "name": "Dangling fetch: GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)} (src/components/studio/panels/TileA", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)} (src/components/studio/panels/TileAssetsView.tsx:7066)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:7066` calls `GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/library/characters/<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-191bed81fabb3ab8", "name": "Dangling fetch: POST /api/pixellab-transfer-outfit (src/components/studio/panels/TileAssetsView.tsx:7317)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-transfer-outfit (src/components/studio/panels/TileAssetsView.tsx:7317)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:7317` calls `POST /api/pixellab-transfer-outfit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-transfer-outfit`\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-3aaca7c6a65cb773", "name": "Dangling fetch: POST /api/pixellab-transfer-outfit (src/components/studio/panels/TileAssetsView.tsx:7538)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-transfer-outfit (src/components/studio/panels/TileAssetsView.tsx:7538)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:7538` calls `POST /api/pixellab-transfer-outfit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-transfer-outfit`\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-7895090a2be5cfc5", "name": "Dangling fetch: GET /api/pixellab-transfer-outfit?jobId=${encodeURIComponent(jobId)} (src/components/studio/panels/TileA", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab-transfer-outfit?jobId=${encodeURIComponent(jobId)} (src/components/studio/panels/TileAssetsView.tsx:7564)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:7564` calls `GET /api/pixellab-transfer-outfit?jobId=${encodeURIComponent(jobId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-transfer-outfit`\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-625982f5e87a8b59", "name": "Dangling fetch: POST /api/pixellab-character-template-animation (src/components/studio/panels/TileAssetsView.tsx:7734)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-character-template-animation (src/components/studio/panels/TileAssetsView.tsx:7734)"}, "fullDescription": {"text": "`src/components/studio/panels/TileAssetsView.tsx:7734` calls `POST /api/pixellab-character-template-animation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-character-template-animation`\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-2c68314ec4e59e72", "name": "Dangling fetch: GET /assets/medieval/stats.json (src/components/studio/panels/AssetsPanel.tsx:335)", "shortDescription": {"text": "Dangling fetch: GET /assets/medieval/stats.json (src/components/studio/panels/AssetsPanel.tsx:335)"}, "fullDescription": {"text": "`src/components/studio/panels/AssetsPanel.tsx:335` calls `GET /assets/medieval/stats.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assets/medieval/stats.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b68987a562ee4d1", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/WorldGenPanel.tsx:148)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/WorldGenPanel.tsx:148)"}, "fullDescription": {"text": "`src/components/studio/panels/WorldGenPanel.tsx:148` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e534a3d5d5885855", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/components/studio/panels/WorldGenPanel.tsx:152)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/components/studio/panels/WorldGenPanel.tsx:152)"}, "fullDescription": {"text": "`src/components/studio/panels/WorldGenPanel.tsx:152` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4bafe87b6adfd15", "name": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher/teacher-data-context.tsx:130)", "shortDescription": {"text": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher/teacher-data-context.tsx:130)"}, "fullDescription": {"text": "`src/components/teacher/teacher-data-context.tsx:130` calls `GET /api/classes/${classId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes/<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-8468697760ae6d40", "name": "Dangling fetch: GET /api/classes/${classId}/students (src/components/teacher/teacher-data-context.tsx:131)", "shortDescription": {"text": "Dangling fetch: GET /api/classes/${classId}/students (src/components/teacher/teacher-data-context.tsx:131)"}, "fullDescription": {"text": "`src/components/teacher/teacher-data-context.tsx:131` calls `GET /api/classes/${classId}/students` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes/<p>/students`\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-deb0f0e8c04a731f", "name": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher/NewClassBanner.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher/NewClassBanner.tsx:25)"}, "fullDescription": {"text": "`src/components/teacher/NewClassBanner.tsx:25` calls `GET /api/classes/${classId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes/<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-8967c9ab115ad806", "name": "Dangling fetch: POST /api/quiz/rooms (src/components/teach/LiveHost.tsx:37)", "shortDescription": {"text": "Dangling fetch: POST /api/quiz/rooms (src/components/teach/LiveHost.tsx:37)"}, "fullDescription": {"text": "`src/components/teach/LiveHost.tsx:37` calls `POST /api/quiz/rooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms`\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-40333d7645f50163", "name": "Dangling fetch: POST /api/quiz/rooms/${roomId}/advance (src/components/teach/LiveHost.tsx:59)", "shortDescription": {"text": "Dangling fetch: POST /api/quiz/rooms/${roomId}/advance (src/components/teach/LiveHost.tsx:59)"}, "fullDescription": {"text": "`src/components/teach/LiveHost.tsx:59` calls `POST /api/quiz/rooms/${roomId}/advance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms/<p>/advance`\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-530200111b492501", "name": "Dangling fetch: POST /api/automap (src/app/extend-mlp/rock-slopes/page.tsx:211)", "shortDescription": {"text": "Dangling fetch: POST /api/automap (src/app/extend-mlp/rock-slopes/page.tsx:211)"}, "fullDescription": {"text": "`src/app/extend-mlp/rock-slopes/page.tsx:211` calls `POST /api/automap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/automap`\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-3cc22ee4be24e950", "name": "Dangling fetch: POST /api/automap (src/app/extend-mlp/rock-slopes/page.tsx:232)", "shortDescription": {"text": "Dangling fetch: POST /api/automap (src/app/extend-mlp/rock-slopes/page.tsx:232)"}, "fullDescription": {"text": "`src/app/extend-mlp/rock-slopes/page.tsx:232` calls `POST /api/automap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/automap`\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-5a648184a3f2d3cd", "name": "Dangling fetch: GET /api/tilesets-list (src/app/extend-mlp/tileset-compare/page.tsx:45)", "shortDescription": {"text": "Dangling fetch: GET /api/tilesets-list (src/app/extend-mlp/tileset-compare/page.tsx:45)"}, "fullDescription": {"text": "`src/app/extend-mlp/tileset-compare/page.tsx:45` calls `GET /api/tilesets-list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tilesets-list`\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-9f9456061aa64179", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-mlp/tiled-wang-brush/page.tsx:240)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-mlp/tiled-wang-brush/page.tsx:240)"}, "fullDescription": {"text": "`src/app/extend-mlp/tiled-wang-brush/page.tsx:240` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd1dcc09b66fbc7d", "name": "Dangling fetch: POST /api/automap (src/app/extend-mlp/tiled-automap/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/automap (src/app/extend-mlp/tiled-automap/page.tsx:68)"}, "fullDescription": {"text": "`src/app/extend-mlp/tiled-automap/page.tsx:68` calls `POST /api/automap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/automap`\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-fb32e1a1bf0ff6ed", "name": "Dangling fetch: POST /api/lesson-tutor (src/app/lessons/practice/page.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/lesson-tutor (src/app/lessons/practice/page.tsx:153)"}, "fullDescription": {"text": "`src/app/lessons/practice/page.tsx:153` calls `POST /api/lesson-tutor` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lesson-tutor`\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-8c1dcdc45578a5e8", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-sweep/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-sweep/page.tsx:63)"}, "fullDescription": {"text": "`src/app/extend-sweep/page.tsx:63` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca356c05124274c6", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-sweep/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-sweep/page.tsx:64)"}, "fullDescription": {"text": "`src/app/extend-sweep/page.tsx:64` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f185f3d9a1abaab", "name": "Dangling fetch: GET /api/quiz/rooms?pin=${encodeURIComponent(pin)} (src/app/play/quiz/[pin]/page.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/quiz/rooms?pin=${encodeURIComponent(pin)} (src/app/play/quiz/[pin]/page.tsx:52)"}, "fullDescription": {"text": "`src/app/play/quiz/[pin]/page.tsx:52` calls `GET /api/quiz/rooms?pin=${encodeURIComponent(pin)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms`\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-ca66f96ac7f97c23", "name": "Dangling fetch: POST /api/quiz/rooms/${room.id}/join (src/app/play/quiz/[pin]/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: POST /api/quiz/rooms/${room.id}/join (src/app/play/quiz/[pin]/page.tsx:83)"}, "fullDescription": {"text": "`src/app/play/quiz/[pin]/page.tsx:83` calls `POST /api/quiz/rooms/${room.id}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms/<p>/join`\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-d783b473264b979d", "name": "Dangling fetch: POST /api/quiz/rooms/${room.id}/answer (src/app/play/quiz/[pin]/page.tsx:109)", "shortDescription": {"text": "Dangling fetch: POST /api/quiz/rooms/${room.id}/answer (src/app/play/quiz/[pin]/page.tsx:109)"}, "fullDescription": {"text": "`src/app/play/quiz/[pin]/page.tsx:109` calls `POST /api/quiz/rooms/${room.id}/answer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms/<p>/answer`\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-75b4ee894482266d", "name": "Dangling fetch: POST /api/quiz/rooms/${roomId}/answer/image (src/app/play/quiz/[pin]/page.tsx:505)", "shortDescription": {"text": "Dangling fetch: POST /api/quiz/rooms/${roomId}/answer/image (src/app/play/quiz/[pin]/page.tsx:505)"}, "fullDescription": {"text": "`src/app/play/quiz/[pin]/page.tsx:505` calls `POST /api/quiz/rooms/${roomId}/answer/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms/<p>/answer/image`\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-6a35532399d601ee", "name": "Dangling fetch: POST /api/quiz/rooms/${roomId}/answer (src/app/play/quiz/[pin]/page.tsx:655)", "shortDescription": {"text": "Dangling fetch: POST /api/quiz/rooms/${roomId}/answer (src/app/play/quiz/[pin]/page.tsx:655)"}, "fullDescription": {"text": "`src/app/play/quiz/[pin]/page.tsx:655` calls `POST /api/quiz/rooms/${roomId}/answer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms/<p>/answer`\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-a4e512c7b6e8d989", "name": "Dangling fetch: GET /api/race/rooms?pin=${encodeURIComponent(pin)} (src/app/play/race/[pin]/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/race/rooms?pin=${encodeURIComponent(pin)} (src/app/play/race/[pin]/page.tsx:53)"}, "fullDescription": {"text": "`src/app/play/race/[pin]/page.tsx:53` calls `GET /api/race/rooms?pin=${encodeURIComponent(pin)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/race/rooms`\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-40f871f0dd309805", "name": "Dangling fetch: POST /api/race/rooms/${raceId}/join (src/app/play/race/[pin]/page.tsx:74)", "shortDescription": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/join (src/app/play/race/[pin]/page.tsx:74)"}, "fullDescription": {"text": "`src/app/play/race/[pin]/page.tsx:74` calls `POST /api/race/rooms/${raceId}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/race/rooms/<p>/join`\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-3f2caafc4e918baf", "name": "Dangling fetch: POST /api/race/rooms/${raceId}/move (src/app/play/race/[pin]/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/move (src/app/play/race/[pin]/page.tsx:88)"}, "fullDescription": {"text": "`src/app/play/race/[pin]/page.tsx:88` calls `POST /api/race/rooms/${raceId}/move` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/race/rooms/<p>/move`\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-465aa5929cf120a8", "name": "Dangling fetch: POST /api/games/${gameId}/play (src/app/play/[gameId]/PlayLogger.tsx:28)", "shortDescription": {"text": "Dangling fetch: POST /api/games/${gameId}/play (src/app/play/[gameId]/PlayLogger.tsx:28)"}, "fullDescription": {"text": "`src/app/play/[gameId]/PlayLogger.tsx:28` calls `POST /api/games/${gameId}/play` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/<p>/play`\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-7fdc6398e466456e", "name": "Dangling fetch: POST /api/games/${gameId}/report (src/app/play/[gameId]/ReportButton.tsx:54)", "shortDescription": {"text": "Dangling fetch: POST /api/games/${gameId}/report (src/app/play/[gameId]/ReportButton.tsx:54)"}, "fullDescription": {"text": "`src/app/play/[gameId]/ReportButton.tsx:54` calls `POST /api/games/${gameId}/report` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/<p>/report`\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-89330d8573d99faf", "name": "Dangling fetch: GET https://api.pixellab.ai/v2/characters/${encodeURIComponent(characterId)} (src/app/api/pixellab-chara", "shortDescription": {"text": "Dangling fetch: GET https://api.pixellab.ai/v2/characters/${encodeURIComponent(characterId)} (src/app/api/pixellab-character-template-animation/route.ts:116)"}, "fullDescription": {"text": "`src/app/api/pixellab-character-template-animation/route.ts:116` calls `GET https://api.pixellab.ai/v2/characters/${encodeURIComponent(characterId)}` 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.pixellab.ai/v2/characters/<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-69f76769d79351af", "name": "Dangling fetch: POST https://api.openai.com/v1/images/generations (src/app/api/ui-generate/route.ts:115)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/images/generations (src/app/api/ui-generate/route.ts:115)"}, "fullDescription": {"text": "`src/app/api/ui-generate/route.ts:115` calls `POST https://api.openai.com/v1/images/generations` 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.openai.com/v1/images/generations`\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-07e8ba03d86814dd", "name": "Dangling fetch: POST https://api.pixellab.ai/v2/${endpoint} (src/app/api/pixellab/[...path]/route.ts:23)", "shortDescription": {"text": "Dangling fetch: POST https://api.pixellab.ai/v2/${endpoint} (src/app/api/pixellab/[...path]/route.ts:23)"}, "fullDescription": {"text": "`src/app/api/pixellab/[...path]/route.ts:23` calls `POST https://api.pixellab.ai/v2/${endpoint}` 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.pixellab.ai/v2/<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-209ca48e9887da05", "name": "Dangling fetch: GET https://api.pixellab.ai/v2/${endpoint} (src/app/api/pixellab/[...path]/route.ts:71)", "shortDescription": {"text": "Dangling fetch: GET https://api.pixellab.ai/v2/${endpoint} (src/app/api/pixellab/[...path]/route.ts:71)"}, "fullDescription": {"text": "`src/app/api/pixellab/[...path]/route.ts:71` calls `GET https://api.pixellab.ai/v2/${endpoint}` 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.pixellab.ai/v2/<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-f87e9aa23780f216", "name": "Dangling fetch: POST https://api.pixellab.ai/mcp (src/app/api/pixellab-character-animation/route.ts:162)", "shortDescription": {"text": "Dangling fetch: POST https://api.pixellab.ai/mcp (src/app/api/pixellab-character-animation/route.ts:162)"}, "fullDescription": {"text": "`src/app/api/pixellab-character-animation/route.ts:162` calls `POST https://api.pixellab.ai/mcp` 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.pixellab.ai/mcp`\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-4d3b8a598ed4d856", "name": "Dangling fetch: GET /api/wfc-pairs?template=${encodeURIComponent(TEMPLATE_ID)} (src/app/extend-wfc/page.tsx:75)", "shortDescription": {"text": "Dangling fetch: GET /api/wfc-pairs?template=${encodeURIComponent(TEMPLATE_ID)} (src/app/extend-wfc/page.tsx:75)"}, "fullDescription": {"text": "`src/app/extend-wfc/page.tsx:75` calls `GET /api/wfc-pairs?template=${encodeURIComponent(TEMPLATE_ID)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/wfc-pairs`\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-d2d3054a6aa5a940", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-wfc/page.tsx:185)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-wfc/page.tsx:185)"}, "fullDescription": {"text": "`src/app/extend-wfc/page.tsx:185` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4ba4338ac243726", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-wfc/page.tsx:186)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-wfc/page.tsx:186)"}, "fullDescription": {"text": "`src/app/extend-wfc/page.tsx:186` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bff22de0b9d141e", "name": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-wfc/page.tsx:237)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-wfc/page.tsx:237)"}, "fullDescription": {"text": "`src/app/extend-wfc/page.tsx:237` calls `GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/premium/tiled/farm%20shore.tmx`\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-12538c2ccde1b59f", "name": "Dangling fetch: POST /api/wfc-rating (src/app/extend-wfc/page.tsx:283)", "shortDescription": {"text": "Dangling fetch: POST /api/wfc-rating (src/app/extend-wfc/page.tsx:283)"}, "fullDescription": {"text": "`src/app/extend-wfc/page.tsx:283` calls `POST /api/wfc-rating` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/wfc-rating`\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-823d2ea90803060d", "name": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-wfc/page.tsx:354)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-wfc/page.tsx:354)"}, "fullDescription": {"text": "`src/app/extend-wfc/page.tsx:354` calls `GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/premium/tiled/farm%20shore.tmx`\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-ca1592cc6c5235ce", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-train/page.tsx:128)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-train/page.tsx:128)"}, "fullDescription": {"text": "`src/app/extend-train/page.tsx:128` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83a2cce980ef4bce", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-train/page.tsx:129)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-train/page.tsx:129)"}, "fullDescription": {"text": "`src/app/extend-train/page.tsx:129` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f876cf525df3fa4", "name": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-train/page.tsx:261)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-train/page.tsx:261)"}, "fullDescription": {"text": "`src/app/extend-train/page.tsx:261` calls `GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/premium/tiled/farm%20shore.tmx`\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-21f79d575cb25851", "name": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-train/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-train/page.tsx:393)"}, "fullDescription": {"text": "`src/app/extend-train/page.tsx:393` calls `GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/premium/tiled/farm%20shore.tmx`\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-f44de5b7d48fe0c9", "name": "Dangling fetch: GET /api/classes/${classId} (src/app/join/[classId]/JoinClient.tsx:28)", "shortDescription": {"text": "Dangling fetch: GET /api/classes/${classId} (src/app/join/[classId]/JoinClient.tsx:28)"}, "fullDescription": {"text": "`src/app/join/[classId]/JoinClient.tsx:28` calls `GET /api/classes/${classId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classes/<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-9a462fe8ef8debad", "name": "Dangling fetch: POST /api/students/join (src/app/join/[classId]/JoinClient.tsx:47)", "shortDescription": {"text": "Dangling fetch: POST /api/students/join (src/app/join/[classId]/JoinClient.tsx:47)"}, "fullDescription": {"text": "`src/app/join/[classId]/JoinClient.tsx:47` calls `POST /api/students/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/join`\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-5a721c87b10d0518", "name": "Dangling fetch: GET /api/admin/audit-log${qs} (src/app/admin/audit-log/AuditLogView.tsx:29)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/audit-log${qs} (src/app/admin/audit-log/AuditLogView.tsx:29)"}, "fullDescription": {"text": "`src/app/admin/audit-log/AuditLogView.tsx:29` calls `GET /api/admin/audit-log${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/audit-log/<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-1a329b02813a29c1", "name": "Dangling fetch: GET /api/admin/status (src/app/admin/status/StatusView.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/status (src/app/admin/status/StatusView.tsx:47)"}, "fullDescription": {"text": "`src/app/admin/status/StatusView.tsx:47` calls `GET /api/admin/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/status`\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-6c89e1c38b2ad653", "name": "Dangling fetch: GET /api/admin/data-requests?status=${filter} (src/app/admin/data-requests/DataRequestsQueue.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/data-requests?status=${filter} (src/app/admin/data-requests/DataRequestsQueue.tsx:55)"}, "fullDescription": {"text": "`src/app/admin/data-requests/DataRequestsQueue.tsx:55` calls `GET /api/admin/data-requests?status=${filter}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/data-requests`\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-b9182c217063b94c", "name": "Dangling fetch: PATCH /api/admin/data-requests/${id} (src/app/admin/data-requests/DataRequestsQueue.tsx:72)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/data-requests/${id} (src/app/admin/data-requests/DataRequestsQueue.tsx:72)"}, "fullDescription": {"text": "`src/app/admin/data-requests/DataRequestsQueue.tsx:72` calls `PATCH /api/admin/data-requests/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/data-requests/<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-66f59f41b4a75569", "name": "Dangling fetch: GET /api/admin/teachers${params} (src/app/admin/teachers/TeachersList.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/teachers${params} (src/app/admin/teachers/TeachersList.tsx:38)"}, "fullDescription": {"text": "`src/app/admin/teachers/TeachersList.tsx:38` calls `GET /api/admin/teachers${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/teachers/<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-462c16ab18538b59", "name": "Dangling fetch: PATCH /api/admin/teachers/${encodeURIComponent(sub)}/role (src/app/admin/teachers/TeachersList.tsx:55)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/teachers/${encodeURIComponent(sub)}/role (src/app/admin/teachers/TeachersList.tsx:55)"}, "fullDescription": {"text": "`src/app/admin/teachers/TeachersList.tsx:55` calls `PATCH /api/admin/teachers/${encodeURIComponent(sub)}/role` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/teachers/<p>/role`\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-df805392788b42f5", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/world-gen-demo/page.tsx:162)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/world-gen-demo/page.tsx:162)"}, "fullDescription": {"text": "`src/app/world-gen-demo/page.tsx:162` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6d31f44c6f9d039", "name": "Dangling fetch: GET /api/moderation/queue (src/app/teacher/moderation/ModerationQueue.tsx:54)", "shortDescription": {"text": "Dangling fetch: GET /api/moderation/queue (src/app/teacher/moderation/ModerationQueue.tsx:54)"}, "fullDescription": {"text": "`src/app/teacher/moderation/ModerationQueue.tsx:54` calls `GET /api/moderation/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/moderation/queue`\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-d9fbaaa805dd9267", "name": "Dangling fetch: PATCH /api/moderation/games/${gameId} (src/app/teacher/moderation/ModerationQueue.tsx:77)", "shortDescription": {"text": "Dangling fetch: PATCH /api/moderation/games/${gameId} (src/app/teacher/moderation/ModerationQueue.tsx:77)"}, "fullDescription": {"text": "`src/app/teacher/moderation/ModerationQueue.tsx:77` calls `PATCH /api/moderation/games/${gameId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/moderation/games/<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-fbd443ce6a95df91", "name": "Dangling fetch: PATCH /api/moderation/reports/${reportId} (src/app/teacher/moderation/ModerationQueue.tsx:104)", "shortDescription": {"text": "Dangling fetch: PATCH /api/moderation/reports/${reportId} (src/app/teacher/moderation/ModerationQueue.tsx:104)"}, "fullDescription": {"text": "`src/app/teacher/moderation/ModerationQueue.tsx:104` calls `PATCH /api/moderation/reports/${reportId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/moderation/reports/<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-79a0e7b4d6049511", "name": "Dangling fetch: POST /api/coppa/data-request (src/app/privacy/data-request/DataRequestForm.tsx:40)", "shortDescription": {"text": "Dangling fetch: POST /api/coppa/data-request (src/app/privacy/data-request/DataRequestForm.tsx:40)"}, "fullDescription": {"text": "`src/app/privacy/data-request/DataRequestForm.tsx:40` calls `POST /api/coppa/data-request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coppa/data-request`\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-0c36b77136a9e9f0", "name": "Dangling fetch: POST /api/race/rooms (src/app/teach/race/page.tsx:28)", "shortDescription": {"text": "Dangling fetch: POST /api/race/rooms (src/app/teach/race/page.tsx:28)"}, "fullDescription": {"text": "`src/app/teach/race/page.tsx:28` calls `POST /api/race/rooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/race/rooms`\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-2cd22f99aacd906e", "name": "Dangling fetch: POST /api/race/rooms/${raceId}/start (src/app/teach/race/page.tsx:49)", "shortDescription": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/start (src/app/teach/race/page.tsx:49)"}, "fullDescription": {"text": "`src/app/teach/race/page.tsx:49` calls `POST /api/race/rooms/${raceId}/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/race/rooms/<p>/start`\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-2c525e32c067fdc1", "name": "Dangling fetch: POST /api/race/rooms/${raceId}/reset (src/app/teach/race/page.tsx:60)", "shortDescription": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/reset (src/app/teach/race/page.tsx:60)"}, "fullDescription": {"text": "`src/app/teach/race/page.tsx:60` calls `POST /api/race/rooms/${raceId}/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/race/rooms/<p>/reset`\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-4c4d8209a87ec127", "name": "Dangling fetch: GET /api/texture-overlays (src/lib/texture-overlays-cloud.ts:29)", "shortDescription": {"text": "Dangling fetch: GET /api/texture-overlays (src/lib/texture-overlays-cloud.ts:29)"}, "fullDescription": {"text": "`src/lib/texture-overlays-cloud.ts:29` calls `GET /api/texture-overlays` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/texture-overlays`\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-6af2a38606246384", "name": "Dangling fetch: POST /api/texture-overlays (src/lib/texture-overlays-cloud.ts:53)", "shortDescription": {"text": "Dangling fetch: POST /api/texture-overlays (src/lib/texture-overlays-cloud.ts:53)"}, "fullDescription": {"text": "`src/lib/texture-overlays-cloud.ts:53` calls `POST /api/texture-overlays` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/texture-overlays`\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-06addbc9d5c76827", "name": "Dangling fetch: DELETE /api/texture-overlays?${params} (src/lib/texture-overlays-cloud.ts:72)", "shortDescription": {"text": "Dangling fetch: DELETE /api/texture-overlays?${params} (src/lib/texture-overlays-cloud.ts:72)"}, "fullDescription": {"text": "`src/lib/texture-overlays-cloud.ts:72` calls `DELETE /api/texture-overlays?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/texture-overlays`\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-3c76b88c7cfb92b3", "name": "Dangling fetch: POST /api/tile-sheets (src/lib/tile-cloud.ts:68)", "shortDescription": {"text": "Dangling fetch: POST /api/tile-sheets (src/lib/tile-cloud.ts:68)"}, "fullDescription": {"text": "`src/lib/tile-cloud.ts:68` calls `POST /api/tile-sheets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-sheets`\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-d590ea3ea133f131", "name": "Dangling fetch: GET /api/tile-sheets (src/lib/tile-cloud.ts:85)", "shortDescription": {"text": "Dangling fetch: GET /api/tile-sheets (src/lib/tile-cloud.ts:85)"}, "fullDescription": {"text": "`src/lib/tile-cloud.ts:85` calls `GET /api/tile-sheets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-sheets`\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-436ddb6b98fe065c", "name": "Dangling fetch: DELETE /api/tile-sheets?id=${encodeURIComponent(id)} (src/lib/tile-cloud.ts:96)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-sheets?id=${encodeURIComponent(id)} (src/lib/tile-cloud.ts:96)"}, "fullDescription": {"text": "`src/lib/tile-cloud.ts:96` calls `DELETE /api/tile-sheets?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-sheets`\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-1c96ba022a5f7842", "name": "Dangling fetch: PATCH /api/tile-sheets?id=${encodeURIComponent(cloudId)} (src/lib/tile-cloud.ts:124)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tile-sheets?id=${encodeURIComponent(cloudId)} (src/lib/tile-cloud.ts:124)"}, "fullDescription": {"text": "`src/lib/tile-cloud.ts:124` calls `PATCH /api/tile-sheets?id=${encodeURIComponent(cloudId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-sheets`\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-f60dc99dbf44dfb7", "name": "Dangling fetch: POST https://api.resend.com/emails (src/lib/email.ts:45)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (src/lib/email.ts:45)"}, "fullDescription": {"text": "`src/lib/email.ts:45` calls `POST https://api.resend.com/emails` 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.resend.com/emails`\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-ce3a1006e5e052cc", "name": "Dangling fetch: POST /api/tile-objects (src/lib/object-cloud.ts:60)", "shortDescription": {"text": "Dangling fetch: POST /api/tile-objects (src/lib/object-cloud.ts:60)"}, "fullDescription": {"text": "`src/lib/object-cloud.ts:60` calls `POST /api/tile-objects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-objects`\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-fe644434bfed3c09", "name": "Dangling fetch: GET /api/tile-objects (src/lib/object-cloud.ts:77)", "shortDescription": {"text": "Dangling fetch: GET /api/tile-objects (src/lib/object-cloud.ts:77)"}, "fullDescription": {"text": "`src/lib/object-cloud.ts:77` calls `GET /api/tile-objects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-objects`\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-ae2f2fa34030d2e5", "name": "Dangling fetch: DELETE /api/tile-objects?id=${encodeURIComponent(id)} (src/lib/object-cloud.ts:89)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-objects?id=${encodeURIComponent(id)} (src/lib/object-cloud.ts:89)"}, "fullDescription": {"text": "`src/lib/object-cloud.ts:89` calls `DELETE /api/tile-objects?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-objects`\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-0f2d29b3b1b85435", "name": "Dangling fetch: DELETE /api/tile-objects?groupId=${encodeURIComponent(groupId)} (src/lib/object-cloud.ts:99)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-objects?groupId=${encodeURIComponent(groupId)} (src/lib/object-cloud.ts:99)"}, "fullDescription": {"text": "`src/lib/object-cloud.ts:99` calls `DELETE /api/tile-objects?groupId=${encodeURIComponent(groupId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-objects`\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-eef1a317cebefe08", "name": "Dangling fetch: PATCH /api/tile-objects (src/lib/object-cloud.ts:135)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tile-objects (src/lib/object-cloud.ts:135)"}, "fullDescription": {"text": "`src/lib/object-cloud.ts:135` calls `PATCH /api/tile-objects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-objects`\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-bcc3baf6e70ee1b3", "name": "Dangling fetch: POST /api/pixellab-character-turnaround (src/lib/character-turnaround-jobs.ts:109)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-character-turnaround (src/lib/character-turnaround-jobs.ts:109)"}, "fullDescription": {"text": "`src/lib/character-turnaround-jobs.ts:109` calls `POST /api/pixellab-character-turnaround` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-character-turnaround`\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-1479196ce01952a2", "name": "Dangling fetch: GET /api/pixellab-character-turnaround?jobId=${encodeURIComponent(jobId)} (src/lib/character-turnaround-", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab-character-turnaround?jobId=${encodeURIComponent(jobId)} (src/lib/character-turnaround-jobs.ts:139)"}, "fullDescription": {"text": "`src/lib/character-turnaround-jobs.ts:139` calls `GET /api/pixellab-character-turnaround?jobId=${encodeURIComponent(jobId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-character-turnaround`\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-b4a647c17caf03bb", "name": "Dangling fetch: GET /api/pack-curation?packId=${encodeURIComponent(packId)} (src/lib/pack-curation-cloud.ts:18)", "shortDescription": {"text": "Dangling fetch: GET /api/pack-curation?packId=${encodeURIComponent(packId)} (src/lib/pack-curation-cloud.ts:18)"}, "fullDescription": {"text": "`src/lib/pack-curation-cloud.ts:18` calls `GET /api/pack-curation?packId=${encodeURIComponent(packId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pack-curation`\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-cac9012d092e8569", "name": "Dangling fetch: POST /api/pack-curation (src/lib/pack-curation-cloud.ts:31)", "shortDescription": {"text": "Dangling fetch: POST /api/pack-curation (src/lib/pack-curation-cloud.ts:31)"}, "fullDescription": {"text": "`src/lib/pack-curation-cloud.ts:31` calls `POST /api/pack-curation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pack-curation`\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-4697c3f8e35f43d8", "name": "Dangling fetch: GET /api/texture-decorations (src/lib/texture-decorations-cloud.ts:26)", "shortDescription": {"text": "Dangling fetch: GET /api/texture-decorations (src/lib/texture-decorations-cloud.ts:26)"}, "fullDescription": {"text": "`src/lib/texture-decorations-cloud.ts:26` calls `GET /api/texture-decorations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/texture-decorations`\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-d3ef4521f77d918f", "name": "Dangling fetch: POST /api/texture-decorations (src/lib/texture-decorations-cloud.ts:42)", "shortDescription": {"text": "Dangling fetch: POST /api/texture-decorations (src/lib/texture-decorations-cloud.ts:42)"}, "fullDescription": {"text": "`src/lib/texture-decorations-cloud.ts:42` calls `POST /api/texture-decorations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/texture-decorations`\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-8b67232510839430", "name": "Dangling fetch: DELETE /api/texture-decorations?${params} (src/lib/texture-decorations-cloud.ts:61)", "shortDescription": {"text": "Dangling fetch: DELETE /api/texture-decorations?${params} (src/lib/texture-decorations-cloud.ts:61)"}, "fullDescription": {"text": "`src/lib/texture-decorations-cloud.ts:61` calls `DELETE /api/texture-decorations?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/texture-decorations`\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-35cc96fd7c58278f", "name": "Dangling fetch: GET /api/character-sheets (src/lib/character-sheet-cloud.ts:33)", "shortDescription": {"text": "Dangling fetch: GET /api/character-sheets (src/lib/character-sheet-cloud.ts:33)"}, "fullDescription": {"text": "`src/lib/character-sheet-cloud.ts:33` calls `GET /api/character-sheets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/character-sheets`\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-b4ae3d78ddd7e255", "name": "Dangling fetch: POST /api/character-sheets (src/lib/character-sheet-cloud.ts:51)", "shortDescription": {"text": "Dangling fetch: POST /api/character-sheets (src/lib/character-sheet-cloud.ts:51)"}, "fullDescription": {"text": "`src/lib/character-sheet-cloud.ts:51` calls `POST /api/character-sheets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/character-sheets`\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-572e54d385d0fa6a", "name": "Dangling fetch: DELETE /api/character-sheets?id=${encodeURIComponent(id)} (src/lib/character-sheet-cloud.ts:71)", "shortDescription": {"text": "Dangling fetch: DELETE /api/character-sheets?id=${encodeURIComponent(id)} (src/lib/character-sheet-cloud.ts:71)"}, "fullDescription": {"text": "`src/lib/character-sheet-cloud.ts:71` calls `DELETE /api/character-sheets?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/character-sheets`\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-914058099f850a12", "name": "Dangling fetch: POST /api/pixellab/run/edit-images-v2 (src/lib/restyle-image-tiles.ts:64)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab/run/edit-images-v2 (src/lib/restyle-image-tiles.ts:64)"}, "fullDescription": {"text": "`src/lib/restyle-image-tiles.ts:64` calls `POST /api/pixellab/run/edit-images-v2` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/run/edit-images-v2`\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-986bc5a964916217", "name": "Dangling fetch: PUT /api/user-workspace/${kind} (src/lib/user-workspace-cloud.ts:81)", "shortDescription": {"text": "Dangling fetch: PUT /api/user-workspace/${kind} (src/lib/user-workspace-cloud.ts:81)"}, "fullDescription": {"text": "`src/lib/user-workspace-cloud.ts:81` calls `PUT /api/user-workspace/${kind}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user-workspace/<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-880978088c7fbd16", "name": "Dangling fetch: GET /api/user-workspace/${kind} (src/lib/user-workspace-cloud.ts:120)", "shortDescription": {"text": "Dangling fetch: GET /api/user-workspace/${kind} (src/lib/user-workspace-cloud.ts:120)"}, "fullDescription": {"text": "`src/lib/user-workspace-cloud.ts:120` calls `GET /api/user-workspace/${kind}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user-workspace/<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-9ef57822d07d10ad", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/rock-slope-tilesets.ts:158)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/rock-slope-tilesets.ts:158)"}, "fullDescription": {"text": "`src/lib/rock-slope-tilesets.ts:158` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-709d0ba6d07629b5", "name": "Dangling fetch: POST /api/tile-object-groups (src/lib/tile-group-cloud.ts:52)", "shortDescription": {"text": "Dangling fetch: POST /api/tile-object-groups (src/lib/tile-group-cloud.ts:52)"}, "fullDescription": {"text": "`src/lib/tile-group-cloud.ts:52` calls `POST /api/tile-object-groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-groups`\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-17428b21d8c75ae6", "name": "Dangling fetch: GET /api/tile-object-groups (src/lib/tile-group-cloud.ts:69)", "shortDescription": {"text": "Dangling fetch: GET /api/tile-object-groups (src/lib/tile-group-cloud.ts:69)"}, "fullDescription": {"text": "`src/lib/tile-group-cloud.ts:69` calls `GET /api/tile-object-groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-groups`\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-fc7ca6441b166f7d", "name": "Dangling fetch: PATCH /api/tile-object-groups (src/lib/tile-group-cloud.ts:96)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tile-object-groups (src/lib/tile-group-cloud.ts:96)"}, "fullDescription": {"text": "`src/lib/tile-group-cloud.ts:96` calls `PATCH /api/tile-object-groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-groups`\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-bc47587ed52d3a66", "name": "Dangling fetch: DELETE /api/tile-object-groups?id=${encodeURIComponent(id)} (src/lib/tile-group-cloud.ts:112)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-object-groups?id=${encodeURIComponent(id)} (src/lib/tile-group-cloud.ts:112)"}, "fullDescription": {"text": "`src/lib/tile-group-cloud.ts:112` calls `DELETE /api/tile-object-groups?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-groups`\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-40a464799f86a039", "name": "Dangling fetch: GET /api/slime-references (src/lib/slime-references.ts:16)", "shortDescription": {"text": "Dangling fetch: GET /api/slime-references (src/lib/slime-references.ts:16)"}, "fullDescription": {"text": "`src/lib/slime-references.ts:16` calls `GET /api/slime-references` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/slime-references`\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-244ff520cc74498c", "name": "Dangling fetch: POST /api/slime-references (src/lib/slime-references.ts:29)", "shortDescription": {"text": "Dangling fetch: POST /api/slime-references (src/lib/slime-references.ts:29)"}, "fullDescription": {"text": "`src/lib/slime-references.ts:29` calls `POST /api/slime-references` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/slime-references`\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-e7fc192e9f7fa361", "name": "Dangling fetch: DELETE /api/slime-references?id=${encodeURIComponent(id)} (src/lib/slime-references.ts:44)", "shortDescription": {"text": "Dangling fetch: DELETE /api/slime-references?id=${encodeURIComponent(id)} (src/lib/slime-references.ts:44)"}, "fullDescription": {"text": "`src/lib/slime-references.ts:44` calls `DELETE /api/slime-references?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/slime-references`\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-714af95877d5a9d5", "name": "Dangling fetch: GET /fantasy-tileset/packs.json (src/lib/marketplace-pack.ts:110)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/lib/marketplace-pack.ts:110)"}, "fullDescription": {"text": "`src/lib/marketplace-pack.ts:110` calls `GET /fantasy-tileset/packs.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/packs.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6863b4ced1630a1e", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/marketplace-pack.ts:111)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/marketplace-pack.ts:111)"}, "fullDescription": {"text": "`src/lib/marketplace-pack.ts:111` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbbcf6564ea60c78", "name": "Dangling fetch: GET /api/classroom${path} (src/lib/classroom-api.ts:127)", "shortDescription": {"text": "Dangling fetch: GET /api/classroom${path} (src/lib/classroom-api.ts:127)"}, "fullDescription": {"text": "`src/lib/classroom-api.ts:127` calls `GET /api/classroom${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/classroom/<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-a9db2de26bb18abc", "name": "Dangling fetch: POST /api/tile-object-classes (src/lib/object-class-cloud.ts:47)", "shortDescription": {"text": "Dangling fetch: POST /api/tile-object-classes (src/lib/object-class-cloud.ts:47)"}, "fullDescription": {"text": "`src/lib/object-class-cloud.ts:47` calls `POST /api/tile-object-classes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-classes`\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-83d732f0b2ef82ae", "name": "Dangling fetch: GET /api/tile-object-classes (src/lib/object-class-cloud.ts:61)", "shortDescription": {"text": "Dangling fetch: GET /api/tile-object-classes (src/lib/object-class-cloud.ts:61)"}, "fullDescription": {"text": "`src/lib/object-class-cloud.ts:61` calls `GET /api/tile-object-classes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-classes`\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-733933535e745db9", "name": "Dangling fetch: PATCH /api/tile-object-classes (src/lib/object-class-cloud.ts:69)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tile-object-classes (src/lib/object-class-cloud.ts:69)"}, "fullDescription": {"text": "`src/lib/object-class-cloud.ts:69` calls `PATCH /api/tile-object-classes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-classes`\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-87bec9f1e5957e89", "name": "Dangling fetch: DELETE /api/tile-object-classes?id=${encodeURIComponent(id)} (src/lib/object-class-cloud.ts:82)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-object-classes?id=${encodeURIComponent(id)} (src/lib/object-class-cloud.ts:82)"}, "fullDescription": {"text": "`src/lib/object-class-cloud.ts:82` calls `DELETE /api/tile-object-classes?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-object-classes`\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-f600389631d63d30", "name": "Dangling fetch: PUT /api/tile-asset-classes (src/lib/object-class-cloud.ts:88)", "shortDescription": {"text": "Dangling fetch: PUT /api/tile-asset-classes (src/lib/object-class-cloud.ts:88)"}, "fullDescription": {"text": "`src/lib/object-class-cloud.ts:88` calls `PUT /api/tile-asset-classes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-asset-classes`\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-af7e1c70f74eda28", "name": "Dangling fetch: GET /api/tile-asset-classes (src/lib/object-class-cloud.ts:105)", "shortDescription": {"text": "Dangling fetch: GET /api/tile-asset-classes (src/lib/object-class-cloud.ts:105)"}, "fullDescription": {"text": "`src/lib/object-class-cloud.ts:105` calls `GET /api/tile-asset-classes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-asset-classes`\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-6826d09ce9adeb81", "name": "Dangling fetch: DELETE /api/tile-asset-classes?assetId=${encodeURIComponent(assetId)} (src/lib/object-class-cloud.ts:113", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-asset-classes?assetId=${encodeURIComponent(assetId)} (src/lib/object-class-cloud.ts:113)"}, "fullDescription": {"text": "`src/lib/object-class-cloud.ts:113` calls `DELETE /api/tile-asset-classes?assetId=${encodeURIComponent(assetId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-asset-classes`\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-a0bcc7ee4f049700", "name": "Dangling fetch: DELETE /api/games/${gameId} (src/lib/games-sync.ts:40)", "shortDescription": {"text": "Dangling fetch: DELETE /api/games/${gameId} (src/lib/games-sync.ts:40)"}, "fullDescription": {"text": "`src/lib/games-sync.ts:40` calls `DELETE /api/games/${gameId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/<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-d373a449aeb66643", "name": "Dangling fetch: GET /api/games?userId=${encodeURIComponent(userId)}&fields=full (src/lib/games-sync.ts:68)", "shortDescription": {"text": "Dangling fetch: GET /api/games?userId=${encodeURIComponent(userId)}&fields=full (src/lib/games-sync.ts:68)"}, "fullDescription": {"text": "`src/lib/games-sync.ts:68` calls `GET /api/games?userId=${encodeURIComponent(userId)}&fields=full` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games`\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-ff4c14d23ecdf4c5", "name": "Dangling fetch: GET /api/pixellab/library/tileset?id=${encodeURIComponent(id)} (src/lib/pixellab-import.ts:96)", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab/library/tileset?id=${encodeURIComponent(id)} (src/lib/pixellab-import.ts:96)"}, "fullDescription": {"text": "`src/lib/pixellab-import.ts:96` calls `GET /api/pixellab/library/tileset?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab/library/tileset`\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-f2f1ee5bc0113a31", "name": "Dangling fetch: POST /api/pixellab-character-animation (src/lib/character-anim-jobs.ts:170)", "shortDescription": {"text": "Dangling fetch: POST /api/pixellab-character-animation (src/lib/character-anim-jobs.ts:170)"}, "fullDescription": {"text": "`src/lib/character-anim-jobs.ts:170` calls `POST /api/pixellab-character-animation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-character-animation`\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-a5aeead947afd701", "name": "Dangling fetch: GET /api/pixellab-character-animation?jobId=${encodeURIComponent(jobId)} (src/lib/character-anim-jobs.ts", "shortDescription": {"text": "Dangling fetch: GET /api/pixellab-character-animation?jobId=${encodeURIComponent(jobId)} (src/lib/character-anim-jobs.ts:222)"}, "fullDescription": {"text": "`src/lib/character-anim-jobs.ts:222` calls `GET /api/pixellab-character-animation?jobId=${encodeURIComponent(jobId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pixellab-character-animation`\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-04e58462952eacfa", "name": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/tile-collider-hydrate.ts:267)", "shortDescription": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/tile-collider-hydrate.ts:267)"}, "fullDescription": {"text": "`src/lib/tile-collider-hydrate.ts:267` calls `GET /fantasy-tileset/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fantasy-tileset/manifest.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7074fded8eb1447", "name": "Dangling fetch: PUT /api/tile-maps (src/lib/tile-map-cloud.ts:36)", "shortDescription": {"text": "Dangling fetch: PUT /api/tile-maps (src/lib/tile-map-cloud.ts:36)"}, "fullDescription": {"text": "`src/lib/tile-map-cloud.ts:36` calls `PUT /api/tile-maps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-maps`\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-76262cf75f34acc6", "name": "Dangling fetch: GET /api/tile-maps (src/lib/tile-map-cloud.ts:50)", "shortDescription": {"text": "Dangling fetch: GET /api/tile-maps (src/lib/tile-map-cloud.ts:50)"}, "fullDescription": {"text": "`src/lib/tile-map-cloud.ts:50` calls `GET /api/tile-maps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-maps`\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-dc17fd3f2a2790ed", "name": "Dangling fetch: GET /api/lang/profile?course=${encodeURIComponent(course)} (src/lib/lang-cloud.ts:55)", "shortDescription": {"text": "Dangling fetch: GET /api/lang/profile?course=${encodeURIComponent(course)} (src/lib/lang-cloud.ts:55)"}, "fullDescription": {"text": "`src/lib/lang-cloud.ts:55` calls `GET /api/lang/profile?course=${encodeURIComponent(course)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lang/profile`\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-c7c23c8289b1120b", "name": "Dangling fetch: POST /api/lang/profile (src/lib/lang-cloud.ts:64)", "shortDescription": {"text": "Dangling fetch: POST /api/lang/profile (src/lib/lang-cloud.ts:64)"}, "fullDescription": {"text": "`src/lib/lang-cloud.ts:64` calls `POST /api/lang/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lang/profile`\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-b6b41ca0b268317b", "name": "Dangling fetch: GET /api/lang/progress?course=${encodeURIComponent(course)} (src/lib/lang-cloud.ts:74)", "shortDescription": {"text": "Dangling fetch: GET /api/lang/progress?course=${encodeURIComponent(course)} (src/lib/lang-cloud.ts:74)"}, "fullDescription": {"text": "`src/lib/lang-cloud.ts:74` calls `GET /api/lang/progress?course=${encodeURIComponent(course)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lang/progress`\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-569692124e1a0788", "name": "Dangling fetch: POST /api/lang/progress (src/lib/lang-cloud.ts:83)", "shortDescription": {"text": "Dangling fetch: POST /api/lang/progress (src/lib/lang-cloud.ts:83)"}, "fullDescription": {"text": "`src/lib/lang-cloud.ts:83` calls `POST /api/lang/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lang/progress`\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-e0023ee472915087", "name": "Dangling fetch: POST /api/tile-characters (src/lib/character-cloud.ts:153)", "shortDescription": {"text": "Dangling fetch: POST /api/tile-characters (src/lib/character-cloud.ts:153)"}, "fullDescription": {"text": "`src/lib/character-cloud.ts:153` calls `POST /api/tile-characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-characters`\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-40d10b8a888a1583", "name": "Dangling fetch: GET /api/tile-characters (src/lib/character-cloud.ts:167)", "shortDescription": {"text": "Dangling fetch: GET /api/tile-characters (src/lib/character-cloud.ts:167)"}, "fullDescription": {"text": "`src/lib/character-cloud.ts:167` calls `GET /api/tile-characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-characters`\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-17113fa9925b556d", "name": "Dangling fetch: PATCH /api/tile-characters (src/lib/character-cloud.ts:175)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tile-characters (src/lib/character-cloud.ts:175)"}, "fullDescription": {"text": "`src/lib/character-cloud.ts:175` calls `PATCH /api/tile-characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-characters`\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-8ae8fe168b673214", "name": "Dangling fetch: DELETE /api/tile-characters?id=${encodeURIComponent(id)} (src/lib/character-cloud.ts:188)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-characters?id=${encodeURIComponent(id)} (src/lib/character-cloud.ts:188)"}, "fullDescription": {"text": "`src/lib/character-cloud.ts:188` calls `DELETE /api/tile-characters?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-characters`\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-869ff53cc5fc5d55", "name": "Dangling fetch: POST /api/tile-character-animations (src/lib/character-cloud.ts:230)", "shortDescription": {"text": "Dangling fetch: POST /api/tile-character-animations (src/lib/character-cloud.ts:230)"}, "fullDescription": {"text": "`src/lib/character-cloud.ts:230` calls `POST /api/tile-character-animations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-character-animations`\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-cd52e787bfd84686", "name": "Dangling fetch: PATCH /api/tile-character-animations (src/lib/character-cloud.ts:268)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tile-character-animations (src/lib/character-cloud.ts:268)"}, "fullDescription": {"text": "`src/lib/character-cloud.ts:268` calls `PATCH /api/tile-character-animations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-character-animations`\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-2b39016c02751417", "name": "Dangling fetch: DELETE /api/tile-character-animations?id=${encodeURIComponent(id)} (src/lib/character-cloud.ts:281)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tile-character-animations?id=${encodeURIComponent(id)} (src/lib/character-cloud.ts:281)"}, "fullDescription": {"text": "`src/lib/character-cloud.ts:281` calls `DELETE /api/tile-character-animations?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tile-character-animations`\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-f1a758cb19f6da19", "name": "Dangling fetch: GET /api/k12/${subject}/${grade} (src/lib/arcade/content.ts:67)", "shortDescription": {"text": "Dangling fetch: GET /api/k12/${subject}/${grade} (src/lib/arcade/content.ts:67)"}, "fullDescription": {"text": "`src/lib/arcade/content.ts:67` calls `GET /api/k12/${subject}/${grade}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/k12/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a470a8529f6f46c7", "name": "Dangling fetch: POST /api/games/save (src/lib/tile-publish/index.ts:93)", "shortDescription": {"text": "Dangling fetch: POST /api/games/save (src/lib/tile-publish/index.ts:93)"}, "fullDescription": {"text": "`src/lib/tile-publish/index.ts:93` calls `POST /api/games/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/save`\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-2d371201f39b63e4", "name": "Dangling fetch: PATCH /api/games/${saveJson.id} (src/lib/tile-publish/index.ts:113)", "shortDescription": {"text": "Dangling fetch: PATCH /api/games/${saveJson.id} (src/lib/tile-publish/index.ts:113)"}, "fullDescription": {"text": "`src/lib/tile-publish/index.ts:113` calls `PATCH /api/games/${saveJson.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/<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-9b00f108d182ddc2", "name": "Dangling fetch: GET /api/quiz/rooms/${roomId} (src/lib/quiz/use-room.ts:47)", "shortDescription": {"text": "Dangling fetch: GET /api/quiz/rooms/${roomId} (src/lib/quiz/use-room.ts:47)"}, "fullDescription": {"text": "`src/lib/quiz/use-room.ts:47` calls `GET /api/quiz/rooms/${roomId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/quiz/rooms/<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-7e146f44d3bee124", "name": "Dangling fetch: POST /api/games/save (src/lib/studio/save-game.ts:47)", "shortDescription": {"text": "Dangling fetch: POST /api/games/save (src/lib/studio/save-game.ts:47)"}, "fullDescription": {"text": "`src/lib/studio/save-game.ts:47` calls `POST /api/games/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/save`\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-b9e5afe093cf84e7", "name": "Dangling fetch: PATCH /api/games/${gameId} (src/lib/studio/save-game.ts:67)", "shortDescription": {"text": "Dangling fetch: PATCH /api/games/${gameId} (src/lib/studio/save-game.ts:67)"}, "fullDescription": {"text": "`src/lib/studio/save-game.ts:67` calls `PATCH /api/games/${gameId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/<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-301df867622cf613", "name": "Dangling fetch: GET /api/race/rooms/${raceId} (src/lib/race/use-race.ts:40)", "shortDescription": {"text": "Dangling fetch: GET /api/race/rooms/${raceId} (src/lib/race/use-race.ts:40)"}, "fullDescription": {"text": "`src/lib/race/use-race.ts:40` calls `GET /api/race/rooms/${raceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/race/rooms/<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-596b8e8ab3688953", "name": "Dangling fetch: GET /api/game-state/${encodeURIComponent(gameId)} (src/hooks/use-game-state.ts:132)", "shortDescription": {"text": "Dangling fetch: GET /api/game-state/${encodeURIComponent(gameId)} (src/hooks/use-game-state.ts:132)"}, "fullDescription": {"text": "`src/hooks/use-game-state.ts:132` calls `GET /api/game-state/${encodeURIComponent(gameId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/game-state/<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-9d525c5e9cdd1a05", "name": "Dangling fetch: POST /api/generate-part (src/hooks/usePartGeneration.ts:49)", "shortDescription": {"text": "Dangling fetch: POST /api/generate-part (src/hooks/usePartGeneration.ts:49)"}, "fullDescription": {"text": "`src/hooks/usePartGeneration.ts:49` calls `POST /api/generate-part` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate-part`\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-65c6f77a44608ff5", "name": "Dangling fetch: GET /api/credits?userId=${encodeURIComponent(userId)} (src/store/credits-store.ts:31)", "shortDescription": {"text": "Dangling fetch: GET /api/credits?userId=${encodeURIComponent(userId)} (src/store/credits-store.ts:31)"}, "fullDescription": {"text": "`src/store/credits-store.ts:31` calls `GET /api/credits?userId=${encodeURIComponent(userId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credits`\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-684f0e83ba7e1558", "name": "Unused endpoint: GET ", "shortDescription": {"text": "Unused endpoint: GET "}, "fullDescription": {"text": "`src/lib/tile-slicer.ts` declares `GET ` 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/23525"}, "properties": {"repository": "Zalamancer/Problocks", "repoUrl": "https://github.com/Zalamancer/Problocks", "branch": "main"}, "results": [{"ruleId": "scanner-70ffc6b3172d79be", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "70ffc6b3172d79be", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/wfc-train-remote.py:325"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84029237e93c0403", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "84029237e93c0403", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/wfc-train.py:183"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca07ebb532d0db66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/building/BuildingToolbar.tsx:137"}, "properties": {"repobilityId": "1a7d00834607c148", "scanner": "scanner-primary", "fingerprint": "ca07ebb532d0db66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c227bdbedae11395", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/panel-controls/PanelSelect.tsx:166"}, "properties": {"repobilityId": "dca72fb87c7628ec", "scanner": "scanner-primary", "fingerprint": "c227bdbedae11395", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-759c722d10342d1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/panel-controls/PanelMultiSelect.tsx:64"}, "properties": {"repobilityId": "3d03f1473e15b200", "scanner": "scanner-primary", "fingerprint": "759c722d10342d1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-69121444c1c09e1e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/TransformationTap.tsx:125"}, "properties": {"repobilityId": "a5a6d41a922c0b86", "scanner": "scanner-primary", "fingerprint": "69121444c1c09e1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-819e970c11ad3b66", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SystemSolver.tsx:120"}, "properties": {"repobilityId": "b888a2bd3fc92938", "scanner": "scanner-primary", "fingerprint": "819e970c11ad3b66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b6f114be9e9d6bd2", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SlopeSprint.tsx:138"}, "properties": {"repobilityId": "ae6a77cd59aef82c", "scanner": "scanner-primary", "fingerprint": "b6f114be9e9d6bd2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d518f9cd4fc86527", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/LinearGraphMatch.tsx:106"}, "properties": {"repobilityId": "6db0c9f295718b98", "scanner": "scanner-primary", "fingerprint": "d518f9cd4fc86527", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-6b790bff06aecc84", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/FunctionMachine.tsx:116"}, "properties": {"repobilityId": "e9a8a6d2d393d894", "scanner": "scanner-primary", "fingerprint": "6b790bff06aecc84", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e75f750dbc8d6958", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/PythagorasPop.tsx:106"}, "properties": {"repobilityId": "3245fdbb9c679a4f", "scanner": "scanner-primary", "fingerprint": "e75f750dbc8d6958", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ff240ea8c3b90bfa", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/arcade/games/grade-8/SciNotationSlide.tsx:45"}, "properties": {"repobilityId": "7ced1fec920a7e30", "scanner": "scanner-primary", "fingerprint": "ff240ea8c3b90bfa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0a36bd9d968f8b21", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SettingsPanel.tsx:187"}, "properties": {"repobilityId": "a00168c44bcb465d", "scanner": "scanner-primary", "fingerprint": "0a36bd9d968f8b21", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e85a0bb79f5c4ce2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SlimeGeneratedView.tsx:127"}, "properties": {"repobilityId": "4349fd2c6627b724", "scanner": "scanner-primary", "fingerprint": "e85a0bb79f5c4ce2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc4e84dd9dd52b3b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/SlimeShowcasePanel.tsx:514"}, "properties": {"repobilityId": "c3718f403498fec1", "scanner": "scanner-primary", "fingerprint": "dc4e84dd9dd52b3b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28034ca5d60b3912", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/ChatAssetPicker.tsx:329"}, "properties": {"repobilityId": "7ac4801aa465d013", "scanner": "scanner-primary", "fingerprint": "28034ca5d60b3912", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff4f4773c8f25571", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/MarketplaceLibraryPanel.tsx:304"}, "properties": {"repobilityId": "5ec14fd1d375912f", "scanner": "scanner-primary", "fingerprint": "ff4f4773c8f25571", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-463e92e3fdf82f8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/PixellabPreviewDialog.tsx:201"}, "properties": {"repobilityId": "249431341863d6e3", "scanner": "scanner-primary", "fingerprint": "463e92e3fdf82f8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a939bfe6a069feed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/RockSlopePicker.tsx:116"}, "properties": {"repobilityId": "f959fa7c1e4692f4", "scanner": "scanner-primary", "fingerprint": "a939bfe6a069feed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef6747e6d0dcc2eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TiledImportPanel.tsx:235"}, "properties": {"repobilityId": "60334f0419b23fc1", "scanner": "scanner-primary", "fingerprint": "ef6747e6d0dcc2eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-429bec809e8a2682", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/PartStudioPanel.tsx:454"}, "properties": {"repobilityId": "17108033aef5c494", "scanner": "scanner-primary", "fingerprint": "429bec809e8a2682", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-efae243ffe7f5d35", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/GeneratedFilesPanel.tsx:106"}, "properties": {"repobilityId": "5f8c7940406efba2", "scanner": "scanner-primary", "fingerprint": "efae243ffe7f5d35", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61b9ea845c3803de", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/TilesetGenerationForm.tsx:734"}, "properties": {"repobilityId": "831c89de5e7f42b8", "scanner": "scanner-primary", "fingerprint": "61b9ea845c3803de", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-72797c42c1b540ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/Freeform3DAssetsView.tsx:469"}, "properties": {"repobilityId": "95c61f5b16fb150d", "scanner": "scanner-primary", "fingerprint": "72797c42c1b540ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2376f392abb5e3bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4922"}, "properties": {"repobilityId": "b893246e4e018a09", "scanner": "scanner-primary", "fingerprint": "2376f392abb5e3bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8265b652a6be725", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/studio/panels/TileAssetsView.tsx:912"}, "properties": {"repobilityId": "c1be41d09495a094", "scanner": "scanner-primary", "fingerprint": "a8265b652a6be725", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-099e776b2487be05", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/AssetsPanel.tsx:284"}, "properties": {"repobilityId": "5ffc99435dc54757", "scanner": "scanner-primary", "fingerprint": "099e776b2487be05", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cfbe233e1d83c81d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/WorldGenPanel.tsx:1575"}, "properties": {"repobilityId": "92f751245a9042b2", "scanner": "scanner-primary", "fingerprint": "cfbe233e1d83c81d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2b18eedf3bd92822", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/panels/task-sections/AttachmentsSection.tsx:147"}, "properties": {"repobilityId": "23341199b0b38eb6", "scanner": "scanner-primary", "fingerprint": "2b18eedf3bd92822", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-158923d83a49217b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/views/KanbanView.tsx:235"}, "properties": {"repobilityId": "30e39a444a9a616a", "scanner": "scanner-primary", "fingerprint": "158923d83a49217b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5379a2c340f4af2a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/studio/views/TimelineBar.tsx:90"}, "properties": {"repobilityId": "a7c24f84f9915093", "scanner": "scanner-primary", "fingerprint": "5379a2c340f4af2a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b57604dbd9266b7", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 src/components/studio/views/FlowchartView.tsx:381"}, "properties": {"repobilityId": "777bd6a153b5ff6b", "scanner": "scanner-primary", "fingerprint": "1b57604dbd9266b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-b1ff6b677548a348", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:137"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "b1ff6b677548a348", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e800829e5301a976", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/TilesetGrid.tsx:165"}, "properties": {"repobilityId": "e7169b065aa9d959", "scanner": "scanner-primary", "fingerprint": "e800829e5301a976", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2d5bcaddc31cf2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/PackClient.tsx:270"}, "properties": {"repobilityId": "eebe4461730afd2d", "scanner": "scanner-primary", "fingerprint": "e2d5bcaddc31cf2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-992a57a2355ff886", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/extend-mlp/rock-slope-pack/overlays.ts:789"}, "properties": {"repobilityId": "9aaedb1acb1f54e3", "scanner": "scanner-primary", "fingerprint": "992a57a2355ff886", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e414dab4b8dcc3ec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/MapPreview.tsx:394"}, "properties": {"repobilityId": "e7e9a5c21af6f22f", "scanner": "scanner-primary", "fingerprint": "e414dab4b8dcc3ec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e4585abf6e7a4c90", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:3411"}, "properties": {"repobilityId": "0eb4f76dbfc75f3b", "scanner": "scanner-primary", "fingerprint": "e4585abf6e7a4c90", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a4cec773fe040f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-character-template-animation/route.ts:82"}, "properties": {"repobilityId": "97519ff80663d207", "scanner": "scanner-primary", "fingerprint": "2a4cec773fe040f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a4ca8f678913190", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab/run/[mcpName]/route.ts:327"}, "properties": {"repobilityId": "7fa47af8e16c7087", "scanner": "scanner-primary", "fingerprint": "0a4ca8f678913190", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46c50c1f677386e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-transfer-outfit/route.ts:195"}, "properties": {"repobilityId": "30c9dc8e4af4be01", "scanner": "scanner-primary", "fingerprint": "46c50c1f677386e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c9e8a61ff0141f25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/pixellab-character-animation/route.ts:192"}, "properties": {"repobilityId": "55cc8a8f6484c807", "scanner": "scanner-primary", "fingerprint": "c9e8a61ff0141f25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ecc784a0c6b6b81", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/auth.ts:73"}, "properties": {"repobilityId": "74a1ebb24ae7b83d", "scanner": "scanner-primary", "fingerprint": "6ecc784a0c6b6b81", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f7eeea75078315e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/character-template-anim-poller.ts:134"}, "properties": {"repobilityId": "528c0f2deff55387", "scanner": "scanner-primary", "fingerprint": "f7eeea75078315e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-957f036c295bea3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/kid-style-3d/script-runtime.ts:151"}, "properties": {"repobilityId": "03559332c305b6a5", "scanner": "scanner-primary", "fingerprint": "957f036c295bea3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e1c75e889c0ca8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/game-engine/bundler.ts:153"}, "properties": {"repobilityId": "dfe8c779487612f3", "scanner": "scanner-primary", "fingerprint": "4e1c75e889c0ca8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a76af149d2544f75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/store/tile-store.ts:5254"}, "properties": {"repobilityId": "fc8a9dc843447bfb", "scanner": "scanner-primary", "fingerprint": "a76af149d2544f75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04e0e1232ae481e6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/roblox-ui/README.md:38"}, "properties": {"repobilityId": "8615c84eaa4724fe", "scanner": "scanner-primary", "fingerprint": "04e0e1232ae481e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/roblox-ui/README.md"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-61b5fcbf75ec4eeb", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in scripts/sync-farmer-anims.mjs:147"}, "properties": {"repobilityId": "a2bfec280988faf3", "scanner": "scanner-primary", "fingerprint": "61b5fcbf75ec4eeb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/sync-farmer-anims.mjs"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-f825af29a0dfa21f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/medieval-demo-hq.html:289"}, "properties": {"repobilityId": "2f5eac0531ea351c", "scanner": "scanner-primary", "fingerprint": "f825af29a0dfa21f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/medieval-demo-hq.html"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-bc4311afdcf163d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/game-engine.html:692"}, "properties": {"repobilityId": "dba789583c422c0b", "scanner": "scanner-primary", "fingerprint": "bc4311afdcf163d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/game-engine.html"}, "region": {"startLine": 692}}}]}, {"ruleId": "scanner-e2a74de7f787e71f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/farmer-anims/index.html:223"}, "properties": {"repobilityId": "c099235c9d74fa7e", "scanner": "scanner-primary", "fingerprint": "e2a74de7f787e71f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/farmer-anims/index.html"}, "region": {"startLine": 223}}}]}, {"ruleId": "scanner-f06dbd9a71838243", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.jsep.mjs:51"}, "properties": {"repobilityId": "306744257db8e3e2", "scanner": "scanner-primary", "fingerprint": "f06dbd9a71838243", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/onnx/ort-wasm-simd-threaded.jsep.mjs"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-bd2fe1c87f363631", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.jspi.bundle.min.mjs:8"}, "properties": {"repobilityId": "01b84a4b07bf40e2", "scanner": "scanner-primary", "fingerprint": "bd2fe1c87f363631", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/onnx/ort.jspi.bundle.min.mjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-62be309d461f5f00", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.jspi.mjs:51"}, "properties": {"repobilityId": "18d19bf3b62c756a", "scanner": "scanner-primary", "fingerprint": "62be309d461f5f00", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/onnx/ort-wasm-simd-threaded.jspi.mjs"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-13f16eb43b6e4de5", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.all.bundle.min.mjs:1805"}, "properties": {"repobilityId": "f42f3842341004d7", "scanner": "scanner-primary", "fingerprint": "13f16eb43b6e4de5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/onnx/ort.all.bundle.min.mjs"}, "region": {"startLine": 1805}}}]}, {"ruleId": "scanner-4a9b7fa8e7224186", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort-wasm-simd-threaded.asyncify.mjs:49"}, "properties": {"repobilityId": "c72287f2d5f0b4e9", "scanner": "scanner-primary", "fingerprint": "4a9b7fa8e7224186", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/onnx/ort-wasm-simd-threaded.asyncify.mjs"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-eb4eb1c92a2c20b2", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.bundle.min.mjs:9"}, "properties": {"repobilityId": "099c5c75e39ec3cc", "scanner": "scanner-primary", "fingerprint": "eb4eb1c92a2c20b2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/onnx/ort.bundle.min.mjs"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-593b7ee120bd6d3c", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in public/onnx/ort.webgpu.bundle.min.mjs:8"}, "properties": {"repobilityId": "4cb9d2f488592929", "scanner": "scanner-primary", "fingerprint": "593b7ee120bd6d3c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/onnx/ort.webgpu.bundle.min.mjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-f18fda82a25ab987", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:137"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "f18fda82a25ab987", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-49e216b3a94157e4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/freeform3d-agent/route.ts:25"}, "properties": {"repobilityId": "95ce3c54897baa14", "scanner": "scanner-primary", "fingerprint": "49e216b3a94157e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/freeform3d-agent/route.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-27ab524d7888a07d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/lesson-tutor/route.ts:1"}, "properties": {"repobilityId": "2d94ba2a0c04c913", "scanner": "scanner-primary", "fingerprint": "27ab524d7888a07d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/lesson-tutor/route.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1c59265f630ba4b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/generate-part/route.ts:12"}, "properties": {"repobilityId": "c26da55c9f094ccf", "scanner": "scanner-primary", "fingerprint": "f1c59265f630ba4b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/generate-part/route.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-407c2238f943fb98", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/agent/route.ts:9"}, "properties": {"repobilityId": "82248c351106e148", "scanner": "scanner-primary", "fingerprint": "407c2238f943fb98", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/agent/route.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-77f750ed075e99dc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/starter-units/draft/route.ts:14"}, "properties": {"repobilityId": "96b2eaca97bf248e", "scanner": "scanner-primary", "fingerprint": "77f750ed075e99dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/starter-units/draft/route.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-1761d22f593911b4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/chat/route.ts:1"}, "properties": {"repobilityId": "adae45850f156b48", "scanner": "scanner-primary", "fingerprint": "1761d22f593911b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/chat/route.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-73f354f6f0753b6e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/studio-agent/route.ts:18"}, "properties": {"repobilityId": "1031dd04fd4cf6c6", "scanner": "scanner-primary", "fingerprint": "73f354f6f0753b6e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/studio-agent/route.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-0b2a66d2d446463a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/khan-save/route.ts:8"}, "properties": {"repobilityId": "03d63f6079efc22a", "scanner": "scanner-primary", "fingerprint": "0b2a66d2d446463a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/khan-save/route.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-90491e8f9530892e", "level": "note", "message": {"text": "Very large file: public/onnx/ort.all.min.mjs (4675 lines)"}, "properties": {"repobilityId": "958e4d054ef0fd6f", "scanner": "scanner-primary", "fingerprint": "90491e8f9530892e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-69298c290a1ec9ad", "level": "note", "message": {"text": "Very large file: public/onnx/ort.webgl.min.mjs (1826 lines)"}, "properties": {"repobilityId": "bdb43899e5a218ca", "scanner": "scanner-primary", "fingerprint": "69298c290a1ec9ad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8bef745bf5277307", "level": "note", "message": {"text": "Very large file: public/onnx/ort.jspi.mjs (4467 lines)"}, "properties": {"repobilityId": "5b2b0dc60db2164e", "scanner": "scanner-primary", "fingerprint": "8bef745bf5277307", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f26bb3fd2020f764", "level": "note", "message": {"text": "Very large file: public/onnx/ort.webgpu.mjs (4467 lines)"}, "properties": {"repobilityId": "96be9bf02d1966b8", "scanner": "scanner-primary", "fingerprint": "f26bb3fd2020f764", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f2daf51cbcfe82e4", "level": "note", "message": {"text": "Very large file: public/onnx/ort.all.bundle.min.mjs (4680 lines)"}, "properties": {"repobilityId": "79a58bbd298c0805", "scanner": "scanner-primary", "fingerprint": "f2daf51cbcfe82e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1d3944de609985c", "level": "note", "message": {"text": "Very large file: public/onnx/ort.wasm.mjs (3664 lines)"}, "properties": {"repobilityId": "e421a6de3dc68439", "scanner": "scanner-primary", "fingerprint": "e1d3944de609985c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a92a608d87b64a42", "level": "note", "message": {"text": "Very large file: public/onnx/ort.bundle.min.mjs (2861 lines)"}, "properties": {"repobilityId": "d986da35b53a3331", "scanner": "scanner-primary", "fingerprint": "a92a608d87b64a42", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1bef1cdeaf8b738f", "level": "note", "message": {"text": "Very large file: public/onnx/ort.min.mjs (2856 lines)"}, "properties": {"repobilityId": "2106efc9368efcbd", "scanner": "scanner-primary", "fingerprint": "1bef1cdeaf8b738f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3e00c0fab35bddf4", "level": "note", "message": {"text": "Very large file: src/components/building/BuildingCanvas.tsx (1661 lines)"}, "properties": {"repobilityId": "dcd73933db6f21d0", "scanner": "scanner-primary", "fingerprint": "3e00c0fab35bddf4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fd3cdf439ee59af0", "level": "note", "message": {"text": "Very large file: src/components/studio/panels/TiledImportPanel.tsx (2168 lines)"}, "properties": {"repobilityId": "10f6e2ade3d4eaeb", "scanner": "scanner-primary", "fingerprint": "fd3cdf439ee59af0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ac4ecd56abbc864a", "level": "note", "message": {"text": "Very large file: src/components/studio/panels/PackReadonlyView.tsx (2183 lines)"}, "properties": {"repobilityId": "c7e1b0a9fcfe5ff4", "scanner": "scanner-primary", "fingerprint": "ac4ecd56abbc864a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e822d2881e29060e", "level": "note", "message": {"text": "Very large file: src/components/studio/panels/TileAssetPropertiesPanel.tsx (2776 lines)"}, "properties": {"repobilityId": "0f92e49e4ab33a1c", "scanner": "scanner-primary", "fingerprint": "e822d2881e29060e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d540765fb063ad7", "level": "note", "message": {"text": "Very large file: src/components/studio/panels/TileCharacterPropertiesPanel.tsx (5203 lines)"}, "properties": {"repobilityId": "ca151b452782368f", "scanner": "scanner-primary", "fingerprint": "5d540765fb063ad7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1b2e8de47715b7ec", "level": "note", "message": {"text": "Very large file: src/components/studio/panels/ManaSeedCustomizerModal.tsx (1479 lines)"}, "properties": {"repobilityId": "4385ba2b879646f1", "scanner": "scanner-primary", "fingerprint": "1b2e8de47715b7ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9e3c5c3403ede65d", "level": "note", "message": {"text": "Very large file: src/components/studio/panels/TileAssetsView.tsx (13192 lines)"}, "properties": {"repobilityId": "1db7394014fcc445", "scanner": "scanner-primary", "fingerprint": "9e3c5c3403ede65d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bd14045b932266b8", "level": "note", "message": {"text": "Very large file: src/components/studio/panels/WorldGenPanel.tsx (1936 lines)"}, "properties": {"repobilityId": "fe36b6a1dbba578c", "scanner": "scanner-primary", "fingerprint": "bd14045b932266b8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-883dced6556cbd9a", "level": "note", "message": {"text": "Very large file: src/components/studio/views/TileView.tsx (7696 lines)"}, "properties": {"repobilityId": "eca16d7136249f6c", "scanner": "scanner-primary", "fingerprint": "883dced6556cbd9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3768b9749f6841a5", "level": "note", "message": {"text": "Very large file: src/components/studio/views/FreeformView.tsx (1253 lines)"}, "properties": {"repobilityId": "40388436744c63e9", "scanner": "scanner-primary", "fingerprint": "3768b9749f6841a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1b9b5d97f51db6ed", "level": "note", "message": {"text": "Very large file: src/app/extend-mlp/page.tsx (3572 lines)"}, "properties": {"repobilityId": "b15bbb296aa2c9d4", "scanner": "scanner-primary", "fingerprint": "1b9b5d97f51db6ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-804f7e7fde9b1887", "level": "note", "message": {"text": "Very large file: src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx (4027 lines)"}, "properties": {"repobilityId": "6ca026f4d2f46ce6", "scanner": "scanner-primary", "fingerprint": "804f7e7fde9b1887", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1f8fe81e73dc242f", "level": "note", "message": {"text": "Very large file: src/app/extend-mlp/tiled-wang-brush/page.tsx (1286 lines)"}, "properties": {"repobilityId": "d91fa2e0a0c7045b", "scanner": "scanner-primary", "fingerprint": "1f8fe81e73dc242f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f285212f24292877", "level": "note", "message": {"text": "Very large file: src/app/extend-mlp/sea-motion/page.tsx (3638 lines)"}, "properties": {"repobilityId": "47cc1b652f4b8286", "scanner": "scanner-primary", "fingerprint": "f285212f24292877", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-912d86ae67334f3d", "level": "note", "message": {"text": "Very large file: src/lib/wang-tiles.ts (1269 lines)"}, "properties": {"repobilityId": "df605735e971944a", "scanner": "scanner-primary", "fingerprint": "912d86ae67334f3d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8d544b7972d9b6e4", "level": "note", "message": {"text": "Very large file: src/lib/fantasy-world-gen.ts (2026 lines)"}, "properties": {"repobilityId": "8d76d942301ceac0", "scanner": "scanner-primary", "fingerprint": "8d544b7972d9b6e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-af0d13fe773fdc44", "level": "note", "message": {"text": "Very large file: src/lib/pixellab-tools.ts (1763 lines)"}, "properties": {"repobilityId": "e64dcb0fe14656bd", "scanner": "scanner-primary", "fingerprint": "af0d13fe773fdc44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-88149bbe8ccfc349", "level": "note", "message": {"text": "Very large file: src/lib/wang-world.ts (3088 lines)"}, "properties": {"repobilityId": "10f4407cea7614d6", "scanner": "scanner-primary", "fingerprint": "88149bbe8ccfc349", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-13ef768f4eab84c7", "level": "note", "message": {"text": "Very large file: src/lib/town/crowd-runtime.ts (1492 lines)"}, "properties": {"repobilityId": "3e490e37a36128e0", "scanner": "scanner-primary", "fingerprint": "13ef768f4eab84c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-460ebc4daf051442", "level": "note", "message": {"text": "Very large file: src/content/lang/zh-CN.generated.ts (6608 lines)"}, "properties": {"repobilityId": "83129e661f9d68ab", "scanner": "scanner-primary", "fingerprint": "460ebc4daf051442", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fcfded681b45fa38", "level": "note", "message": {"text": "Very large file: src/content/lang/hi.generated.ts (6613 lines)"}, "properties": {"repobilityId": "03905583400339a6", "scanner": "scanner-primary", "fingerprint": "fcfded681b45fa38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e47602a2481ad45a", "level": "note", "message": {"text": "Very large file: src/content/lang/pt-BR.generated.ts (6346 lines)"}, "properties": {"repobilityId": "bf5595d1897d268b", "scanner": "scanner-primary", "fingerprint": "e47602a2481ad45a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cbd43f1be593bec9", "level": "note", "message": {"text": "Very large file: src/content/lang/tr.generated.ts (6494 lines)"}, "properties": {"repobilityId": "fecf4a2cc7960f82", "scanner": "scanner-primary", "fingerprint": "cbd43f1be593bec9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-eef3283661f46b51", "level": "note", "message": {"text": "Very large file: src/content/lang/ar.generated.ts (6190 lines)"}, "properties": {"repobilityId": "7726ec8cc7a97c52", "scanner": "scanner-primary", "fingerprint": "eef3283661f46b51", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ee6059dfdab788b3", "level": "note", "message": {"text": "Very large file: src/content/lang/es.generated.ts (6357 lines)"}, "properties": {"repobilityId": "28e12587c0de45bc", "scanner": "scanner-primary", "fingerprint": "ee6059dfdab788b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-209ff9dbca29ed86", "level": "note", "message": {"text": "Very large file: src/content/lang/de.generated.ts (6388 lines)"}, "properties": {"repobilityId": "4fab73f1b86dde6a", "scanner": "scanner-primary", "fingerprint": "209ff9dbca29ed86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b99fd266d0a96b18", "level": "note", "message": {"text": "Very large file: src/content/lang/it.generated.ts (6490 lines)"}, "properties": {"repobilityId": "f7c5ed0b4ac83046", "scanner": "scanner-primary", "fingerprint": "b99fd266d0a96b18", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-79e2282a6656dfb8", "level": "note", "message": {"text": "Very large file: src/content/lang/id.generated.ts (6581 lines)"}, "properties": {"repobilityId": "26b072a8944c9cee", "scanner": "scanner-primary", "fingerprint": "79e2282a6656dfb8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5076e1543208281b", "level": "note", "message": {"text": "Very large file: src/content/lang/fr.generated.ts (6522 lines)"}, "properties": {"repobilityId": "55fac6890dc298eb", "scanner": "scanner-primary", "fingerprint": "5076e1543208281b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3325284d44446164", "level": "note", "message": {"text": "Very large file: src/content/lang/ru.generated.ts (6577 lines)"}, "properties": {"repobilityId": "cb5e267f8d455c02", "scanner": "scanner-primary", "fingerprint": "3325284d44446164", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d45f23520c0d396", "level": "note", "message": {"text": "Very large file: src/store/tile-store.ts (5472 lines)"}, "properties": {"repobilityId": "1df9f8b71f613d19", "scanner": "scanner-primary", "fingerprint": "5d45f23520c0d396", "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": "dd70d41464d22e82", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "1f4d37969aa7867b", "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": "1deb7d9333e453ee", "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": "5eaa9c4122cfdf0b", "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": "19d489023de8769c", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "21b724ff126ee20a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "06342f4dc35ae64b", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "832249ce6c30db44", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "db42939bb36793f2", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-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-77da665fbe400b70", "level": "none", "message": {"text": "Commented-code block (5 lines) in next.config.ts:3"}, "properties": {"repobilityId": "fb502e99d74ff744", "scanner": "scanner-primary", "fingerprint": "77da665fbe400b70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3551c1e7098e8c74", "level": "none", "message": {"text": "Commented-code block (7 lines) in scratch-patches/scratch3_animations/index.js:8"}, "properties": {"repobilityId": "4270ef8266457086", "scanner": "scanner-primary", "fingerprint": "3551c1e7098e8c74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f3ddef4eebafa8c", "level": "none", "message": {"text": "Commented-code block (12 lines) in tests/plateau-maze.test.mjs:1"}, "properties": {"repobilityId": "0f6a1880cda25b62", "scanner": "scanner-primary", "fingerprint": "6f3ddef4eebafa8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a514a6aba67f084f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/helpers/canvas-model.mjs:1"}, "properties": {"repobilityId": "6f7ab0087ec375cd", "scanner": "scanner-primary", "fingerprint": "a514a6aba67f084f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c91c678ccf9246ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/helpers/load-ts.mjs:1"}, "properties": {"repobilityId": "442bff1516e4a14e", "scanner": "scanner-primary", "fingerprint": "c91c678ccf9246ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96e673f57eb05ce3", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/import-mana-seed-farmers.mjs:56"}, "properties": {"repobilityId": "507a2fe509ab7f63", "scanner": "scanner-primary", "fingerprint": "96e673f57eb05ce3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96c3da12db643c37", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/import-fantasy-tileset.mjs:177"}, "properties": {"repobilityId": "25b7469d44f632ae", "scanner": "scanner-primary", "fingerprint": "96c3da12db643c37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8e827a516b61f83", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/wfc-train-remote.py:214"}, "properties": {"repobilityId": "0c889a1fe322805e", "scanner": "scanner-primary", "fingerprint": "d8e827a516b61f83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86bf223b3cd15135", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/sync-farmer-anims.mjs:30"}, "properties": {"repobilityId": "d7c25654986221e3", "scanner": "scanner-primary", "fingerprint": "86bf223b3cd15135", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-140ab9271bc1834f", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/wfc-train.py:226"}, "properties": {"repobilityId": "ba6fba86bd487ea8", "scanner": "scanner-primary", "fingerprint": "140ab9271bc1834f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdfdcb6b79552327", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/lang/build-courses.mjs:3"}, "properties": {"repobilityId": "4c299ff57826631c", "scanner": "scanner-primary", "fingerprint": "cdfdcb6b79552327", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef4d9f7179e2cca9", "level": "none", "message": {"text": "Commented-code block (9 lines) in modal/wfc_trainer.py:42"}, "properties": {"repobilityId": "78cf749af647a54a", "scanner": "scanner-primary", "fingerprint": "ef4d9f7179e2cca9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-938da9c8c1c9e958", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.min.mjs:7"}, "properties": {"repobilityId": "c8c4cfcc20baacda", "scanner": "scanner-primary", "fingerprint": "938da9c8c1c9e958", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e8cd87c591c3f069", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.min.mjs:6"}, "properties": {"repobilityId": "b6a781231417dc02", "scanner": "scanner-primary", "fingerprint": "e8cd87c591c3f069", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-70390c59008428ea", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.all.min.mjs:1802"}, "properties": {"repobilityId": "9f9fd26ef472d367", "scanner": "scanner-primary", "fingerprint": "70390c59008428ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2aa818766b9672ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.all.min.mjs:1802"}, "properties": {"repobilityId": "d089274a965f3a5f", "scanner": "scanner-primary", "fingerprint": "2aa818766b9672ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b9ed309ce8560f2e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgl.min.mjs:1802"}, "properties": {"repobilityId": "3831cd4e29be0c99", "scanner": "scanner-primary", "fingerprint": "b9ed309ce8560f2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3555f9e0a61ad0f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.jsep.mjs:8"}, "properties": {"repobilityId": "19daa509a05adb98", "scanner": "scanner-primary", "fingerprint": "3555f9e0a61ad0f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14978b3975158615", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.bundle.min.mjs:9"}, "properties": {"repobilityId": "c85d79056117f921", "scanner": "scanner-primary", "fingerprint": "14978b3975158615", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-394e7fcbfa2ea1da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.bundle.min.mjs:6"}, "properties": {"repobilityId": "51ae194d3e81b3c4", "scanner": "scanner-primary", "fingerprint": "394e7fcbfa2ea1da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72f1ffaee69e9919", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.jspi.mjs:2648"}, "properties": {"repobilityId": "5c3c644c10650b97", "scanner": "scanner-primary", "fingerprint": "72f1ffaee69e9919", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-396294cb4f65ba1b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.jspi.mjs:1453"}, "properties": {"repobilityId": "9ffed67b29013dfe", "scanner": "scanner-primary", "fingerprint": "396294cb4f65ba1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5d09ce88e0c8def3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.jspi.mjs:4"}, "properties": {"repobilityId": "6ab4562c2672ce70", "scanner": "scanner-primary", "fingerprint": "5d09ce88e0c8def3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e3295a2a1b29b9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.node.min.mjs:7"}, "properties": {"repobilityId": "8bb4b049fdb3f271", "scanner": "scanner-primary", "fingerprint": "9e3295a2a1b29b9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ddeb8e7885a551b9", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.mjs:2648"}, "properties": {"repobilityId": "1c4f0d503111db01", "scanner": "scanner-primary", "fingerprint": "ddeb8e7885a551b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aaee3eba395c455f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.mjs:1453"}, "properties": {"repobilityId": "e5b65eb5d2300490", "scanner": "scanner-primary", "fingerprint": "aaee3eba395c455f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe8d1a34f7861ee6", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.all.bundle.min.mjs:1807"}, "properties": {"repobilityId": "196d0ef45e941092", "scanner": "scanner-primary", "fingerprint": "fe8d1a34f7861ee6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f8695b06093bdc29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.all.bundle.min.mjs:1802"}, "properties": {"repobilityId": "d92a19ef2a63c9c5", "scanner": "scanner-primary", "fingerprint": "f8695b06093bdc29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20aa871bc51c2fa5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.asyncify.mjs:5"}, "properties": {"repobilityId": "aff82056f480081c", "scanner": "scanner-primary", "fingerprint": "20aa871bc51c2fa5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ecdc905d3a02e0a", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.min.mjs:7"}, "properties": {"repobilityId": "330b53c554c9b61e", "scanner": "scanner-primary", "fingerprint": "2ecdc905d3a02e0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-86cd73fc49f5e244", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.min.mjs:6"}, "properties": {"repobilityId": "3b31a8ae402742b1", "scanner": "scanner-primary", "fingerprint": "86cd73fc49f5e244", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3aa8c9ce811e683b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.bundle.min.mjs:6"}, "properties": {"repobilityId": "2068d55dc8ba92ee", "scanner": "scanner-primary", "fingerprint": "3aa8c9ce811e683b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a48827333430b75", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.wasm.mjs:2490"}, "properties": {"repobilityId": "15fff2f2e1e836a4", "scanner": "scanner-primary", "fingerprint": "3a48827333430b75", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bcc30e388f2dd506", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.mjs:1453"}, "properties": {"repobilityId": "1ef553fab4addea9", "scanner": "scanner-primary", "fingerprint": "bcc30e388f2dd506", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f913164142db58b5", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.bundle.min.mjs:11"}, "properties": {"repobilityId": "5d0984b6572b034d", "scanner": "scanner-primary", "fingerprint": "f913164142db58b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bee644b5de209907", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.bundle.min.mjs:7"}, "properties": {"repobilityId": "81619b2289d6993d", "scanner": "scanner-primary", "fingerprint": "bee644b5de209907", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2eb9f1c4b1a5dd5", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.min.mjs:6"}, "properties": {"repobilityId": "2e35dfbfdc612143", "scanner": "scanner-primary", "fingerprint": "b2eb9f1c4b1a5dd5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2294eddf72d9e5c4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.min.mjs:6"}, "properties": {"repobilityId": "3ab2ca970a5a6cc7", "scanner": "scanner-primary", "fingerprint": "2294eddf72d9e5c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e1298e95cfd627c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.wasm.min.mjs:6"}, "properties": {"repobilityId": "9ea2d0b6dda1f74c", "scanner": "scanner-primary", "fingerprint": "3e1298e95cfd627c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a61e5953efe07353", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort-wasm-simd-threaded.mjs:4"}, "properties": {"repobilityId": "7354a38c3c216c9c", "scanner": "scanner-primary", "fingerprint": "a61e5953efe07353", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f0e7262043fb94c", "level": "note", "message": {"text": "Legacy-named symbol `copyOld` in public/onnx/ort.webgpu.bundle.min.mjs:9"}, "properties": {"repobilityId": "dba92137daea4a93", "scanner": "scanner-primary", "fingerprint": "5f0e7262043fb94c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-00e50f171f126986", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/onnx/ort.webgpu.bundle.min.mjs:6"}, "properties": {"repobilityId": "b0f279c10ffabcaf", "scanner": "scanner-primary", "fingerprint": "00e50f171f126986", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-536d7c6a53ded7fd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/scribble-overlay.tsx:35"}, "properties": {"repobilityId": "875ee462e1dd5688", "scanner": "scanner-primary", "fingerprint": "536d7c6a53ded7fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-795bb6fdd7786e09", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/student/StudentApp.tsx:1"}, "properties": {"repobilityId": "6447972a5646e2f1", "scanner": "scanner-primary", "fingerprint": "795bb6fdd7786e09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5b21ec4973509fc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/student/RobloxAvatar.tsx:49"}, "properties": {"repobilityId": "bcd946b9c0903c1b", "scanner": "scanner-primary", "fingerprint": "f5b21ec4973509fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b8304d18115212e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/student/wardrobe/ItemPreview.tsx:1"}, "properties": {"repobilityId": "b08a85840127ac3a", "scanner": "scanner-primary", "fingerprint": "1b8304d18115212e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49d88dab7caf5cd9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/student/wardrobe/AvatarScene.tsx:3"}, "properties": {"repobilityId": "5269769a983a6eb1", "scanner": "scanner-primary", "fingerprint": "49d88dab7caf5cd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f83950a06c2a6b5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/student/wardrobe/avatar-map.ts:5"}, "properties": {"repobilityId": "c82429a189c85d8f", "scanner": "scanner-primary", "fingerprint": "f83950a06c2a6b5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-194503d80069b5f9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/student/crates/Crate3D.tsx:6"}, "properties": {"repobilityId": "cbb074e9e3fb1c81", "scanner": "scanner-primary", "fingerprint": "194503d80069b5f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9134b6af8f7453c9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/student/crates/CrateUnboxing.tsx:1"}, "properties": {"repobilityId": "dcd7f5376a8c36de", "scanner": "scanner-primary", "fingerprint": "9134b6af8f7453c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-654cb1f22b0b0b3c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/student/crates/crate-textures.ts:3"}, "properties": {"repobilityId": "d90e0b69cd684b0e", "scanner": "scanner-primary", "fingerprint": "654cb1f22b0b0b3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7d2aa76dc353181", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/building/BuildingCanvas.tsx:234"}, "properties": {"repobilityId": "036d4dd8a4c51e8a", "scanner": "scanner-primary", "fingerprint": "e7d2aa76dc353181", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21fb61d167651ad2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/building/character.ts:119"}, "properties": {"repobilityId": "eac0a79c62d9ed37", "scanner": "scanner-primary", "fingerprint": "21fb61d167651ad2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de978b3773f449e4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/teacher-setup/SetupHelpChat.tsx:7"}, "properties": {"repobilityId": "3731a81376e22fe7", "scanner": "scanner-primary", "fingerprint": "de978b3773f449e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a403a0337aae0f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/ClassroomSetupApp.tsx:71"}, "properties": {"repobilityId": "2660a248c79eccf9", "scanner": "scanner-primary", "fingerprint": "5a403a0337aae0f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c270cabdeaf24882", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/StepRoster.tsx:17"}, "properties": {"repobilityId": "000963e311b2b5de", "scanner": "scanner-primary", "fingerprint": "c270cabdeaf24882", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9afaa53dc511b4a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/teacher-setup/StepRoster.tsx:67"}, "properties": {"repobilityId": "5fe78b8f6319f432", "scanner": "scanner-primary", "fingerprint": "9afaa53dc511b4a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bd083574a862fc2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/ClassroomRosterPreview.tsx:1"}, "properties": {"repobilityId": "47912c83bce66e3c", "scanner": "scanner-primary", "fingerprint": "0bd083574a862fc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f903a1429ca61d4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/teacher-setup/StepUnit.tsx:8"}, "properties": {"repobilityId": "c959de7599b0114f", "scanner": "scanner-primary", "fingerprint": "0f903a1429ca61d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-201fc5c94086cca7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/teacher-setup/types.ts:21"}, "properties": {"repobilityId": "0240bc8a651d8ab3", "scanner": "scanner-primary", "fingerprint": "201fc5c94086cca7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cdc5a50f1a4c66d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/homework/ap-probe/types.ts:71"}, "properties": {"repobilityId": "91cda6e417da9d2f", "scanner": "scanner-primary", "fingerprint": "5cdc5a50f1a4c66d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db515c0f6ab27652", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/homework/tutor/TutorChatbot.tsx:108"}, "properties": {"repobilityId": "462e7176c9a57833", "scanner": "scanner-primary", "fingerprint": "db515c0f6ab27652", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ed3f353c8cdb2af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/homework/tutor/TutorChatbot.tsx:68"}, "properties": {"repobilityId": "a131050b3cc8c37f", "scanner": "scanner-primary", "fingerprint": "9ed3f353c8cdb2af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de9be2d3c92046e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/homework/tutor/TutorAvatar.tsx:3"}, "properties": {"repobilityId": "c33709794f74051f", "scanner": "scanner-primary", "fingerprint": "de9be2d3c92046e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3ae940bd67f231e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/scratch/BlocksGameShell.tsx:89"}, "properties": {"repobilityId": "be7461167972931e", "scanner": "scanner-primary", "fingerprint": "f3ae940bd67f231e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14ff1f8006fcc524", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/scratch/BricksPanels.tsx:8"}, "properties": {"repobilityId": "dd193974d2893956", "scanner": "scanner-primary", "fingerprint": "14ff1f8006fcc524", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-877ef97365a102eb", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/components/studio/StudioLayout.tsx:14"}, "properties": {"repobilityId": "5c4264bfbc54992d", "scanner": "scanner-primary", "fingerprint": "877ef97365a102eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe8ecd9b135716c5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/studio/WangHeadlessBaker.tsx:3"}, "properties": {"repobilityId": "e85b17d3e6330d97", "scanner": "scanner-primary", "fingerprint": "fe8ecd9b135716c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c28f1c7f9b3a7db9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/TopMenuBar.tsx:17"}, "properties": {"repobilityId": "2289f9acaeda5adc", "scanner": "scanner-primary", "fingerprint": "c28f1c7f9b3a7db9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-739cb26c5bee2837", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/studio/WangChunkStreamer.tsx:5"}, "properties": {"repobilityId": "473e1c8f17221017", "scanner": "scanner-primary", "fingerprint": "739cb26c5bee2837", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f329dca58f395d1f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/StudioOverlay.tsx:50"}, "properties": {"repobilityId": "e4b1c8fc1f7488cc", "scanner": "scanner-primary", "fingerprint": "f329dca58f395d1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a4a9b8bd4df3911", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/studio/LeftPanel.tsx:10"}, "properties": {"repobilityId": "8a164df513f7490b", "scanner": "scanner-primary", "fingerprint": "6a4a9b8bd4df3911", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-311a6ff3e82ac1b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/GameToolbar.tsx:53"}, "properties": {"repobilityId": "932d4eef73b3b0c1", "scanner": "scanner-primary", "fingerprint": "311a6ff3e82ac1b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-615217f35f57e0ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/StudioActions.tsx:36"}, "properties": {"repobilityId": "194e94725265eac8", "scanner": "scanner-primary", "fingerprint": "615217f35f57e0ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd801df46b5d6453", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/studio/RightPanel.tsx:11"}, "properties": {"repobilityId": "636d3404a25e4dd4", "scanner": "scanner-primary", "fingerprint": "fd801df46b5d6453", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f50cd1abf501b2c5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/studio/modals/NewGameDialog.tsx:11"}, "properties": {"repobilityId": "c79eb13105c8a47a", "scanner": "scanner-primary", "fingerprint": "f50cd1abf501b2c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dafb047b9fcac7f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/SlimeShowcasePanel.tsx:186"}, "properties": {"repobilityId": "5015b1936bda8c40", "scanner": "scanner-primary", "fingerprint": "dafb047b9fcac7f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-93075ded43b2c93e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/MarketplaceLibraryPanel.tsx:241"}, "properties": {"repobilityId": "50b88595f7192e2c", "scanner": "scanner-primary", "fingerprint": "93075ded43b2c93e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc4b4f7a8264e7bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/ConnectorsPanel.tsx:6"}, "properties": {"repobilityId": "cc82933162f8461b", "scanner": "scanner-primary", "fingerprint": "cc4b4f7a8264e7bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2435496e4b85ae7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TiledImportPanel.tsx:151"}, "properties": {"repobilityId": "70fa1cd7535578fd", "scanner": "scanner-primary", "fingerprint": "b2435496e4b85ae7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b884ec14b0a1fe4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TiledImportPanel.tsx:1973"}, "properties": {"repobilityId": "04af3644972d98d1", "scanner": "scanner-primary", "fingerprint": "4b884ec14b0a1fe4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19dfaf27a296a289", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/PackReadonlyView.tsx:230"}, "properties": {"repobilityId": "175b1d3968a773ea", "scanner": "scanner-primary", "fingerprint": "19dfaf27a296a289", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7724619562c7a2e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/PackReadonlyView.tsx:1666"}, "properties": {"repobilityId": "6c58f6bea49a4608", "scanner": "scanner-primary", "fingerprint": "7724619562c7a2e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f64a53465ffb4ce5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/studio/panels/PixelLabToolForm.tsx:522"}, "properties": {"repobilityId": "775d8a4e224ae7fb", "scanner": "scanner-primary", "fingerprint": "f64a53465ffb4ce5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7af17aa81a84283a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/PixelLabToolForm.tsx:509"}, "properties": {"repobilityId": "7592ec07c0ebe27a", "scanner": "scanner-primary", "fingerprint": "7af17aa81a84283a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68ceca66deb5bcaf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/ProceduralElementPropertiesPanel.tsx:233"}, "properties": {"repobilityId": "345af06180404fc5", "scanner": "scanner-primary", "fingerprint": "68ceca66deb5bcaf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-71eda9ab0150f35b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/ScenePanel.tsx:163"}, "properties": {"repobilityId": "85f8ae23cad94a3c", "scanner": "scanner-primary", "fingerprint": "71eda9ab0150f35b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-129a045fffc4f1e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TileAssetPropertiesPanel.tsx:188"}, "properties": {"repobilityId": "cfe53dc20ba70016", "scanner": "scanner-primary", "fingerprint": "129a045fffc4f1e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34225c4a8cf54f03", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/studio/panels/RecreateOptionsDialog.tsx:131"}, "properties": {"repobilityId": "cf57a60488159278", "scanner": "scanner-primary", "fingerprint": "34225c4a8cf54f03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4dba30ee9c2c76a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TilesetGenerationForm.tsx:31"}, "properties": {"repobilityId": "e43ff02f51b3b149", "scanner": "scanner-primary", "fingerprint": "4dba30ee9c2c76a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb18a7618f4cdb29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TilesetGenerationForm.tsx:276"}, "properties": {"repobilityId": "a46a3de3d424cb8d", "scanner": "scanner-primary", "fingerprint": "bb18a7618f4cdb29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34cc1c136d4d8ba0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/CharacterImportOverlay.tsx:161"}, "properties": {"repobilityId": "5fb63f9f7a61321a", "scanner": "scanner-primary", "fingerprint": "34cc1c136d4d8ba0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-acfe2727f91d6e3e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TileCharacterPropertiesPanel.tsx:92"}, "properties": {"repobilityId": "5a3ccf75445008c7", "scanner": "scanner-primary", "fingerprint": "acfe2727f91d6e3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ebe0d2ec6b3f9dbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TileCharacterPropertiesPanel.tsx:226"}, "properties": {"repobilityId": "946424435cebb0cb", "scanner": "scanner-primary", "fingerprint": "ebe0d2ec6b3f9dbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3af2505a26de41a8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/studio/panels/ManaSeedCustomizerModal.tsx:237"}, "properties": {"repobilityId": "fd362b7770c56c9a", "scanner": "scanner-primary", "fingerprint": "3af2505a26de41a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99eff16081d24830", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/TileTexturePropertiesPanel.tsx:106"}, "properties": {"repobilityId": "d779cdb849ee776c", "scanner": "scanner-primary", "fingerprint": "99eff16081d24830", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c5b8b15acd2e7ab", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/studio/panels/TileSheetPanel.tsx:3"}, "properties": {"repobilityId": "5b24f8f51cc17ea9", "scanner": "scanner-primary", "fingerprint": "9c5b8b15acd2e7ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c890e9cec1b888b", "level": "note", "message": {"text": "Legacy-named symbol `bulkAnimateHideOld` in src/components/studio/panels/TileAssetsView.tsx:5844"}, "properties": {"repobilityId": "20a16626b909bbba", "scanner": "scanner-primary", "fingerprint": "2c890e9cec1b888b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2f7b83904fbdb0d4", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/studio/panels/TileAssetsView.tsx:155"}, "properties": {"repobilityId": "cc0a1e3a3904215d", "scanner": "scanner-primary", "fingerprint": "2f7b83904fbdb0d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2150576acd9a3966", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/TileAssetsView.tsx:6871"}, "properties": {"repobilityId": "d3be6c36f7f4f44c", "scanner": "scanner-primary", "fingerprint": "2150576acd9a3966", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cde89381eec48b69", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/panels/WorldGenPanel.tsx:82"}, "properties": {"repobilityId": "a7835ee9538b694f", "scanner": "scanner-primary", "fingerprint": "cde89381eec48b69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3fbf69f135b0d82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/studio/panels/WorldGenPanel.tsx:148"}, "properties": {"repobilityId": "c1b09558b337ce5f", "scanner": "scanner-primary", "fingerprint": "f3fbf69f135b0d82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f1bb92fe93f67ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/views/FreeformView3D.tsx:246"}, "properties": {"repobilityId": "692b30f757b6ff54", "scanner": "scanner-primary", "fingerprint": "4f1bb92fe93f67ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f072fcbb42cdadce", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/studio/views/RoomZoneOverlay.tsx:99"}, "properties": {"repobilityId": "611a96fab0d43ac5", "scanner": "scanner-primary", "fingerprint": "f072fcbb42cdadce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed09b0a0b23129be", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/components/studio/views/WorkspaceView.tsx:12"}, "properties": {"repobilityId": "ece5ef37744e32d5", "scanner": "scanner-primary", "fingerprint": "ed09b0a0b23129be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1310144600cfedc2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/views/FlowchartView.tsx:79"}, "properties": {"repobilityId": "0d9e788965c76171", "scanner": "scanner-primary", "fingerprint": "1310144600cfedc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb408d62d581b25a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/views/TileView.tsx:853"}, "properties": {"repobilityId": "7609aaa8a06e8c72", "scanner": "scanner-primary", "fingerprint": "bb408d62d581b25a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ac619995f3c255e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/views/RoomViewSwitcher.tsx:97"}, "properties": {"repobilityId": "cd4fa7db02b848c7", "scanner": "scanner-primary", "fingerprint": "7ac619995f3c255e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdb991c9952d2813", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/studio/views/FreeformView.tsx:184"}, "properties": {"repobilityId": "b3b40456ed94488b", "scanner": "scanner-primary", "fingerprint": "cdb991c9952d2813", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ba0c053e3603f73", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/views/freeform3d/PlayHUD.tsx:163"}, "properties": {"repobilityId": "b0fb8f633a662ee4", "scanner": "scanner-primary", "fingerprint": "5ba0c053e3603f73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a12e1b62033a51d4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/studio/views/freeform3d/PlayTicker.tsx:153"}, "properties": {"repobilityId": "3cf4a28ab16c8305", "scanner": "scanner-primary", "fingerprint": "a12e1b62033a51d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30682682d9f4ae3d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/teacher/teacher-data-context.tsx:5"}, "properties": {"repobilityId": "0e2b36a4c278d1e5", "scanner": "scanner-primary", "fingerprint": "30682682d9f4ae3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c520dfe8d71fc7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/teacher/teacher-data-context.tsx:130"}, "properties": {"repobilityId": "0dc979db80ea9c38", "scanner": "scanner-primary", "fingerprint": "4c520dfe8d71fc7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ce3111c5113f2f5d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/teacher/NewAssignment.tsx:4"}, "properties": {"repobilityId": "6390c22b01434dae", "scanner": "scanner-primary", "fingerprint": "ce3111c5113f2f5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0bd01ee3af3e753", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/teacher/sample-data.ts:30"}, "properties": {"repobilityId": "5937250ad60ad019", "scanner": "scanner-primary", "fingerprint": "b0bd01ee3af3e753", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55ab81bb2db57b76", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/teacher/shared.tsx:54"}, "properties": {"repobilityId": "80563a648b532daa", "scanner": "scanner-primary", "fingerprint": "55ab81bb2db57b76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee561085f768f269", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/teacher/TeacherApp.tsx:25"}, "properties": {"repobilityId": "6d83b665f906816f", "scanner": "scanner-primary", "fingerprint": "ee561085f768f269", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef80fad2f14d22dc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/teach/LiveHost.tsx:10"}, "properties": {"repobilityId": "132076f07505967b", "scanner": "scanner-primary", "fingerprint": "ef80fad2f14d22dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4aecf81ea805e58", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/page.tsx:124"}, "properties": {"repobilityId": "a667eb1e8871be91", "scanner": "scanner-primary", "fingerprint": "c4aecf81ea805e58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f87202e194c5bd91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/page.tsx:3483"}, "properties": {"repobilityId": "1ae7b195dbe617ad", "scanner": "scanner-primary", "fingerprint": "f87202e194c5bd91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-defb024867dd118f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/maze/page.tsx:3"}, "properties": {"repobilityId": "a2e084394c4a45a9", "scanner": "scanner-primary", "fingerprint": "defb024867dd118f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36be0f8616f4abed", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/extend-mlp/maze/looks.ts:1"}, "properties": {"repobilityId": "daeb14d7b4f23319", "scanner": "scanner-primary", "fingerprint": "36be0f8616f4abed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d198723b3734d960", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/extend-mlp/rock-slope-pack/overlays.ts:1"}, "properties": {"repobilityId": "cf2816885dd1a8e5", "scanner": "scanner-primary", "fingerprint": "d198723b3734d960", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-789a23e69109ea6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:3"}, "properties": {"repobilityId": "553cd75d7baa08cf", "scanner": "scanner-primary", "fingerprint": "789a23e69109ea6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbc1ca2ea6772daa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/rock-slope-pack/GeneratorClient.tsx:473"}, "properties": {"repobilityId": "7bee55d34d5e9975", "scanner": "scanner-primary", "fingerprint": "cbc1ca2ea6772daa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7fdd5d90a469f2ab", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/rock-slopes/page.tsx:3"}, "properties": {"repobilityId": "bba5d82b47d3d01f", "scanner": "scanner-primary", "fingerprint": "7fdd5d90a469f2ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e753f8a044a8857b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/use-mesa-render.ts:1"}, "properties": {"repobilityId": "f78a721ac75f9ff3", "scanner": "scanner-primary", "fingerprint": "e753f8a044a8857b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3fabdfdfb3f821d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/mesa-generate.ts:3"}, "properties": {"repobilityId": "5a4e76679f99cd8d", "scanner": "scanner-primary", "fingerprint": "a3fabdfdfb3f821d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f2ccf26c71c0004", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/mesa/page.tsx:3"}, "properties": {"repobilityId": "637720e5116f723b", "scanner": "scanner-primary", "fingerprint": "6f2ccf26c71c0004", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54fc82cf344a4ffa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tileset-compare/page.tsx:57"}, "properties": {"repobilityId": "2c84a37d384f401b", "scanner": "scanner-primary", "fingerprint": "54fc82cf344a4ffa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85dc887e9b41c5d6", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/app/extend-mlp/tiled-wang-brush/tile-match.ts:3"}, "properties": {"repobilityId": "75e27dd32a861aa0", "scanner": "scanner-primary", "fingerprint": "85dc887e9b41c5d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e25bd9788841095", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/maze-blob.ts:1"}, "properties": {"repobilityId": "65e3a3d0c819d824", "scanner": "scanner-primary", "fingerprint": "0e25bd9788841095", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e5a9afa23852771", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/extend-mlp/tiled-wang-brush/maze-validate.ts:1"}, "properties": {"repobilityId": "d73a9fbb3a94a146", "scanner": "scanner-primary", "fingerprint": "4e5a9afa23852771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e174d80f8670a5c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/tiled-wang-brush/export-csv.ts:34"}, "properties": {"repobilityId": "e232628ef4f73d0c", "scanner": "scanner-primary", "fingerprint": "5e174d80f8670a5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a18896e587d3863b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/export-level-map.ts:5"}, "properties": {"repobilityId": "5847e60b9670c695", "scanner": "scanner-primary", "fingerprint": "a18896e587d3863b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5757c27ef388c4e", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/extend-mlp/tiled-wang-brush/stairs.ts:3"}, "properties": {"repobilityId": "a66fe172205868c4", "scanner": "scanner-primary", "fingerprint": "b5757c27ef388c4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1463ce81525ae551", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/stair-validity.ts:55"}, "properties": {"repobilityId": "67b29dec3b9e8bfe", "scanner": "scanner-primary", "fingerprint": "1463ce81525ae551", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a8a9b9efc129bc3", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/app/extend-mlp/tiled-wang-brush/wangid.ts:23"}, "properties": {"repobilityId": "b51afcd6e70fd172", "scanner": "scanner-primary", "fingerprint": "8a8a9b9efc129bc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27e77dcdf629442e", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/app/extend-mlp/tiled-wang-brush/maze-stamp.ts:1"}, "properties": {"repobilityId": "65ebffb92a3776fd", "scanner": "scanner-primary", "fingerprint": "27e77dcdf629442e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72975b57ca266876", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/extend-mlp/tiled-wang-brush/maze-plan.ts:1"}, "properties": {"repobilityId": "b68576035c891e50", "scanner": "scanner-primary", "fingerprint": "72975b57ca266876", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb19995c0910becf", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/extend-mlp/tiled-wang-brush/maze-carve.ts:1"}, "properties": {"repobilityId": "b0b7d04d9e0b627e", "scanner": "scanner-primary", "fingerprint": "fb19995c0910becf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54f9f8b40149db00", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/app/extend-mlp/tiled-wang-brush/page.tsx:5"}, "properties": {"repobilityId": "7a6d69613484a540", "scanner": "scanner-primary", "fingerprint": "54f9f8b40149db00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e728d1935578d093", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tiled-wang-brush/page.tsx:240"}, "properties": {"repobilityId": "0aeeeb5809521199", "scanner": "scanner-primary", "fingerprint": "e728d1935578d093", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec296ca48dee6157", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/extend-mlp/tiled-wang-brush/use-render-canvas.ts:159"}, "properties": {"repobilityId": "4cb65586bb1a00bc", "scanner": "scanner-primary", "fingerprint": "ec296ca48dee6157", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3abd6a52b97ee4e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-wang-brush/use-tile-overlays.ts:45"}, "properties": {"repobilityId": "6e5f88eb077b8566", "scanner": "scanner-primary", "fingerprint": "3abd6a52b97ee4e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42887cb0780ca879", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/extend-mlp/tiled-wang-brush/face-tiles.ts:4"}, "properties": {"repobilityId": "5b84dc866b8108be", "scanner": "scanner-primary", "fingerprint": "42887cb0780ca879", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c45b934ac7005399", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/app/extend-mlp/tiled-wang-brush/maze-generate.ts:45"}, "properties": {"repobilityId": "2f7bb78166456efa", "scanner": "scanner-primary", "fingerprint": "c45b934ac7005399", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6442448eb3871f22", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/tiled-wang-brush/cursor-paint.ts:8"}, "properties": {"repobilityId": "20043829bf154941", "scanner": "scanner-primary", "fingerprint": "6442448eb3871f22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e2839c47f3dd56c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/sea-motion/page.tsx:124"}, "properties": {"repobilityId": "c229723265eb1e13", "scanner": "scanner-primary", "fingerprint": "6e2839c47f3dd56c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-113dc6133456d249", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/sea-motion/page.tsx:3549"}, "properties": {"repobilityId": "e10ec4adfd4e3bd7", "scanner": "scanner-primary", "fingerprint": "113dc6133456d249", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77322b579ab01da7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/extend-mlp/rock-slope-level2/page.tsx:3"}, "properties": {"repobilityId": "731357973e96f29a", "scanner": "scanner-primary", "fingerprint": "77322b579ab01da7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2a5e3d040081fe8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-mlp/tiled-automap/page.tsx:124"}, "properties": {"repobilityId": "f717bb4e27407377", "scanner": "scanner-primary", "fingerprint": "f2a5e3d040081fe8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dc6a9fb97cf1c9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/tiled-automap/page.tsx:215"}, "properties": {"repobilityId": "6a7a66af4137db7b", "scanner": "scanner-primary", "fingerprint": "5dc6a9fb97cf1c9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8c32d8956fbdb44", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/extend-mlp/shore-preview/page.tsx:3"}, "properties": {"repobilityId": "831cc4dd42d6bef0", "scanner": "scanner-primary", "fingerprint": "d8c32d8956fbdb44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eceb3264b124e791", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-mlp/shore-preview/page.tsx:68"}, "properties": {"repobilityId": "10c7ae7b4ecd993b", "scanner": "scanner-primary", "fingerprint": "eceb3264b124e791", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c896d5a11ac9490", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/play/quiz/[pin]/page.tsx:609"}, "properties": {"repobilityId": "f1a00973c1c9e4d7", "scanner": "scanner-primary", "fingerprint": "7c896d5a11ac9490", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a215fcc08e76e83", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/play/quiz/[pin]/page.tsx:52"}, "properties": {"repobilityId": "ee1fec2d5931b7d5", "scanner": "scanner-primary", "fingerprint": "8a215fcc08e76e83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87dda7416187f3d6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/play/race/[pin]/page.tsx:3"}, "properties": {"repobilityId": "d59f594b393ee853", "scanner": "scanner-primary", "fingerprint": "87dda7416187f3d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-016c7759be8d80a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/play/race/[pin]/page.tsx:74"}, "properties": {"repobilityId": "cbfa0355f800eb3f", "scanner": "scanner-primary", "fingerprint": "016c7759be8d80a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7afa6a92d876c97", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/play/[gameId]/page.tsx:13"}, "properties": {"repobilityId": "fdec16babae627f6", "scanner": "scanner-primary", "fingerprint": "f7afa6a92d876c97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f954947408c74a7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/lang/profile/route.ts:6"}, "properties": {"repobilityId": "84d6075fd323aec0", "scanner": "scanner-primary", "fingerprint": "f954947408c74a7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ee22bdb86351fd5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/scenes/freeform-2d/route.ts:18"}, "properties": {"repobilityId": "5d38965a22903f78", "scanner": "scanner-primary", "fingerprint": "4ee22bdb86351fd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32ea5611cb470501", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/schools/search/route.ts:3"}, "properties": {"repobilityId": "0ab38f2a23f9981d", "scanner": "scanner-primary", "fingerprint": "32ea5611cb470501", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e90219c574ddec3d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/tutor-help/route.ts:6"}, "properties": {"repobilityId": "503467ba4b6d9897", "scanner": "scanner-primary", "fingerprint": "e90219c574ddec3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f21eeb2f1c277333", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/tile-characters/route.ts:16"}, "properties": {"repobilityId": "02cbc6ab10a7d933", "scanner": "scanner-primary", "fingerprint": "f21eeb2f1c277333", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3016e0554235f229", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/games/route.ts:26"}, "properties": {"repobilityId": "5bbd7a9235a90a38", "scanner": "scanner-primary", "fingerprint": "3016e0554235f229", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01224071d2b29ad1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/games/save/route.ts:6"}, "properties": {"repobilityId": "10ffdb3cbc3618db", "scanner": "scanner-primary", "fingerprint": "01224071d2b29ad1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-908a9793908abeb5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab/library/route.ts:156"}, "properties": {"repobilityId": "742f249922fdecdc", "scanner": "scanner-primary", "fingerprint": "908a9793908abeb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a06942a1e202b5b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/pixellab/library/preview/route.ts:77"}, "properties": {"repobilityId": "1c0c948c411bf6ea", "scanner": "scanner-primary", "fingerprint": "6a06942a1e202b5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01b6197ae2a17246", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab/library/preview/route.ts:102"}, "properties": {"repobilityId": "78d100a316e526e9", "scanner": "scanner-primary", "fingerprint": "01b6197ae2a17246", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87ffb5330828423a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/pixellab/library/characters/[id]/route.ts:217"}, "properties": {"repobilityId": "2185140241dbe06b", "scanner": "scanner-primary", "fingerprint": "87ffb5330828423a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78788743d71a0fd4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/pixellab/run/[mcpName]/route.ts:226"}, "properties": {"repobilityId": "88687683eab0776f", "scanner": "scanner-primary", "fingerprint": "78788743d71a0fd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfc61e388bbee998", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/moderation/queue/route.ts:6"}, "properties": {"repobilityId": "0748f98f20654690", "scanner": "scanner-primary", "fingerprint": "cfc61e388bbee998", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da6ffe87cc39d46b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/moderation/reports/[id]/route.ts:6"}, "properties": {"repobilityId": "22400e1a8e5b82c4", "scanner": "scanner-primary", "fingerprint": "da6ffe87cc39d46b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-073bb3d0049591c7", "level": "none", "message": {"text": "Commented-code block (17 lines) in src/app/api/agent/route.ts:259"}, "properties": {"repobilityId": "26403a2fa6296f06", "scanner": "scanner-primary", "fingerprint": "073bb3d0049591c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5df42867499d0469", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/tile-objects/route.ts:7"}, "properties": {"repobilityId": "5a96c76341a971f8", "scanner": "scanner-primary", "fingerprint": "5df42867499d0469", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56020f8e2e66b19d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/students/join/route.ts:3"}, "properties": {"repobilityId": "c86a0fb41f4cb598", "scanner": "scanner-primary", "fingerprint": "56020f8e2e66b19d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51c823e96ee32174", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/students/link/route.ts:7"}, "properties": {"repobilityId": "55bc7559ceb9f182", "scanner": "scanner-primary", "fingerprint": "51c823e96ee32174", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fd804e367fc3162", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/pixellab-transfer-outfit/route.ts:176"}, "properties": {"repobilityId": "8d0962854e25de2b", "scanner": "scanner-primary", "fingerprint": "3fd804e367fc3162", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a14c1b2d2f5826a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/tile-character-animations/route.ts:12"}, "properties": {"repobilityId": "6b9bd27fca6c777e", "scanner": "scanner-primary", "fingerprint": "a14c1b2d2f5826a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbdf5b27f65eedce", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/classes/route.ts:16"}, "properties": {"repobilityId": "38c296fbe1bc6f92", "scanner": "scanner-primary", "fingerprint": "fbdf5b27f65eedce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14ec372ff500d209", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/classes/[classId]/route.ts:1"}, "properties": {"repobilityId": "df0dd19f51c81ae3", "scanner": "scanner-primary", "fingerprint": "14ec372ff500d209", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f4c7f8dd5492858", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/classes/lookup/route.ts:1"}, "properties": {"repobilityId": "6dfc045ac54f5a34", "scanner": "scanner-primary", "fingerprint": "2f4c7f8dd5492858", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a43eaabaa1d7143e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/pixellab-character-animation/route.ts:182"}, "properties": {"repobilityId": "62f35b2ce45a38d7", "scanner": "scanner-primary", "fingerprint": "a43eaabaa1d7143e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87659b29a62cb885", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/pixellab-character-animation/route.ts:162"}, "properties": {"repobilityId": "c0d670eb9cf78897", "scanner": "scanner-primary", "fingerprint": "87659b29a62cb885", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4485f082cb504bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiz/rooms/[roomId]/answer/image/route.ts:7"}, "properties": {"repobilityId": "da8902d08eed3bf0", "scanner": "scanner-primary", "fingerprint": "c4485f082cb504bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2438e7312d4ff677", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/quiz/rooms/[roomId]/advance/route.ts:7"}, "properties": {"repobilityId": "33a75ed0f2a433a9", "scanner": "scanner-primary", "fingerprint": "2438e7312d4ff677", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-997c2e89916c9b0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/teachers/[googleSub]/role/route.ts:5"}, "properties": {"repobilityId": "254ce4dad76c909a", "scanner": "scanner-primary", "fingerprint": "997c2e89916c9b0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0da86636bb310ef2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/route.ts:22"}, "properties": {"repobilityId": "f09e524e50a07e05", "scanner": "scanner-primary", "fingerprint": "0da86636bb310ef2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5149034280dfdbea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/route.ts:17"}, "properties": {"repobilityId": "5a90f015b2f106c1", "scanner": "scanner-primary", "fingerprint": "5149034280dfdbea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-284c92816c444f7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/topics/route.ts:23"}, "properties": {"repobilityId": "355d5d34428ecec5", "scanner": "scanner-primary", "fingerprint": "284c92816c444f7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-184c8a6df9983a7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/announcements/route.ts:24"}, "properties": {"repobilityId": "3e9a0bc7c96a5ca5", "scanner": "scanner-primary", "fingerprint": "184c8a6df9983a7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6f46113703d824f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/coursework/route.ts:25"}, "properties": {"repobilityId": "a3816eaefa28db2b", "scanner": "scanner-primary", "fingerprint": "c6f46113703d824f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb5c0d5cf725023a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/classroom/courses/[courseId]/people/route.ts:26"}, "properties": {"repobilityId": "4979531014b6a1a4", "scanner": "scanner-primary", "fingerprint": "cb5c0d5cf725023a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-28fc3610cced8e7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/pixellab-recreate-character/route.ts:127"}, "properties": {"repobilityId": "e45ce3e268c92f0b", "scanner": "scanner-primary", "fingerprint": "28fc3610cced8e7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ca98dd290200f75", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/credits/route.ts:4"}, "properties": {"repobilityId": "90901d9eda80a794", "scanner": "scanner-primary", "fingerprint": "1ca98dd290200f75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22e30a639af39a4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/automap/route.ts:13"}, "properties": {"repobilityId": "2c5e83d192210583", "scanner": "scanner-primary", "fingerprint": "22e30a639af39a4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb9ba6535e7b4b59", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/coppa/data-request/route.ts:5"}, "properties": {"repobilityId": "a52f6012e656c3ae", "scanner": "scanner-primary", "fingerprint": "cb9ba6535e7b4b59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a68eac9455a29f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/pack-curation/route.ts:8"}, "properties": {"repobilityId": "3995fb6d98f87889", "scanner": "scanner-primary", "fingerprint": "7a68eac9455a29f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-faddbeebc70c3b25", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/tile-sheets/route.ts:17"}, "properties": {"repobilityId": "7babd74e8fa7ef97", "scanner": "scanner-primary", "fingerprint": "faddbeebc70c3b25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b4d68b13e4ef950", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/extend-wfc/page.tsx:231"}, "properties": {"repobilityId": "08618f7a2df036f0", "scanner": "scanner-primary", "fingerprint": "6b4d68b13e4ef950", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fef7a971fc568065", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-wfc/page.tsx:186"}, "properties": {"repobilityId": "bebc0a306b581d85", "scanner": "scanner-primary", "fingerprint": "fef7a971fc568065", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e119ccbc22907170", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/extend-train/page.tsx:412"}, "properties": {"repobilityId": "266f2ca94cd35ecc", "scanner": "scanner-primary", "fingerprint": "e119ccbc22907170", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdc7ed8dd79a3465", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/extend-train/page.tsx:261"}, "properties": {"repobilityId": "b25190818289e673", "scanner": "scanner-primary", "fingerprint": "bdc7ed8dd79a3465", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b5011e56a8f2a69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/world-gen-demo/page.tsx:58"}, "properties": {"repobilityId": "ca1b3684699762b0", "scanner": "scanner-primary", "fingerprint": "9b5011e56a8f2a69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17e96fd0ca4c5315", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/teach/quiz/page.tsx:7"}, "properties": {"repobilityId": "83f65438f86a8225", "scanner": "scanner-primary", "fingerprint": "17e96fd0ca4c5315", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1eefca59dfc3d8e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/teach/race/page.tsx:3"}, "properties": {"repobilityId": "51dcb5619c17c9a1", "scanner": "scanner-primary", "fingerprint": "1eefca59dfc3d8e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd4b2a0fdb71a4e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/export-bundle.ts:3"}, "properties": {"repobilityId": "3123aab92849246a", "scanner": "scanner-primary", "fingerprint": "dd4b2a0fdb71a4e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0e4d712fde8817a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-cloud.ts:68"}, "properties": {"repobilityId": "815ecf3dcbc41150", "scanner": "scanner-primary", "fingerprint": "e0e4d712fde8817a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8805219043d95109", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/auth.ts:7"}, "properties": {"repobilityId": "9eb987c52c9e27e4", "scanner": "scanner-primary", "fingerprint": "8805219043d95109", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bedbf54c5d4be060", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/object-cloud.ts:60"}, "properties": {"repobilityId": "c0c4e0a3cdee9f16", "scanner": "scanner-primary", "fingerprint": "bedbf54c5d4be060", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-baf0b912198d26fb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/tiled-automap.ts:6"}, "properties": {"repobilityId": "1bf00704aab7aa95", "scanner": "scanner-primary", "fingerprint": "baf0b912198d26fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28544413fd100502", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/wang-bake.ts:1"}, "properties": {"repobilityId": "88540b8be8379107", "scanner": "scanner-primary", "fingerprint": "28544413fd100502", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-575122cc67777ffb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/wang-bake.ts:17"}, "properties": {"repobilityId": "9f321a802c83652f", "scanner": "scanner-primary", "fingerprint": "575122cc67777ffb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1baeacec59a07b4c", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/tile-map-sync.ts:17"}, "properties": {"repobilityId": "1e0315e5153bf9cb", "scanner": "scanner-primary", "fingerprint": "1baeacec59a07b4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-504fda7871debb5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-map-sync.ts:132"}, "properties": {"repobilityId": "46893c2836b09732", "scanner": "scanner-primary", "fingerprint": "504fda7871debb5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30136cba707466a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tile-realtime.ts:118"}, "properties": {"repobilityId": "0d7ede68cc600136", "scanner": "scanner-primary", "fingerprint": "30136cba707466a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42da1e5bd3f1c115", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/character-actions.ts:41"}, "properties": {"repobilityId": "740710bed33cf963", "scanner": "scanner-primary", "fingerprint": "42da1e5bd3f1c115", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54390731b0a1d23b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pack-curation-cloud.ts:18"}, "properties": {"repobilityId": "820a530c6c272a4a", "scanner": "scanner-primary", "fingerprint": "54390731b0a1d23b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91377ed23c29b1c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-sheet-cloud.ts:33"}, "properties": {"repobilityId": "c6d79b1fcbf62e9c", "scanner": "scanner-primary", "fingerprint": "91377ed23c29b1c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02d9f11f26890089", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/restyle-image-tiles.ts:4"}, "properties": {"repobilityId": "7373aa9b498969e8", "scanner": "scanner-primary", "fingerprint": "02d9f11f26890089", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca7c258fbb7dddf7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/restyle-image-tiles.ts:64"}, "properties": {"repobilityId": "4c49f7bb3e032fb1", "scanner": "scanner-primary", "fingerprint": "ca7c258fbb7dddf7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ee6f9faabf611800", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/tile-slicer.ts:128"}, "properties": {"repobilityId": "d4ba1157926fceba", "scanner": "scanner-primary", "fingerprint": "ee6f9faabf611800", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d9a92432506d5ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/user-workspace-cloud.ts:163"}, "properties": {"repobilityId": "5f4aad355534628f", "scanner": "scanner-primary", "fingerprint": "7d9a92432506d5ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6e1e6467517a125", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/rock-slope-tilesets.ts:1"}, "properties": {"repobilityId": "ded0677b750fa12f", "scanner": "scanner-primary", "fingerprint": "c6e1e6467517a125", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57179525fff058f1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/rock-slope-tilesets.ts:158"}, "properties": {"repobilityId": "cd4bc6dc1c36440c", "scanner": "scanner-primary", "fingerprint": "57179525fff058f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d0a4bb6559f4c83", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/supabase-server.ts:6"}, "properties": {"repobilityId": "2efbe74a8c7c775b", "scanner": "scanner-primary", "fingerprint": "8d0a4bb6559f4c83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01cb0d1f59829cbf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-group-cloud.ts:52"}, "properties": {"repobilityId": "81403e0841d7d00e", "scanner": "scanner-primary", "fingerprint": "01cb0d1f59829cbf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3cb3a6de1f5f06bb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/tiled-import.ts:528"}, "properties": {"repobilityId": "8ce9967767a41960", "scanner": "scanner-primary", "fingerprint": "3cb3a6de1f5f06bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b7c9b7f028c19e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/object-class-cloud.ts:47"}, "properties": {"repobilityId": "0941d0435debad7e", "scanner": "scanner-primary", "fingerprint": "3b7c9b7f028c19e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-06dd52f15b1219cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/world-gen.ts:286"}, "properties": {"repobilityId": "e64ec0c7f68c3616", "scanner": "scanner-primary", "fingerprint": "06dd52f15b1219cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fb873f87c827689", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/character-logic.ts:301"}, "properties": {"repobilityId": "39c32b46ef8202e8", "scanner": "scanner-primary", "fingerprint": "4fb873f87c827689", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdff6ad10ab14f79", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tile-junction-scatter.ts:124"}, "properties": {"repobilityId": "ed703d5fec99dac1", "scanner": "scanner-primary", "fingerprint": "cdff6ad10ab14f79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3afcd3d2a6fc883", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pixellab-import.ts:96"}, "properties": {"repobilityId": "20a524c542ba0165", "scanner": "scanner-primary", "fingerprint": "a3afcd3d2a6fc883", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1e2ef5d109d2c075", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/wang-tiles.ts:179"}, "properties": {"repobilityId": "2a3de487912387a2", "scanner": "scanner-primary", "fingerprint": "1e2ef5d109d2c075", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5f01b9ebd067ef1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/tiled-wangset-f26a0b0.ts:118"}, "properties": {"repobilityId": "6fdbcd57b2c6dc25", "scanner": "scanner-primary", "fingerprint": "b5f01b9ebd067ef1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0e496d4863422c7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiled-wangset-f26a0b0.ts:47"}, "properties": {"repobilityId": "66498667b86d0ff0", "scanner": "scanner-primary", "fingerprint": "a0e496d4863422c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a6896acf8ce38205", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/freesound.ts:41"}, "properties": {"repobilityId": "1489cfd7b3c0089e", "scanner": "scanner-primary", "fingerprint": "a6896acf8ce38205", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83cd09063c79e93d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/local-dev-cloud-cache.ts:8"}, "properties": {"repobilityId": "15d45470bc1f5947", "scanner": "scanner-primary", "fingerprint": "83cd09063c79e93d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a71e8077ca96f055", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/tmx-tilesets.ts:1"}, "properties": {"repobilityId": "ff2286faa730fede", "scanner": "scanner-primary", "fingerprint": "a71e8077ca96f055", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbd5b55d52c7144c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/tiled-wangset.ts:8"}, "properties": {"repobilityId": "cf7e2b29d3b72f95", "scanner": "scanner-primary", "fingerprint": "cbd5b55d52c7144c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-990bec47f76661c0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tiled-wangset.ts:54"}, "properties": {"repobilityId": "26ba98ed03af1523", "scanner": "scanner-primary", "fingerprint": "990bec47f76661c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e1dc9f8e2243fc5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/character-anim-poller.ts:128"}, "properties": {"repobilityId": "f2dee053e59abb4b", "scanner": "scanner-primary", "fingerprint": "8e1dc9f8e2243fc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dadcf820088cb668", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/fantasy-world-gen.ts:241"}, "properties": {"repobilityId": "fd4fd45a6bff6bd1", "scanner": "scanner-primary", "fingerprint": "dadcf820088cb668", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a695af496a114f19", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/fantasy-world-gen.ts:233"}, "properties": {"repobilityId": "371fb6507865d494", "scanner": "scanner-primary", "fingerprint": "a695af496a114f19", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-996123a93bfabb2d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/rate-limit.ts:9"}, "properties": {"repobilityId": "e75297a949df529d", "scanner": "scanner-primary", "fingerprint": "996123a93bfabb2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37d287c812b7a87c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/tile-collider-hydrate.ts:172"}, "properties": {"repobilityId": "205ebb7c13f87fb7", "scanner": "scanner-primary", "fingerprint": "37d287c812b7a87c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8a26362ac44ef9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-map-cloud.ts:36"}, "properties": {"repobilityId": "ea2c514c57de280c", "scanner": "scanner-primary", "fingerprint": "f8a26362ac44ef9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9877b69fcab727a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/pixellab.ts:52"}, "properties": {"repobilityId": "c5584d81eb1e4f85", "scanner": "scanner-primary", "fingerprint": "9877b69fcab727a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-adb4f29e94b30ab0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/wang-world-farms.ts:3"}, "properties": {"repobilityId": "d28d2768cdf400df", "scanner": "scanner-primary", "fingerprint": "adb4f29e94b30ab0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfe2856eb45e51af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/lang-cloud.ts:55"}, "properties": {"repobilityId": "f3c68265b6859117", "scanner": "scanner-primary", "fingerprint": "dfe2856eb45e51af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e06f715d888de941", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/wang-world-stairs.ts:3"}, "properties": {"repobilityId": "e8016ad8c357cafa", "scanner": "scanner-primary", "fingerprint": "e06f715d888de941", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b39f623e68e97f8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/teacher-auth.ts:5"}, "properties": {"repobilityId": "e4f2d3072fd7f26b", "scanner": "scanner-primary", "fingerprint": "b39f623e68e97f8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d60f74211459705a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-cloud.ts:153"}, "properties": {"repobilityId": "d5bbfc716c7ae2f4", "scanner": "scanner-primary", "fingerprint": "d60f74211459705a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc51ce4d62925c30", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/pixellab-tools.ts:826"}, "properties": {"repobilityId": "92f44ec978e13f35", "scanner": "scanner-primary", "fingerprint": "dc51ce4d62925c30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e6e6c043bc87fef", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/wang-world-settlements.ts:1"}, "properties": {"repobilityId": "49c7a705b566d3a8", "scanner": "scanner-primary", "fingerprint": "1e6e6c043bc87fef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b36f3be32891762f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/tile-group-sync.ts:30"}, "properties": {"repobilityId": "f0572bb9cdf7dee5", "scanner": "scanner-primary", "fingerprint": "b36f3be32891762f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc2763412018266f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/wang-world.ts:1"}, "properties": {"repobilityId": "92167fdc53c49c38", "scanner": "scanner-primary", "fingerprint": "fc2763412018266f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89c9df1bddf8f303", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/character-template-anim-poller.ts:192"}, "properties": {"repobilityId": "883cb90bcddbb69b", "scanner": "scanner-primary", "fingerprint": "89c9df1bddf8f303", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48f2f9400ba77be4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/character-template-anim-poller.ts:522"}, "properties": {"repobilityId": "1b1fba29c7eeca21", "scanner": "scanner-primary", "fingerprint": "48f2f9400ba77be4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ce3a1a5778b2fe91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/arcade/content.ts:67"}, "properties": {"repobilityId": "52a7b5cdf2612835", "scanner": "scanner-primary", "fingerprint": "ce3a1a5778b2fe91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7c4231ee4a94697", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/town/combat-runtime.ts:547"}, "properties": {"repobilityId": "d7e7b6002fee3a72", "scanner": "scanner-primary", "fingerprint": "e7c4231ee4a94697", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-484d3e6ee6bf56ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/town/crowd-pathfind.ts:44"}, "properties": {"repobilityId": "41713b748241a3f7", "scanner": "scanner-primary", "fingerprint": "484d3e6ee6bf56ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-239f2886160bc352", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/town/crowd-runtime.ts:561"}, "properties": {"repobilityId": "76c8cead6be6fd62", "scanner": "scanner-primary", "fingerprint": "239f2886160bc352", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4371f1f1c9d4fe7b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/play-controller.ts:109"}, "properties": {"repobilityId": "8ca3702a80ebe2ba", "scanner": "scanner-primary", "fingerprint": "4371f1f1c9d4fe7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-579119d3a9872d4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/world-apply.ts:107"}, "properties": {"repobilityId": "c23a71c321514a38", "scanner": "scanner-primary", "fingerprint": "579119d3a9872d4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7283c745385fca1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/gizmo.ts:51"}, "properties": {"repobilityId": "3ab99be4ea90c5c6", "scanner": "scanner-primary", "fingerprint": "d7283c745385fca1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8100878333ecf3a9", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/kid-style-3d/engine.ts:107"}, "properties": {"repobilityId": "95ea4a0a92f43793", "scanner": "scanner-primary", "fingerprint": "8100878333ecf3a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66a036627ca5930f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/kid-style-3d/prefabs/nature.ts:235"}, "properties": {"repobilityId": "93d12906152c96d3", "scanner": "scanner-primary", "fingerprint": "66a036627ca5930f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fce44957d638fa67", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/prefabs/buildings.ts:76"}, "properties": {"repobilityId": "343ff0eb2a955d3f", "scanner": "scanner-primary", "fingerprint": "fce44957d638fa67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-012546aabb5b8da1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/kid-style-3d/prefabs/character.ts:119"}, "properties": {"repobilityId": "411ee584ec94b1bd", "scanner": "scanner-primary", "fingerprint": "012546aabb5b8da1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df0bc2cf72bad240", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/tile-publish/build-game-files.ts:6"}, "properties": {"repobilityId": "e7ebf27788e94263", "scanner": "scanner-primary", "fingerprint": "df0bc2cf72bad240", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b8fdc6ab5981ff5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/tile-publish/bake-world.ts:7"}, "properties": {"repobilityId": "1f8f97afcd06a6d1", "scanner": "scanner-primary", "fingerprint": "7b8fdc6ab5981ff5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d98c997db84e6777", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/tile-publish/index.ts:5"}, "properties": {"repobilityId": "52249477d45a5222", "scanner": "scanner-primary", "fingerprint": "d98c997db84e6777", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20e2dcb9071b60e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/tile-publish/index.ts:93"}, "properties": {"repobilityId": "a87a67577578e482", "scanner": "scanner-primary", "fingerprint": "20e2dcb9071b60e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f21d27f9b1f46ded", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/quiz/use-room.ts:3"}, "properties": {"repobilityId": "1f3293803e852119", "scanner": "scanner-primary", "fingerprint": "f21d27f9b1f46ded", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efb7c73d554ae954", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/studio/save-game.ts:47"}, "properties": {"repobilityId": "f5dbb83a12c45365", "scanner": "scanner-primary", "fingerprint": "efb7c73d554ae954", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9cfc2339918c31a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/game-engine/engine.js:57"}, "properties": {"repobilityId": "23cfaf23a01e8834", "scanner": "scanner-primary", "fingerprint": "c9cfc2339918c31a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a0276f59e82bcd3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/game-engine/voxel/controls.js:1"}, "properties": {"repobilityId": "0b55c6f1d1f6acb5", "scanner": "scanner-primary", "fingerprint": "5a0276f59e82bcd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e16454decb761a93", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/mesher.js:1"}, "properties": {"repobilityId": "42f3026d3baea623", "scanner": "scanner-primary", "fingerprint": "e16454decb761a93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-529050cbe7dbc7c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/raycast.js:1"}, "properties": {"repobilityId": "088585c16f32fd5a", "scanner": "scanner-primary", "fingerprint": "529050cbe7dbc7c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d29c4afde7f1d314", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/game-engine/voxel/blocks.js:1"}, "properties": {"repobilityId": "b9f422308b0898bc", "scanner": "scanner-primary", "fingerprint": "d29c4afde7f1d314", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32069dc458bb0618", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/world.js:5"}, "properties": {"repobilityId": "05ec9a57455e73d4", "scanner": "scanner-primary", "fingerprint": "32069dc458bb0618", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f688a79c6c1c747c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/game-engine/voxel/atlas.js:1"}, "properties": {"repobilityId": "1fd070424d4e3930", "scanner": "scanner-primary", "fingerprint": "f688a79c6c1c747c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f68a264e85d6ff3f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/mana-seed/composer.ts:68"}, "properties": {"repobilityId": "fb3e7e0d39ee0157", "scanner": "scanner-primary", "fingerprint": "f68a264e85d6ff3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-808a3287b55ea7ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-game-state.ts:164"}, "properties": {"repobilityId": "a6043ed3e945bbf3", "scanner": "scanner-primary", "fingerprint": "808a3287b55ea7ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4ce1800feecaf2c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/hooks/use-live-world-streamer.ts:185"}, "properties": {"repobilityId": "75ed977d95f0d317", "scanner": "scanner-primary", "fingerprint": "c4ce1800feecaf2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7a82a9c70dfe073", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-live-world-streamer.ts:69"}, "properties": {"repobilityId": "64c5a673540b585e", "scanner": "scanner-primary", "fingerprint": "a7a82a9c70dfe073", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8df8e30222b8da4b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/store/freeform3d-store.ts:774"}, "properties": {"repobilityId": "f66b17e268fd30d5", "scanner": "scanner-primary", "fingerprint": "8df8e30222b8da4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d21eb392820fd8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/store/auth-store.ts:5"}, "properties": {"repobilityId": "c3eae900de38e01a", "scanner": "scanner-primary", "fingerprint": "1d21eb392820fd8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31559ea03326be84", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/store/studio-store.ts:38"}, "properties": {"repobilityId": "15d482dc4e0dff7d", "scanner": "scanner-primary", "fingerprint": "31559ea03326be84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-613316ae3c83d0b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/store/tile-store.ts:2356"}, "properties": {"repobilityId": "0578f155ed18bd07", "scanner": "scanner-primary", "fingerprint": "613316ae3c83d0b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adac65a8989381b0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/store/room-store.ts:305"}, "properties": {"repobilityId": "7f771d131f0343d1", "scanner": "scanner-primary", "fingerprint": "adac65a8989381b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b37b5068a010761e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/store/data-source-store.ts:3"}, "properties": {"repobilityId": "b0f60521dc68e031", "scanner": "scanner-primary", "fingerprint": "b37b5068a010761e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52b398a1bcad38e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/store/freeform-store.ts:714"}, "properties": {"repobilityId": "05645eb2d7f3effa", "scanner": "scanner-primary", "fingerprint": "52b398a1bcad38e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1c9b047de201ed79", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c96d37bcd2d75071", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "88028475cf563270", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-09d3643df22f09d6", "level": "error", "message": {"text": "Dangling fetch: GET /api/students/me (src/components/student/StudentApp.tsx:96)"}, "properties": {"repobilityId": "dc15d4e8ccd7021a", "scanner": "scanner-primary", "fingerprint": "09d3643df22f09d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4e0c938abbf220f", "level": "error", "message": {"text": "Dangling fetch: POST /api/students/link (src/components/student/StudentApp.tsx:153)"}, "properties": {"repobilityId": "8453ee6c2cf2dbfe", "scanner": "scanner-primary", "fingerprint": "c4e0c938abbf220f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84d979dd423b0d1c", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat (src/components/teacher-setup/SetupHelpChat.tsx:142)"}, "properties": {"repobilityId": "756e1a0d1ddd507e", "scanner": "scanner-primary", "fingerprint": "84d979dd423b0d1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4874c7f51d79a74", "level": "error", "message": {"text": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher-setup/ShareScreen.tsx:44)"}, "properties": {"repobilityId": "45f2f2324b33e370", "scanner": "scanner-primary", "fingerprint": "e4874c7f51d79a74", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab0deae791260e0a", "level": "error", "message": {"text": "Dangling fetch: POST /api/classroom/courses/${cls.classroom_course_id}/announcements (src/components/teacher-setup/ShareScreen.tsx:80)"}, "properties": {"repobilityId": "a80747e2d4ca2757", "scanner": "scanner-primary", "fingerprint": "ab0deae791260e0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e35aec88c16428a", "level": "error", "message": {"text": "Dangling fetch: POST /api/classes (src/components/teacher-setup/ClassroomSetupApp.tsx:151)"}, "properties": {"repobilityId": "23e424bbfce0d172", "scanner": "scanner-primary", "fingerprint": "5e35aec88c16428a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-751bb4722accd573", "level": "error", "message": {"text": "Dangling fetch: POST /api/starter-units (src/components/teacher-setup/ClassroomSetupApp.tsx:189)"}, "properties": {"repobilityId": "9c0259ae84ece44d", "scanner": "scanner-primary", "fingerprint": "751bb4722accd573", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2192404834109fc7", "level": "error", "message": {"text": "Dangling fetch: POST /api/classes (src/components/teacher-setup/StepRoster.tsx:67)"}, "properties": {"repobilityId": "8626564736ffb8ba", "scanner": "scanner-primary", "fingerprint": "2192404834109fc7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46f7f943d69a159f", "level": "error", "message": {"text": "Dangling fetch: GET /api/starter-units?subject=${encodeURIComponent(data.classSubject)}&grade=${encodeURIComponent(data.grade)} (src/components/teacher-setup/StepUnit.tsx:80)"}, "properties": {"repobilityId": "25f7af9534d665a5", "scanner": "scanner-primary", "fingerprint": "46f7f943d69a159f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0bcc0d0f56f7bf2c", "level": "error", "message": {"text": "Dangling fetch: POST /api/starter-units/draft (src/components/teacher-setup/StepUnit.tsx:104)"}, "properties": {"repobilityId": "4686398bb8ca1524", "scanner": "scanner-primary", "fingerprint": "0bcc0d0f56f7bf2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f7bbade118bb17f", "level": "error", "message": {"text": "Dangling fetch: GET /api/classes/${classId}/students (src/components/teacher-setup/ClassroomPreview.tsx:25)"}, "properties": {"repobilityId": "4ded5cde833bb0e2", "scanner": "scanner-primary", "fingerprint": "0f7bbade118bb17f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a97753ac4ee1580", "level": "error", "message": {"text": "Dangling fetch: GET /api/classes/lookup?code=${encodeURIComponent(data.joinCode)} (src/components/teacher-setup/ClassroomPreview.tsx:74)"}, "properties": {"repobilityId": "b88d46ee5c825c0d", "scanner": "scanner-primary", "fingerprint": "2a97753ac4ee1580", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04f162495254a9bf", "level": "error", "message": {"text": "Dangling fetch: POST /api/tutor-review (src/components/homework/ap-probe/MicroQuestion.tsx:98)"}, "properties": {"repobilityId": "84cf152156f996e9", "scanner": "scanner-primary", "fingerprint": "04f162495254a9bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69486d84fa54a789", "level": "error", "message": {"text": "Dangling fetch: POST /api/tutor-help (src/components/homework/tutor/TutorChatbot.tsx:184)"}, "properties": {"repobilityId": "0fde7947ce20eb23", "scanner": "scanner-primary", "fingerprint": "69486d84fa54a789", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7468091ede1f8998", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent (src/components/studio/Terminal.tsx:148)"}, "properties": {"repobilityId": "d7e1ad8e642f5eb3", "scanner": "scanner-primary", "fingerprint": "7468091ede1f8998", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90f0d770c467a6ab", "level": "error", "message": {"text": "Dangling fetch: POST /api/scenes/freeform-2d (src/components/studio/StudioActions.tsx:170)"}, "properties": {"repobilityId": "4c9c00c183f84035", "scanner": "scanner-primary", "fingerprint": "90f0d770c467a6ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a23993565866c9a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/scenes/freeform-2d (src/components/studio/StudioActions.tsx:548)"}, "properties": {"repobilityId": "5b1f766bcaf9c582", "scanner": "scanner-primary", "fingerprint": "a23993565866c9a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3be6efe9f10e4f55", "level": "error", "message": {"text": "Dangling fetch: GET /api/scenes/freeform-2d?name=${encodeURIComponent(name)} (src/components/studio/StudioActions.tsx:575)"}, "properties": {"repobilityId": "91fd6dec6d43f268", "scanner": "scanner-primary", "fingerprint": "3be6efe9f10e4f55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e763efa46e76d55", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scenes/freeform-2d?name=${encodeURIComponent(name)} (src/components/studio/StudioActions.tsx:625)"}, "properties": {"repobilityId": "ede4145e098c0066", "scanner": "scanner-primary", "fingerprint": "1e763efa46e76d55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09dbcc7f11d90746", "level": "error", "message": {"text": "Dangling fetch: GET /slime-demo/manifest.json (src/components/studio/panels/SlimeShowcasePanel.tsx:113)"}, "properties": {"repobilityId": "3b6c3c1f41ee3cb1", "scanner": "scanner-primary", "fingerprint": "09dbcc7f11d90746", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f309836e6828b59", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab/run/edit-images-v2 (src/components/studio/panels/SlimeShowcasePanel.tsx:186)"}, "properties": {"repobilityId": "f13f349b1ecb62cf", "scanner": "scanner-primary", "fingerprint": "2f309836e6828b59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-666244db3971ddd4", "level": "error", "message": {"text": "Dangling fetch: GET /api/games?userId=${encodeURIComponent(currentUserId)} (src/components/studio/panels/LibraryPanel.tsx:55)"}, "properties": {"repobilityId": "61172c9e439523de", "scanner": "scanner-primary", "fingerprint": "666244db3971ddd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bc1306eaec543a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/games/${gameId} (src/components/studio/panels/LibraryPanel.tsx:111)"}, "properties": {"repobilityId": "3deaeff4efc43bc9", "scanner": "scanner-primary", "fingerprint": "9bc1306eaec543a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23a370789e3a2739", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/games/${gameId} (src/components/studio/panels/LibraryPanel.tsx:161)"}, "properties": {"repobilityId": "001e43dc5a405017", "scanner": "scanner-primary", "fingerprint": "23a370789e3a2739", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b800fa36f7b7148f", "level": "error", "message": {"text": "Dangling fetch: POST /api/recraft/remove-bg (src/components/studio/panels/TileObjectPropertiesPanel.tsx:48)"}, "properties": {"repobilityId": "d64badd503b10ca3", "scanner": "scanner-primary", "fingerprint": "b800fa36f7b7148f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f484edf2c73f69d4", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/MarketplaceLibraryPanel.tsx:56)"}, "properties": {"repobilityId": "3c3740c27eb8d8a6", "scanner": "scanner-primary", "fingerprint": "f484edf2c73f69d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0162c4d8cf0f7aaf", "level": "error", "message": {"text": "Dangling fetch: POST /api/game-rooms (src/components/studio/panels/PlayersPanel.tsx:117)"}, "properties": {"repobilityId": "10623af3e4bb3c61", "scanner": "scanner-primary", "fingerprint": "0162c4d8cf0f7aaf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2d653f12088f21c", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)} (src/components/studio/panels/PixellabPreviewDialog.tsx:105)"}, "properties": {"repobilityId": "9f7380cbf85aa070", "scanner": "scanner-primary", "fingerprint": "c2d653f12088f21c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65616b518833403c", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/TiledImportPanel.tsx:670)"}, "properties": {"repobilityId": "c857490d37c7703a", "scanner": "scanner-primary", "fingerprint": "65616b518833403c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bebf1f2caeba81fe", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/components/studio/panels/TiledImportPanel.tsx:671)"}, "properties": {"repobilityId": "65c00cbeb922e68d", "scanner": "scanner-primary", "fingerprint": "bebf1f2caeba81fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52f0f384ec50f7e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab/run/${encodeURIComponent(tool.id)} (src/components/studio/panels/PixelLabToolForm.tsx:509)"}, "properties": {"repobilityId": "4e12d4f5384ef2f4", "scanner": "scanner-primary", "fingerprint": "52f0f384ec50f7e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84aaf024a252115b", "level": "error", "message": {"text": "Dangling fetch: POST /api/ui-generate (src/components/studio/panels/UIPanel.tsx:107)"}, "properties": {"repobilityId": "2fba99e46be22d62", "scanner": "scanner-primary", "fingerprint": "84aaf024a252115b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60cc86e6125b230f", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TilesetGenerationForm.tsx:156)"}, "properties": {"repobilityId": "75100b6ba97c1708", "scanner": "scanner-primary", "fingerprint": "60cc86e6125b230f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf776e177dda4938", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab/run/${encodeURIComponent(toolId)} (src/components/studio/panels/TilesetGenerationForm.tsx:276)"}, "properties": {"repobilityId": "17ba8f58b561d801", "scanner": "scanner-primary", "fingerprint": "bf776e177dda4938", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-acbdae6498a71fe0", "level": "error", "message": {"text": "Dangling fetch: GET /slime-demo/original/manifest.json (src/components/studio/panels/CharacterImportOverlay.tsx:178)"}, "properties": {"repobilityId": "8237ac2e06ba769a", "scanner": "scanner-primary", "fingerprint": "acbdae6498a71fe0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-faaa7751d927ab6c", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-create-character-state (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:574)"}, "properties": {"repobilityId": "a6047ef8dcad3961", "scanner": "scanner-primary", "fingerprint": "faaa7751d927ab6c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-456595129b32cb30", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-recreate-character (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:668)"}, "properties": {"repobilityId": "ef175d3fba6015ec", "scanner": "scanner-primary", "fingerprint": "456595129b32cb30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfd086a09a8799fd", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-character-template-animation (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4337)"}, "properties": {"repobilityId": "18724a62d7cb73dc", "scanner": "scanner-primary", "fingerprint": "dfd086a09a8799fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be10286d1385892b", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab/run/${endpoint} (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4872)"}, "properties": {"repobilityId": "08b685fe6a0ceba0", "scanner": "scanner-primary", "fingerprint": "be10286d1385892b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2963b40a5c6ccaee", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab/run/estimate-skeleton (src/components/studio/panels/TileCharacterPropertiesPanel.tsx:4913)"}, "properties": {"repobilityId": "d6a8cf5aa2ae3c69", "scanner": "scanner-primary", "fingerprint": "2963b40a5c6ccaee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cbd5088e15473ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TileAssetsView.tsx:782)"}, "properties": {"repobilityId": "5d1b9fece998bdad", "scanner": "scanner-primary", "fingerprint": "1cbd5088e15473ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-928b5a9546e2bcaf", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab/library (src/components/studio/panels/TileAssetsView.tsx:2819)"}, "properties": {"repobilityId": "61392a04a550f153", "scanner": "scanner-primary", "fingerprint": "928b5a9546e2bcaf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bed8fa16630f4565", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/TileAssetsView.tsx:5670)"}, "properties": {"repobilityId": "a2382ffa34dd955a", "scanner": "scanner-primary", "fingerprint": "bed8fa16630f4565", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5448bbb31784195", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-recreate-character (src/components/studio/panels/TileAssetsView.tsx:6871)"}, "properties": {"repobilityId": "08bb0f03b55a99ed", "scanner": "scanner-primary", "fingerprint": "f5448bbb31784195", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f9989ad631a5606", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab/library/characters?limit=100 (src/components/studio/panels/TileAssetsView.tsx:7001)"}, "properties": {"repobilityId": "7a3d801fda1638a8", "scanner": "scanner-primary", "fingerprint": "3f9989ad631a5606", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bdf44430aeae4f52", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab/library/characters/${encodeURIComponent(entry.id)} (src/components/studio/panels/TileAssetsView.tsx:7066)"}, "properties": {"repobilityId": "32dd9e938173ac5b", "scanner": "scanner-primary", "fingerprint": "bdf44430aeae4f52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-191bed81fabb3ab8", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-transfer-outfit (src/components/studio/panels/TileAssetsView.tsx:7317)"}, "properties": {"repobilityId": "5081618f71e7267e", "scanner": "scanner-primary", "fingerprint": "191bed81fabb3ab8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3aaca7c6a65cb773", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-transfer-outfit (src/components/studio/panels/TileAssetsView.tsx:7538)"}, "properties": {"repobilityId": "1bb36f3121990c89", "scanner": "scanner-primary", "fingerprint": "3aaca7c6a65cb773", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7895090a2be5cfc5", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab-transfer-outfit?jobId=${encodeURIComponent(jobId)} (src/components/studio/panels/TileAssetsView.tsx:7564)"}, "properties": {"repobilityId": "c300ca7c5a3f0189", "scanner": "scanner-primary", "fingerprint": "7895090a2be5cfc5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-625982f5e87a8b59", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-character-template-animation (src/components/studio/panels/TileAssetsView.tsx:7734)"}, "properties": {"repobilityId": "a6c71bdb35bd4f55", "scanner": "scanner-primary", "fingerprint": "625982f5e87a8b59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c68314ec4e59e72", "level": "error", "message": {"text": "Dangling fetch: GET /assets/medieval/stats.json (src/components/studio/panels/AssetsPanel.tsx:335)"}, "properties": {"repobilityId": "29d9dbed8544a6c7", "scanner": "scanner-primary", "fingerprint": "2c68314ec4e59e72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b68987a562ee4d1", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/components/studio/panels/WorldGenPanel.tsx:148)"}, "properties": {"repobilityId": "195b149ddd538846", "scanner": "scanner-primary", "fingerprint": "0b68987a562ee4d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e534a3d5d5885855", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/components/studio/panels/WorldGenPanel.tsx:152)"}, "properties": {"repobilityId": "17fbe6eabf583791", "scanner": "scanner-primary", "fingerprint": "e534a3d5d5885855", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4bafe87b6adfd15", "level": "error", "message": {"text": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher/teacher-data-context.tsx:130)"}, "properties": {"repobilityId": "467d7ae58c6bc848", "scanner": "scanner-primary", "fingerprint": "b4bafe87b6adfd15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8468697760ae6d40", "level": "error", "message": {"text": "Dangling fetch: GET /api/classes/${classId}/students (src/components/teacher/teacher-data-context.tsx:131)"}, "properties": {"repobilityId": "fc9fa672f6ff2f31", "scanner": "scanner-primary", "fingerprint": "8468697760ae6d40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-deb0f0e8c04a731f", "level": "error", "message": {"text": "Dangling fetch: GET /api/classes/${classId} (src/components/teacher/NewClassBanner.tsx:25)"}, "properties": {"repobilityId": "6f4f104f805a95ee", "scanner": "scanner-primary", "fingerprint": "deb0f0e8c04a731f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8967c9ab115ad806", "level": "error", "message": {"text": "Dangling fetch: POST /api/quiz/rooms (src/components/teach/LiveHost.tsx:37)"}, "properties": {"repobilityId": "8617e076e129289b", "scanner": "scanner-primary", "fingerprint": "8967c9ab115ad806", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40333d7645f50163", "level": "error", "message": {"text": "Dangling fetch: POST /api/quiz/rooms/${roomId}/advance (src/components/teach/LiveHost.tsx:59)"}, "properties": {"repobilityId": "cbe25304147c735c", "scanner": "scanner-primary", "fingerprint": "40333d7645f50163", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-530200111b492501", "level": "error", "message": {"text": "Dangling fetch: POST /api/automap (src/app/extend-mlp/rock-slopes/page.tsx:211)"}, "properties": {"repobilityId": "2162f4a771b2f24b", "scanner": "scanner-primary", "fingerprint": "530200111b492501", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3cc22ee4be24e950", "level": "error", "message": {"text": "Dangling fetch: POST /api/automap (src/app/extend-mlp/rock-slopes/page.tsx:232)"}, "properties": {"repobilityId": "d8f6d7c4681cfde3", "scanner": "scanner-primary", "fingerprint": "3cc22ee4be24e950", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a648184a3f2d3cd", "level": "error", "message": {"text": "Dangling fetch: GET /api/tilesets-list (src/app/extend-mlp/tileset-compare/page.tsx:45)"}, "properties": {"repobilityId": "1783f84b1d173d0e", "scanner": "scanner-primary", "fingerprint": "5a648184a3f2d3cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f9456061aa64179", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-mlp/tiled-wang-brush/page.tsx:240)"}, "properties": {"repobilityId": "1655a9fcdec75fae", "scanner": "scanner-primary", "fingerprint": "9f9456061aa64179", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd1dcc09b66fbc7d", "level": "error", "message": {"text": "Dangling fetch: POST /api/automap (src/app/extend-mlp/tiled-automap/page.tsx:68)"}, "properties": {"repobilityId": "b30a483b0ddf3b4e", "scanner": "scanner-primary", "fingerprint": "cd1dcc09b66fbc7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb32e1a1bf0ff6ed", "level": "error", "message": {"text": "Dangling fetch: POST /api/lesson-tutor (src/app/lessons/practice/page.tsx:153)"}, "properties": {"repobilityId": "963b1c42299df1c2", "scanner": "scanner-primary", "fingerprint": "fb32e1a1bf0ff6ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c1dcdc45578a5e8", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-sweep/page.tsx:63)"}, "properties": {"repobilityId": "d06c24a6febbb627", "scanner": "scanner-primary", "fingerprint": "8c1dcdc45578a5e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca356c05124274c6", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-sweep/page.tsx:64)"}, "properties": {"repobilityId": "81f6438e8ee874d7", "scanner": "scanner-primary", "fingerprint": "ca356c05124274c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f185f3d9a1abaab", "level": "error", "message": {"text": "Dangling fetch: GET /api/quiz/rooms?pin=${encodeURIComponent(pin)} (src/app/play/quiz/[pin]/page.tsx:52)"}, "properties": {"repobilityId": "ffdf59d0fa8fff6c", "scanner": "scanner-primary", "fingerprint": "3f185f3d9a1abaab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca66f96ac7f97c23", "level": "error", "message": {"text": "Dangling fetch: POST /api/quiz/rooms/${room.id}/join (src/app/play/quiz/[pin]/page.tsx:83)"}, "properties": {"repobilityId": "f665045c03304090", "scanner": "scanner-primary", "fingerprint": "ca66f96ac7f97c23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d783b473264b979d", "level": "error", "message": {"text": "Dangling fetch: POST /api/quiz/rooms/${room.id}/answer (src/app/play/quiz/[pin]/page.tsx:109)"}, "properties": {"repobilityId": "430f2c36278c101d", "scanner": "scanner-primary", "fingerprint": "d783b473264b979d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75b4ee894482266d", "level": "error", "message": {"text": "Dangling fetch: POST /api/quiz/rooms/${roomId}/answer/image (src/app/play/quiz/[pin]/page.tsx:505)"}, "properties": {"repobilityId": "a1f8b19fcc6217ca", "scanner": "scanner-primary", "fingerprint": "75b4ee894482266d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a35532399d601ee", "level": "error", "message": {"text": "Dangling fetch: POST /api/quiz/rooms/${roomId}/answer (src/app/play/quiz/[pin]/page.tsx:655)"}, "properties": {"repobilityId": "e58d267b67180777", "scanner": "scanner-primary", "fingerprint": "6a35532399d601ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4e512c7b6e8d989", "level": "error", "message": {"text": "Dangling fetch: GET /api/race/rooms?pin=${encodeURIComponent(pin)} (src/app/play/race/[pin]/page.tsx:53)"}, "properties": {"repobilityId": "bfc05d3164ac0848", "scanner": "scanner-primary", "fingerprint": "a4e512c7b6e8d989", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40f871f0dd309805", "level": "error", "message": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/join (src/app/play/race/[pin]/page.tsx:74)"}, "properties": {"repobilityId": "2b328c5c7de81e86", "scanner": "scanner-primary", "fingerprint": "40f871f0dd309805", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f2caafc4e918baf", "level": "error", "message": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/move (src/app/play/race/[pin]/page.tsx:88)"}, "properties": {"repobilityId": "6d51e7ade531fe61", "scanner": "scanner-primary", "fingerprint": "3f2caafc4e918baf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-465aa5929cf120a8", "level": "error", "message": {"text": "Dangling fetch: POST /api/games/${gameId}/play (src/app/play/[gameId]/PlayLogger.tsx:28)"}, "properties": {"repobilityId": "6e36dd075224893f", "scanner": "scanner-primary", "fingerprint": "465aa5929cf120a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fdc6398e466456e", "level": "error", "message": {"text": "Dangling fetch: POST /api/games/${gameId}/report (src/app/play/[gameId]/ReportButton.tsx:54)"}, "properties": {"repobilityId": "8ca8db00afb43ab0", "scanner": "scanner-primary", "fingerprint": "7fdc6398e466456e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89330d8573d99faf", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pixellab.ai/v2/characters/${encodeURIComponent(characterId)} (src/app/api/pixellab-character-template-animation/route.ts:116)"}, "properties": {"repobilityId": "4fca8d9f7b7577f9", "scanner": "scanner-primary", "fingerprint": "89330d8573d99faf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69f76769d79351af", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/images/generations (src/app/api/ui-generate/route.ts:115)"}, "properties": {"repobilityId": "056e8c8ceef56b45", "scanner": "scanner-primary", "fingerprint": "69f76769d79351af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07e8ba03d86814dd", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pixellab.ai/v2/${endpoint} (src/app/api/pixellab/[...path]/route.ts:23)"}, "properties": {"repobilityId": "77dd793e90d6cd0e", "scanner": "scanner-primary", "fingerprint": "07e8ba03d86814dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-209ca48e9887da05", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pixellab.ai/v2/${endpoint} (src/app/api/pixellab/[...path]/route.ts:71)"}, "properties": {"repobilityId": "ea6ea2016da8754e", "scanner": "scanner-primary", "fingerprint": "209ca48e9887da05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f87e9aa23780f216", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pixellab.ai/mcp (src/app/api/pixellab-character-animation/route.ts:162)"}, "properties": {"repobilityId": "49e68b5776294512", "scanner": "scanner-primary", "fingerprint": "f87e9aa23780f216", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d3b8a598ed4d856", "level": "error", "message": {"text": "Dangling fetch: GET /api/wfc-pairs?template=${encodeURIComponent(TEMPLATE_ID)} (src/app/extend-wfc/page.tsx:75)"}, "properties": {"repobilityId": "d258a2b4fe9b2d85", "scanner": "scanner-primary", "fingerprint": "4d3b8a598ed4d856", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2d3054a6aa5a940", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-wfc/page.tsx:185)"}, "properties": {"repobilityId": "27d7ca0bed89c679", "scanner": "scanner-primary", "fingerprint": "d2d3054a6aa5a940", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4ba4338ac243726", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-wfc/page.tsx:186)"}, "properties": {"repobilityId": "f22b0686cc4ae173", "scanner": "scanner-primary", "fingerprint": "e4ba4338ac243726", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bff22de0b9d141e", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-wfc/page.tsx:237)"}, "properties": {"repobilityId": "ac7f06acbeb6e5b3", "scanner": "scanner-primary", "fingerprint": "1bff22de0b9d141e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12538c2ccde1b59f", "level": "error", "message": {"text": "Dangling fetch: POST /api/wfc-rating (src/app/extend-wfc/page.tsx:283)"}, "properties": {"repobilityId": "fdff5cd25a32c346", "scanner": "scanner-primary", "fingerprint": "12538c2ccde1b59f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-823d2ea90803060d", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-wfc/page.tsx:354)"}, "properties": {"repobilityId": "4ea0b41ac0f2b071", "scanner": "scanner-primary", "fingerprint": "823d2ea90803060d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca1592cc6c5235ce", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/app/extend-train/page.tsx:128)"}, "properties": {"repobilityId": "a67a0e8154bd996e", "scanner": "scanner-primary", "fingerprint": "ca1592cc6c5235ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83a2cce980ef4bce", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/extend-train/page.tsx:129)"}, "properties": {"repobilityId": "9d4cbd2895b484f7", "scanner": "scanner-primary", "fingerprint": "83a2cce980ef4bce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f876cf525df3fa4", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-train/page.tsx:261)"}, "properties": {"repobilityId": "f3130325b0a87a00", "scanner": "scanner-primary", "fingerprint": "7f876cf525df3fa4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21f79d575cb25851", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/premium/tiled/Farm%20Shore.tmx (src/app/extend-train/page.tsx:393)"}, "properties": {"repobilityId": "ebc6b69228c4bb3f", "scanner": "scanner-primary", "fingerprint": "21f79d575cb25851", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f44de5b7d48fe0c9", "level": "error", "message": {"text": "Dangling fetch: GET /api/classes/${classId} (src/app/join/[classId]/JoinClient.tsx:28)"}, "properties": {"repobilityId": "f7be12277d61bece", "scanner": "scanner-primary", "fingerprint": "f44de5b7d48fe0c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a462fe8ef8debad", "level": "error", "message": {"text": "Dangling fetch: POST /api/students/join (src/app/join/[classId]/JoinClient.tsx:47)"}, "properties": {"repobilityId": "37580506656ca561", "scanner": "scanner-primary", "fingerprint": "9a462fe8ef8debad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a721c87b10d0518", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/audit-log${qs} (src/app/admin/audit-log/AuditLogView.tsx:29)"}, "properties": {"repobilityId": "f95c19b7ced378ea", "scanner": "scanner-primary", "fingerprint": "5a721c87b10d0518", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a329b02813a29c1", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/status (src/app/admin/status/StatusView.tsx:47)"}, "properties": {"repobilityId": "d3b660373a9510bd", "scanner": "scanner-primary", "fingerprint": "1a329b02813a29c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c89e1c38b2ad653", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/data-requests?status=${filter} (src/app/admin/data-requests/DataRequestsQueue.tsx:55)"}, "properties": {"repobilityId": "09b32d033f9f36d5", "scanner": "scanner-primary", "fingerprint": "6c89e1c38b2ad653", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9182c217063b94c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/data-requests/${id} (src/app/admin/data-requests/DataRequestsQueue.tsx:72)"}, "properties": {"repobilityId": "b407a9e0518401fb", "scanner": "scanner-primary", "fingerprint": "b9182c217063b94c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-66f59f41b4a75569", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/teachers${params} (src/app/admin/teachers/TeachersList.tsx:38)"}, "properties": {"repobilityId": "8823fdbb1ac90cf9", "scanner": "scanner-primary", "fingerprint": "66f59f41b4a75569", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-462c16ab18538b59", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/teachers/${encodeURIComponent(sub)}/role (src/app/admin/teachers/TeachersList.tsx:55)"}, "properties": {"repobilityId": "7db516c38851950e", "scanner": "scanner-primary", "fingerprint": "462c16ab18538b59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df805392788b42f5", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/app/world-gen-demo/page.tsx:162)"}, "properties": {"repobilityId": "d71cd1fd29d57d89", "scanner": "scanner-primary", "fingerprint": "df805392788b42f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6d31f44c6f9d039", "level": "error", "message": {"text": "Dangling fetch: GET /api/moderation/queue (src/app/teacher/moderation/ModerationQueue.tsx:54)"}, "properties": {"repobilityId": "1b2cfac2948b929f", "scanner": "scanner-primary", "fingerprint": "f6d31f44c6f9d039", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9fbaaa805dd9267", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/moderation/games/${gameId} (src/app/teacher/moderation/ModerationQueue.tsx:77)"}, "properties": {"repobilityId": "39d094f399cf8976", "scanner": "scanner-primary", "fingerprint": "d9fbaaa805dd9267", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbd443ce6a95df91", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/moderation/reports/${reportId} (src/app/teacher/moderation/ModerationQueue.tsx:104)"}, "properties": {"repobilityId": "893e004ee42880c0", "scanner": "scanner-primary", "fingerprint": "fbd443ce6a95df91", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79a0e7b4d6049511", "level": "error", "message": {"text": "Dangling fetch: POST /api/coppa/data-request (src/app/privacy/data-request/DataRequestForm.tsx:40)"}, "properties": {"repobilityId": "69489c84835296e9", "scanner": "scanner-primary", "fingerprint": "79a0e7b4d6049511", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c36b77136a9e9f0", "level": "error", "message": {"text": "Dangling fetch: POST /api/race/rooms (src/app/teach/race/page.tsx:28)"}, "properties": {"repobilityId": "c50c45db4c10fd67", "scanner": "scanner-primary", "fingerprint": "0c36b77136a9e9f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cd22f99aacd906e", "level": "error", "message": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/start (src/app/teach/race/page.tsx:49)"}, "properties": {"repobilityId": "a7db638edaf7cd3f", "scanner": "scanner-primary", "fingerprint": "2cd22f99aacd906e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c525e32c067fdc1", "level": "error", "message": {"text": "Dangling fetch: POST /api/race/rooms/${raceId}/reset (src/app/teach/race/page.tsx:60)"}, "properties": {"repobilityId": "05ee86dedb0c3841", "scanner": "scanner-primary", "fingerprint": "2c525e32c067fdc1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c4d8209a87ec127", "level": "error", "message": {"text": "Dangling fetch: GET /api/texture-overlays (src/lib/texture-overlays-cloud.ts:29)"}, "properties": {"repobilityId": "b9c1c6790391a33b", "scanner": "scanner-primary", "fingerprint": "4c4d8209a87ec127", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6af2a38606246384", "level": "error", "message": {"text": "Dangling fetch: POST /api/texture-overlays (src/lib/texture-overlays-cloud.ts:53)"}, "properties": {"repobilityId": "4f1ec69eaf6eea03", "scanner": "scanner-primary", "fingerprint": "6af2a38606246384", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06addbc9d5c76827", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/texture-overlays?${params} (src/lib/texture-overlays-cloud.ts:72)"}, "properties": {"repobilityId": "d17c048ab3617c0c", "scanner": "scanner-primary", "fingerprint": "06addbc9d5c76827", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c76b88c7cfb92b3", "level": "error", "message": {"text": "Dangling fetch: POST /api/tile-sheets (src/lib/tile-cloud.ts:68)"}, "properties": {"repobilityId": "a1075456231d932f", "scanner": "scanner-primary", "fingerprint": "3c76b88c7cfb92b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d590ea3ea133f131", "level": "error", "message": {"text": "Dangling fetch: GET /api/tile-sheets (src/lib/tile-cloud.ts:85)"}, "properties": {"repobilityId": "deba447abe73b83a", "scanner": "scanner-primary", "fingerprint": "d590ea3ea133f131", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-436ddb6b98fe065c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-sheets?id=${encodeURIComponent(id)} (src/lib/tile-cloud.ts:96)"}, "properties": {"repobilityId": "8311494d817a201b", "scanner": "scanner-primary", "fingerprint": "436ddb6b98fe065c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c96ba022a5f7842", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tile-sheets?id=${encodeURIComponent(cloudId)} (src/lib/tile-cloud.ts:124)"}, "properties": {"repobilityId": "8f155e909be80363", "scanner": "scanner-primary", "fingerprint": "1c96ba022a5f7842", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f60dc99dbf44dfb7", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (src/lib/email.ts:45)"}, "properties": {"repobilityId": "d8a8d95f7989e001", "scanner": "scanner-primary", "fingerprint": "f60dc99dbf44dfb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce3a1006e5e052cc", "level": "error", "message": {"text": "Dangling fetch: POST /api/tile-objects (src/lib/object-cloud.ts:60)"}, "properties": {"repobilityId": "a6d02a1c9feed2c9", "scanner": "scanner-primary", "fingerprint": "ce3a1006e5e052cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe644434bfed3c09", "level": "error", "message": {"text": "Dangling fetch: GET /api/tile-objects (src/lib/object-cloud.ts:77)"}, "properties": {"repobilityId": "00cc46e53663c467", "scanner": "scanner-primary", "fingerprint": "fe644434bfed3c09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae2f2fa34030d2e5", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-objects?id=${encodeURIComponent(id)} (src/lib/object-cloud.ts:89)"}, "properties": {"repobilityId": "77c37a36cb0eb83f", "scanner": "scanner-primary", "fingerprint": "ae2f2fa34030d2e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f2d29b3b1b85435", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-objects?groupId=${encodeURIComponent(groupId)} (src/lib/object-cloud.ts:99)"}, "properties": {"repobilityId": "fe3751a48b5bba7b", "scanner": "scanner-primary", "fingerprint": "0f2d29b3b1b85435", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eef1a317cebefe08", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tile-objects (src/lib/object-cloud.ts:135)"}, "properties": {"repobilityId": "14878fbcd10c5c0d", "scanner": "scanner-primary", "fingerprint": "eef1a317cebefe08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bcc3baf6e70ee1b3", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-character-turnaround (src/lib/character-turnaround-jobs.ts:109)"}, "properties": {"repobilityId": "f8f68dde7af7443b", "scanner": "scanner-primary", "fingerprint": "bcc3baf6e70ee1b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1479196ce01952a2", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab-character-turnaround?jobId=${encodeURIComponent(jobId)} (src/lib/character-turnaround-jobs.ts:139)"}, "properties": {"repobilityId": "031ee9664b3f378d", "scanner": "scanner-primary", "fingerprint": "1479196ce01952a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4a647c17caf03bb", "level": "error", "message": {"text": "Dangling fetch: GET /api/pack-curation?packId=${encodeURIComponent(packId)} (src/lib/pack-curation-cloud.ts:18)"}, "properties": {"repobilityId": "993ab2f773836c7b", "scanner": "scanner-primary", "fingerprint": "b4a647c17caf03bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cac9012d092e8569", "level": "error", "message": {"text": "Dangling fetch: POST /api/pack-curation (src/lib/pack-curation-cloud.ts:31)"}, "properties": {"repobilityId": "b28907cf70f2da8a", "scanner": "scanner-primary", "fingerprint": "cac9012d092e8569", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4697c3f8e35f43d8", "level": "error", "message": {"text": "Dangling fetch: GET /api/texture-decorations (src/lib/texture-decorations-cloud.ts:26)"}, "properties": {"repobilityId": "3348497dade1b39a", "scanner": "scanner-primary", "fingerprint": "4697c3f8e35f43d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3ef4521f77d918f", "level": "error", "message": {"text": "Dangling fetch: POST /api/texture-decorations (src/lib/texture-decorations-cloud.ts:42)"}, "properties": {"repobilityId": "654e0509e198d86a", "scanner": "scanner-primary", "fingerprint": "d3ef4521f77d918f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b67232510839430", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/texture-decorations?${params} (src/lib/texture-decorations-cloud.ts:61)"}, "properties": {"repobilityId": "7395bfb0e88c08a0", "scanner": "scanner-primary", "fingerprint": "8b67232510839430", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35cc96fd7c58278f", "level": "error", "message": {"text": "Dangling fetch: GET /api/character-sheets (src/lib/character-sheet-cloud.ts:33)"}, "properties": {"repobilityId": "bfdb19cffec34f33", "scanner": "scanner-primary", "fingerprint": "35cc96fd7c58278f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4ae3d78ddd7e255", "level": "error", "message": {"text": "Dangling fetch: POST /api/character-sheets (src/lib/character-sheet-cloud.ts:51)"}, "properties": {"repobilityId": "b2a160d3fa7af68a", "scanner": "scanner-primary", "fingerprint": "b4ae3d78ddd7e255", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-572e54d385d0fa6a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/character-sheets?id=${encodeURIComponent(id)} (src/lib/character-sheet-cloud.ts:71)"}, "properties": {"repobilityId": "cb4d463aaef29660", "scanner": "scanner-primary", "fingerprint": "572e54d385d0fa6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-914058099f850a12", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab/run/edit-images-v2 (src/lib/restyle-image-tiles.ts:64)"}, "properties": {"repobilityId": "a3c23c79e528e21a", "scanner": "scanner-primary", "fingerprint": "914058099f850a12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-986bc5a964916217", "level": "error", "message": {"text": "Dangling fetch: PUT /api/user-workspace/${kind} (src/lib/user-workspace-cloud.ts:81)"}, "properties": {"repobilityId": "f3a372cc0936c0ea", "scanner": "scanner-primary", "fingerprint": "986bc5a964916217", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-880978088c7fbd16", "level": "error", "message": {"text": "Dangling fetch: GET /api/user-workspace/${kind} (src/lib/user-workspace-cloud.ts:120)"}, "properties": {"repobilityId": "46dfc41e0f307a3d", "scanner": "scanner-primary", "fingerprint": "880978088c7fbd16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ef57822d07d10ad", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/rock-slope-tilesets.ts:158)"}, "properties": {"repobilityId": "e5ea702e88d9cdbf", "scanner": "scanner-primary", "fingerprint": "9ef57822d07d10ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-709d0ba6d07629b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/tile-object-groups (src/lib/tile-group-cloud.ts:52)"}, "properties": {"repobilityId": "89b5d40addcfc713", "scanner": "scanner-primary", "fingerprint": "709d0ba6d07629b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17428b21d8c75ae6", "level": "error", "message": {"text": "Dangling fetch: GET /api/tile-object-groups (src/lib/tile-group-cloud.ts:69)"}, "properties": {"repobilityId": "63d4c6418d98d701", "scanner": "scanner-primary", "fingerprint": "17428b21d8c75ae6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc7ca6441b166f7d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tile-object-groups (src/lib/tile-group-cloud.ts:96)"}, "properties": {"repobilityId": "f82a6a8ed2b3fe1b", "scanner": "scanner-primary", "fingerprint": "fc7ca6441b166f7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bc47587ed52d3a66", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-object-groups?id=${encodeURIComponent(id)} (src/lib/tile-group-cloud.ts:112)"}, "properties": {"repobilityId": "1c5ae57aee68a45c", "scanner": "scanner-primary", "fingerprint": "bc47587ed52d3a66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40a464799f86a039", "level": "error", "message": {"text": "Dangling fetch: GET /api/slime-references (src/lib/slime-references.ts:16)"}, "properties": {"repobilityId": "b13301cdb543287e", "scanner": "scanner-primary", "fingerprint": "40a464799f86a039", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-244ff520cc74498c", "level": "error", "message": {"text": "Dangling fetch: POST /api/slime-references (src/lib/slime-references.ts:29)"}, "properties": {"repobilityId": "76cb634d50ca6392", "scanner": "scanner-primary", "fingerprint": "244ff520cc74498c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7fc192e9f7fa361", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/slime-references?id=${encodeURIComponent(id)} (src/lib/slime-references.ts:44)"}, "properties": {"repobilityId": "cd199719d39e6b0e", "scanner": "scanner-primary", "fingerprint": "e7fc192e9f7fa361", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-714af95877d5a9d5", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/packs.json (src/lib/marketplace-pack.ts:110)"}, "properties": {"repobilityId": "17c288594715ecb9", "scanner": "scanner-primary", "fingerprint": "714af95877d5a9d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6863b4ced1630a1e", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/marketplace-pack.ts:111)"}, "properties": {"repobilityId": "6189c47e5ffb9025", "scanner": "scanner-primary", "fingerprint": "6863b4ced1630a1e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dbbcf6564ea60c78", "level": "error", "message": {"text": "Dangling fetch: GET /api/classroom${path} (src/lib/classroom-api.ts:127)"}, "properties": {"repobilityId": "a7d529b7171d2fe4", "scanner": "scanner-primary", "fingerprint": "dbbcf6564ea60c78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9db2de26bb18abc", "level": "error", "message": {"text": "Dangling fetch: POST /api/tile-object-classes (src/lib/object-class-cloud.ts:47)"}, "properties": {"repobilityId": "a82f0ad950c837d7", "scanner": "scanner-primary", "fingerprint": "a9db2de26bb18abc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83d732f0b2ef82ae", "level": "error", "message": {"text": "Dangling fetch: GET /api/tile-object-classes (src/lib/object-class-cloud.ts:61)"}, "properties": {"repobilityId": "4406c35dd57853ce", "scanner": "scanner-primary", "fingerprint": "83d732f0b2ef82ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-733933535e745db9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tile-object-classes (src/lib/object-class-cloud.ts:69)"}, "properties": {"repobilityId": "4ffabf2e0cc73368", "scanner": "scanner-primary", "fingerprint": "733933535e745db9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87bec9f1e5957e89", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-object-classes?id=${encodeURIComponent(id)} (src/lib/object-class-cloud.ts:82)"}, "properties": {"repobilityId": "c704326e03c6bdd5", "scanner": "scanner-primary", "fingerprint": "87bec9f1e5957e89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f600389631d63d30", "level": "error", "message": {"text": "Dangling fetch: PUT /api/tile-asset-classes (src/lib/object-class-cloud.ts:88)"}, "properties": {"repobilityId": "af3bddc7f12dd4ca", "scanner": "scanner-primary", "fingerprint": "f600389631d63d30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af7e1c70f74eda28", "level": "error", "message": {"text": "Dangling fetch: GET /api/tile-asset-classes (src/lib/object-class-cloud.ts:105)"}, "properties": {"repobilityId": "9f5a35f1452689c1", "scanner": "scanner-primary", "fingerprint": "af7e1c70f74eda28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6826d09ce9adeb81", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-asset-classes?assetId=${encodeURIComponent(assetId)} (src/lib/object-class-cloud.ts:113)"}, "properties": {"repobilityId": "37422e665d04b750", "scanner": "scanner-primary", "fingerprint": "6826d09ce9adeb81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0bcc7ee4f049700", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/games/${gameId} (src/lib/games-sync.ts:40)"}, "properties": {"repobilityId": "61b4789e521919e1", "scanner": "scanner-primary", "fingerprint": "a0bcc7ee4f049700", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d373a449aeb66643", "level": "error", "message": {"text": "Dangling fetch: GET /api/games?userId=${encodeURIComponent(userId)}&fields=full (src/lib/games-sync.ts:68)"}, "properties": {"repobilityId": "3464b3b6f689da5f", "scanner": "scanner-primary", "fingerprint": "d373a449aeb66643", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff4c14d23ecdf4c5", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab/library/tileset?id=${encodeURIComponent(id)} (src/lib/pixellab-import.ts:96)"}, "properties": {"repobilityId": "556dd415c8a961b3", "scanner": "scanner-primary", "fingerprint": "ff4c14d23ecdf4c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2f1ee5bc0113a31", "level": "error", "message": {"text": "Dangling fetch: POST /api/pixellab-character-animation (src/lib/character-anim-jobs.ts:170)"}, "properties": {"repobilityId": "785f0cae4080f6da", "scanner": "scanner-primary", "fingerprint": "f2f1ee5bc0113a31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5aeead947afd701", "level": "error", "message": {"text": "Dangling fetch: GET /api/pixellab-character-animation?jobId=${encodeURIComponent(jobId)} (src/lib/character-anim-jobs.ts:222)"}, "properties": {"repobilityId": "30fa13deb41dc713", "scanner": "scanner-primary", "fingerprint": "a5aeead947afd701", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04e58462952eacfa", "level": "error", "message": {"text": "Dangling fetch: GET /fantasy-tileset/manifest.json (src/lib/tile-collider-hydrate.ts:267)"}, "properties": {"repobilityId": "13b0710a027bc9f0", "scanner": "scanner-primary", "fingerprint": "04e58462952eacfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7074fded8eb1447", "level": "error", "message": {"text": "Dangling fetch: PUT /api/tile-maps (src/lib/tile-map-cloud.ts:36)"}, "properties": {"repobilityId": "204094f0af171713", "scanner": "scanner-primary", "fingerprint": "b7074fded8eb1447", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76262cf75f34acc6", "level": "error", "message": {"text": "Dangling fetch: GET /api/tile-maps (src/lib/tile-map-cloud.ts:50)"}, "properties": {"repobilityId": "841a593998873ef8", "scanner": "scanner-primary", "fingerprint": "76262cf75f34acc6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc17fd3f2a2790ed", "level": "error", "message": {"text": "Dangling fetch: GET /api/lang/profile?course=${encodeURIComponent(course)} (src/lib/lang-cloud.ts:55)"}, "properties": {"repobilityId": "d1d31ddec64b71b8", "scanner": "scanner-primary", "fingerprint": "dc17fd3f2a2790ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c7c23c8289b1120b", "level": "error", "message": {"text": "Dangling fetch: POST /api/lang/profile (src/lib/lang-cloud.ts:64)"}, "properties": {"repobilityId": "3d8934a834294fc0", "scanner": "scanner-primary", "fingerprint": "c7c23c8289b1120b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6b41ca0b268317b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lang/progress?course=${encodeURIComponent(course)} (src/lib/lang-cloud.ts:74)"}, "properties": {"repobilityId": "667948b9f717ee50", "scanner": "scanner-primary", "fingerprint": "b6b41ca0b268317b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-569692124e1a0788", "level": "error", "message": {"text": "Dangling fetch: POST /api/lang/progress (src/lib/lang-cloud.ts:83)"}, "properties": {"repobilityId": "2e9fba7697591007", "scanner": "scanner-primary", "fingerprint": "569692124e1a0788", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0023ee472915087", "level": "error", "message": {"text": "Dangling fetch: POST /api/tile-characters (src/lib/character-cloud.ts:153)"}, "properties": {"repobilityId": "92fb0d369b452d2b", "scanner": "scanner-primary", "fingerprint": "e0023ee472915087", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40d10b8a888a1583", "level": "error", "message": {"text": "Dangling fetch: GET /api/tile-characters (src/lib/character-cloud.ts:167)"}, "properties": {"repobilityId": "ca5129544c341d6a", "scanner": "scanner-primary", "fingerprint": "40d10b8a888a1583", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17113fa9925b556d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tile-characters (src/lib/character-cloud.ts:175)"}, "properties": {"repobilityId": "78ba3b9c97b02153", "scanner": "scanner-primary", "fingerprint": "17113fa9925b556d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ae8fe168b673214", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-characters?id=${encodeURIComponent(id)} (src/lib/character-cloud.ts:188)"}, "properties": {"repobilityId": "19a1c77f163ccf2b", "scanner": "scanner-primary", "fingerprint": "8ae8fe168b673214", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-869ff53cc5fc5d55", "level": "error", "message": {"text": "Dangling fetch: POST /api/tile-character-animations (src/lib/character-cloud.ts:230)"}, "properties": {"repobilityId": "ae3532235ffa2b65", "scanner": "scanner-primary", "fingerprint": "869ff53cc5fc5d55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd52e787bfd84686", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tile-character-animations (src/lib/character-cloud.ts:268)"}, "properties": {"repobilityId": "7ed4a167ee9f9081", "scanner": "scanner-primary", "fingerprint": "cd52e787bfd84686", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b39016c02751417", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tile-character-animations?id=${encodeURIComponent(id)} (src/lib/character-cloud.ts:281)"}, "properties": {"repobilityId": "ca44fbcb3265caf5", "scanner": "scanner-primary", "fingerprint": "2b39016c02751417", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1a758cb19f6da19", "level": "error", "message": {"text": "Dangling fetch: GET /api/k12/${subject}/${grade} (src/lib/arcade/content.ts:67)"}, "properties": {"repobilityId": "e0f2f8f2b3f8f1b0", "scanner": "scanner-primary", "fingerprint": "f1a758cb19f6da19", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a470a8529f6f46c7", "level": "error", "message": {"text": "Dangling fetch: POST /api/games/save (src/lib/tile-publish/index.ts:93)"}, "properties": {"repobilityId": "2e61f5becb424da2", "scanner": "scanner-primary", "fingerprint": "a470a8529f6f46c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d371201f39b63e4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/games/${saveJson.id} (src/lib/tile-publish/index.ts:113)"}, "properties": {"repobilityId": "634305bf2109b8a6", "scanner": "scanner-primary", "fingerprint": "2d371201f39b63e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b00f108d182ddc2", "level": "error", "message": {"text": "Dangling fetch: GET /api/quiz/rooms/${roomId} (src/lib/quiz/use-room.ts:47)"}, "properties": {"repobilityId": "660017904fa7bce5", "scanner": "scanner-primary", "fingerprint": "9b00f108d182ddc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e146f44d3bee124", "level": "error", "message": {"text": "Dangling fetch: POST /api/games/save (src/lib/studio/save-game.ts:47)"}, "properties": {"repobilityId": "cf83041132130d5c", "scanner": "scanner-primary", "fingerprint": "7e146f44d3bee124", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9e5afe093cf84e7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/games/${gameId} (src/lib/studio/save-game.ts:67)"}, "properties": {"repobilityId": "79f1442d09000724", "scanner": "scanner-primary", "fingerprint": "b9e5afe093cf84e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-301df867622cf613", "level": "error", "message": {"text": "Dangling fetch: GET /api/race/rooms/${raceId} (src/lib/race/use-race.ts:40)"}, "properties": {"repobilityId": "c1217b3187c51518", "scanner": "scanner-primary", "fingerprint": "301df867622cf613", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-596b8e8ab3688953", "level": "error", "message": {"text": "Dangling fetch: GET /api/game-state/${encodeURIComponent(gameId)} (src/hooks/use-game-state.ts:132)"}, "properties": {"repobilityId": "2a2bb98fb0acd410", "scanner": "scanner-primary", "fingerprint": "596b8e8ab3688953", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d525c5e9cdd1a05", "level": "error", "message": {"text": "Dangling fetch: POST /api/generate-part (src/hooks/usePartGeneration.ts:49)"}, "properties": {"repobilityId": "9abd81405a989a13", "scanner": "scanner-primary", "fingerprint": "9d525c5e9cdd1a05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65c6f77a44608ff5", "level": "error", "message": {"text": "Dangling fetch: GET /api/credits?userId=${encodeURIComponent(userId)} (src/store/credits-store.ts:31)"}, "properties": {"repobilityId": "b3018e71b85c45be", "scanner": "scanner-primary", "fingerprint": "65c6f77a44608ff5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-684f0e83ba7e1558", "level": "note", "message": {"text": "Unused endpoint: GET "}, "properties": {"repobilityId": "ae324451acfae67f", "scanner": "scanner-primary", "fingerprint": "684f0e83ba7e1558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}