{"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-0226d2458314704d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/video-preview/VideoEventLog.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/video-preview/VideoEventLog.tsx:179"}, "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-c204e6f5c1ba671a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/video-preview/SceneNode.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/video-preview/SceneNode.tsx:82"}, "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-fa22f1b59da04a0b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/game-preview/GameSource.tsx:142", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/game-preview/GameSource.tsx:142"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d70bbfcdfc6096e6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/game-preview/GameFrame.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/game-preview/GameFrame.tsx:177"}, "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-5061f884fd1c59bd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/ui/pixel/index.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/ui/pixel/index.tsx:80"}, "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-f3dd2b137b1f54c7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/workspace/RecentDecks.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/workspace/RecentDecks.tsx:95"}, "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-d926ebb2efcb4a66", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/workspace/Switcher.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/workspace/Switcher.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-f7cf0e7efa198ce8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/chat/ChatThread.tsx:564", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/chat/ChatThread.tsx:564"}, "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-9ed68a51e7ea7d55", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/chat/Bubble.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/chat/Bubble.tsx:61"}, "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-367a85832df92a0d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides-preview/EditPopover.tsx:226", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides-preview/EditPopover.tsx:226"}, "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-9183ae896950b920", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/claw/ClawOffice.tsx:498", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/claw/ClawOffice.tsx:498"}, "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-3eb1138f21990f2b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/claw/ClawOffice.tsx:405", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/claw/ClawOffice.tsx:405"}, "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-b076c23200f8c9c8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/claw/WorkerSprite.tsx:112", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/claw/WorkerSprite.tsx:112"}, "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-d967ef7461c8d369", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/claw/ArtifactPanel.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/claw/ArtifactPanel.tsx:257"}, "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-230e9f3a6353ced2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides/TemplateCard.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides/TemplateCard.tsx:70"}, "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-145eed1040ba6e32", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides/SessionSwitcherPopover.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides/SessionSwitcherPopover.tsx:109"}, "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-9f6fcc6a32a8ce7c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/design/ProjectSwitcher.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/design/ProjectSwitcher.tsx:84"}, "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-46b27d78fb565775", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/design/page.tsx:921", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/design/page.tsx:921"}, "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-7d7b24d6b8154b38", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/claw/[id]/page.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/claw/[id]/page.tsx:66"}, "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-06b33608e2d25a78", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/slides/new/page.tsx:356", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/slides/new/page.tsx:356"}, "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-48a7bae880fe08e0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/slides/[id]/page.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/slides/[id]/page.tsx:146"}, "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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9eae113ca663b4de", "name": "Docker base image is tag-pinned but not digest-pinned: golang:1.26-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.26-bookworm"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84019dfd8d98a34d", "name": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7673561931a5dd33", "name": "Dockerfile runs as root: apps/web/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: apps/web/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74e2e2316f173b7a", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17fc884bbac5a968", "name": "Dockerfile runs as root: services/sandbox/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/sandbox/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20725863db099b72", "name": "Docker base image is tag-pinned but not digest-pinned: rust:1.83-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1.83-bookworm"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-013f3a63e2ecd2ac", "name": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07ce3fb18f6bef10", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/game-preview/GameSource.tsx:142", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/game-preview/GameSource.tsx:142"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-68230f197d773db7", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/claw/ClawOffice.tsx:405", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/claw/ClawOffice.tsx:405"}, "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-f1a2632f45a6654c", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/claw/WorkerSprite.tsx:112", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/claw/WorkerSprite.tsx:112"}, "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-2488a8f3b9981eba", "name": "Insecure pattern 'direct_innerhtml_assignment' in services/orchestrator/internal/tool/slide_render.go:1400", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in services/orchestrator/internal/tool/slide_render.go:1400"}, "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-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-go@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85581dcc727196ea", "name": "Very large file: apps/web/components/claw/ClawOffice.tsx (1209 lines)", "shortDescription": {"text": "Very large file: apps/web/components/claw/ClawOffice.tsx (1209 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-bcb03870bf770147", "name": "Very large file: apps/web/app/design/page.tsx (1770 lines)", "shortDescription": {"text": "Very large file: apps/web/app/design/page.tsx (1770 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-a5570f3e971198cc", "name": "Very large file: services/orchestrator/internal/tool/slide_render.go (1406 lines)", "shortDescription": {"text": "Very large file: services/orchestrator/internal/tool/slide_render.go (1406 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-8586bb8cb833454e", "name": "Very large file: services/orchestrator/internal/skill/slides/agent_runner.go (1206 lines)", "shortDescription": {"text": "Very large file: services/orchestrator/internal/skill/slides/agent_runner.go (1206 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": "24 test file(s) for 252 source file(s) (ratio 0.10). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 130 placeholder/mock markers across 45 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-a0da2bc3b70e6f43", "name": "Commented-code block (5 lines) in apps/web/middleware.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/middleware.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-059ffdbbfbd7b7e8", "name": "Commented-code block (9 lines) in apps/web/components/video-preview/VideoTimeline.tsx:20", "shortDescription": {"text": "Commented-code block (9 lines) in apps/web/components/video-preview/VideoTimeline.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55d9fb98655e79f1", "name": "Commented-code block (5 lines) in apps/web/components/video-preview/VideoEventLog.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/video-preview/VideoEventLog.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-77d0b8dbd15e3f10", "name": "Commented-code block (6 lines) in apps/web/components/video-preview/SceneNode.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/components/video-preview/SceneNode.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-f746eba3420c9a29", "name": "Commented-code block (5 lines) in apps/web/components/game-preview/GameFrame.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/game-preview/GameFrame.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-4565564ea14cfb66", "name": "Commented-code block (5 lines) in apps/web/components/game-preview/GameChat.tsx:459", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/game-preview/GameChat.tsx:459"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08306ecad686c555", "name": "Commented-code block (8 lines) in apps/web/components/ui/ErrorCallout.tsx:5", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/components/ui/ErrorCallout.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-9d311347b2ed309a", "name": "Commented-code block (5 lines) in apps/web/components/workspace/Switcher.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/workspace/Switcher.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-53d9d1da59b0bc4f", "name": "Commented-code block (5 lines) in apps/web/components/chat/transport.tsx:121", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/transport.tsx:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ea29c86a82bdf0f", "name": "Commented-code block (5 lines) in apps/web/components/chat/ClarificationCard.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ClarificationCard.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-d6871808bc34b8bc", "name": "Commented-code block (5 lines) in apps/web/components/chat/Chat.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/Chat.tsx: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-8a09bccfd9582905", "name": "Commented-code block (5 lines) in apps/web/components/chat/ChatThread.tsx:210", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ChatThread.tsx:210"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8df084ca4ee79a90", "name": "Commented-code block (7 lines) in apps/web/components/chat/WizardCard.tsx:27", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/chat/WizardCard.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffb5375439559682", "name": "Commented-code block (5 lines) in apps/web/components/chat/FollowupInput.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/FollowupInput.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-ed740f4193eea6e8", "name": "Commented-code block (5 lines) in apps/web/components/chat/ThoughtCollapse.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ThoughtCollapse.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-3aa3337ec18abf33", "name": "Commented-code block (8 lines) in apps/web/components/chat/EditTurnTrace.tsx:14", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/components/chat/EditTurnTrace.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-bc933b73e275e779", "name": "Commented-code block (5 lines) in apps/web/components/chat/SlidesOpening.tsx:165", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/SlidesOpening.tsx:165"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffad69a89b9f46cb", "name": "Commented-code block (8 lines) in apps/web/components/chat/QuestionBubble.tsx:9", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/components/chat/QuestionBubble.tsx: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-7755bcf440d70e36", "name": "Commented-code block (6 lines) in apps/web/components/chat/session.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/components/chat/session.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76be7a5237b6f251", "name": "Commented-code block (7 lines) in apps/web/components/chat/OutlineReviewCard.tsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/chat/OutlineReviewCard.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-433d60f233d28a2d", "name": "Commented-code block (7 lines) in apps/web/components/chat/Bubble.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/chat/Bubble.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-e94b8fd98b08f075", "name": "Commented-code block (6 lines) in apps/web/components/chat/BusyHint.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/components/chat/BusyHint.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-2dcaeb4db097b114", "name": "Commented-code block (5 lines) in apps/web/components/chat/ToolStrip.tsx:101", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ToolStrip.tsx:101"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-483fd1f06eddee91", "name": "Commented-code block (5 lines) in apps/web/components/chat/SvgPipelineProgress.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/SvgPipelineProgress.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-d8448d3fde7a01f3", "name": "Commented-code block (5 lines) in apps/web/components/chat/ComposeStrip.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ComposeStrip.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-aa965e1abf444c67", "name": "Commented-code block (7 lines) in apps/web/components/chat/skills/slides.ts:64", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/chat/skills/slides.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60197bfc8f3ce0c1", "name": "Commented-code block (7 lines) in apps/web/components/slides-preview/LivePreviewStack.tsx:24", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/slides-preview/LivePreviewStack.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fae3bc92abc9618", "name": "Commented-code block (7 lines) in apps/web/components/slides-preview/EditPopover.tsx:23", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/slides-preview/EditPopover.tsx: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-b87745be6ef943d7", "name": "Commented-code block (6 lines) in apps/web/components/slides-preview/SlideFrame.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/components/slides-preview/SlideFrame.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-9c046a5dcf97b306", "name": "Commented-code block (5 lines) in apps/web/components/claw/ClarificationCard.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/claw/ClarificationCard.tsx: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-90580be404fbd693", "name": "Commented-code block (7 lines) in apps/web/components/claw/ClawOffice.tsx:21", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/claw/ClawOffice.tsx: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-228c6ae7f1750084", "name": "Commented-code block (7 lines) in apps/web/components/claw/ClawChat.tsx:29", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/claw/ClawChat.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca961a29faac1643", "name": "Commented-code block (5 lines) in apps/web/components/claw/BindingsPanel.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/claw/BindingsPanel.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-e1050abc7277dfb5", "name": "Commented-code block (5 lines) in apps/web/components/claw/outfits.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/claw/outfits.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-b184905304f52a8d", "name": "Commented-code block (6 lines) in apps/web/components/claw/TaskPlanCard.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/components/claw/TaskPlanCard.tsx: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-052dfc7a13178e74", "name": "Commented-code block (7 lines) in apps/web/components/claw/officeSim.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/claw/officeSim.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-aca53a00bb5fcbc6", "name": "Commented-code block (6 lines) in apps/web/components/claw/WorkerSprite.tsx:7", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/components/claw/WorkerSprite.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-3969be9e8febaa39", "name": "Commented-code block (5 lines) in apps/web/components/claw/workers.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/claw/workers.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-c5227e219b009b4e", "name": "Commented-code block (8 lines) in apps/web/components/claw/ArtifactPanel.tsx:18", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/components/claw/ArtifactPanel.tsx: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-942d9372d80363c7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/claw/ArtifactPanel.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/claw/ArtifactPanel.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-8a1575911fef8d99", "name": "Commented-code block (5 lines) in apps/web/components/slides/TemplateCard.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/slides/TemplateCard.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-41bcbc7ab373017d", "name": "Commented-code block (5 lines) in apps/web/components/slides/LayoutExampleCard.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/slides/LayoutExampleCard.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-6c1b88a72eb31119", "name": "Commented-code block (5 lines) in apps/web/components/slides/SessionSwitcherPopover.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/slides/SessionSwitcherPopover.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-bd38d7c74bc61a25", "name": "Commented-code block (7 lines) in apps/web/components/slides/TemplateCreator.tsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/components/slides/TemplateCreator.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-d3ecbe9390518fc1", "name": "Commented-code block (5 lines) in apps/web/app/login/page.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/login/page.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-492095b0bf1311f4", "name": "Commented-code block (5 lines) in apps/web/app/design/RightSideChat.tsx:235", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/design/RightSideChat.tsx: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-fbd530babcd6035e", "name": "Commented-code block (5 lines) in apps/web/app/design/ChatCopilot.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/design/ChatCopilot.tsx: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-bec1e45f8c1bb257", "name": "Commented-code block (6 lines) in apps/web/app/design/TldrawCanvas.tsx:23", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/app/design/TldrawCanvas.tsx: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-b80cef9a112db039", "name": "Commented-code block (5 lines) in apps/web/app/design/SkillsLibrary.tsx:162", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/design/SkillsLibrary.tsx:162"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f1d96665d4cc51a", "name": "Commented-code block (5 lines) in apps/web/app/design/ProjectSwitcher.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/design/ProjectSwitcher.tsx: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-f3474728843c9ba2", "name": "Commented-code block (10 lines) in apps/web/app/design/page.tsx:62", "shortDescription": {"text": "Commented-code block (10 lines) in apps/web/app/design/page.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b578b03876b343a", "name": "Commented-code block (5 lines) in apps/web/app/design/designProjects.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/design/designProjects.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-05f98dd0b7697b98", "name": "Commented-code block (5 lines) in apps/web/app/claw/new/page.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/claw/new/page.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-01c1d19bbdd4bd56", "name": "Commented-code block (5 lines) in apps/web/app/claw/[id]/page.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/claw/[id]/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-31074633569e4f0c", "name": "Commented-code block (5 lines) in apps/web/app/slides/new/page.tsx:42", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/slides/new/page.tsx: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-9e9c214735688064", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/slides/new/page.tsx:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/slides/new/page.tsx:115"}, "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-c03c64de89bf276e", "name": "Commented-code block (6 lines) in apps/web/app/video/new/page.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/app/video/new/page.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-e4a04efe28cc3300", "name": "Commented-code block (6 lines) in apps/web/lib/api.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/api.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-5f176cca6ed3eea0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/lib/api.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/lib/api.ts:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f67875df98aa0080", "name": "Commented-code block (5 lines) in apps/web/lib/slideMode.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/slideMode.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-b48777a255ead5e8", "name": "Commented-code block (7 lines) in apps/web/lib/templates.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/lib/templates.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-55900269cfcf3c78", "name": "Commented-code block (7 lines) in apps/web/lib/parseHints.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/lib/parseHints.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-5d0a2ac8b4c7e6cb", "name": "Commented-code block (5 lines) in apps/web/lib/motion.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/motion.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-65b4fac162d874e7", "name": "Commented-code block (6 lines) in apps/web/lib/workspace.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/workspace.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-922ead64e7129335", "name": "Legacy-named symbol `dw_recent_decks_v1` in apps/web/lib/recentDecks.ts:24", "shortDescription": {"text": "Legacy-named symbol `dw_recent_decks_v1` in apps/web/lib/recentDecks.ts:24"}, "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-05b4166e266f315f", "name": "Commented-code block (5 lines) in apps/web/lib/recentDecks.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/recentDecks.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-9c16d2af1b6ea431", "name": "Commented-code block (6 lines) in apps/web/lib/devAuth.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/devAuth.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-b34f10447873e030", "name": "Commented-code block (6 lines) in services/dreamapi-sidecar/df_ability_client.py:39", "shortDescription": {"text": "Commented-code block (6 lines) in services/dreamapi-sidecar/df_ability_client.py:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7369bb6993d89cc6", "name": "Commented-code block (7 lines) in services/dreamapi-sidecar/main.py:573", "shortDescription": {"text": "Commented-code block (7 lines) in services/dreamapi-sidecar/main.py:573"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af022f937dd5b7fd", "name": "9 env vars used in code but missing from .env.example", "shortDescription": {"text": "9 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DF_ABILITY_ACCESS_KEY`, `DF_ABILITY_BASE_URL`, `DF_ABILITY_SECRET_KEY`, `DREAMAPI_API_KEY`, `DREAMAPI_BASE_URL`, `NEXT_PUBLIC_API_BASE`, `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY`, `NEXT_PUBLIC_SUPABASE_URL` + 1 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f1ada5480c65431", "name": "FastAPI POST `generate_image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:154", "shortDescription": {"text": "FastAPI POST `generate_image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:154"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04339b576613da0a", "name": "FastAPI POST `generate_variants` without auth dependency \u2014 services/dreamapi-sidecar/main.py:238", "shortDescription": {"text": "FastAPI POST `generate_variants` without auth dependency \u2014 services/dreamapi-sidecar/main.py:238"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5600a2a0cf30d986", "name": "FastAPI POST `edit_remove_bg` without auth dependency \u2014 services/dreamapi-sidecar/main.py:307", "shortDescription": {"text": "FastAPI POST `edit_remove_bg` without auth dependency \u2014 services/dreamapi-sidecar/main.py:307"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2aebd726723d0c4c", "name": "FastAPI POST `edit_enhance` without auth dependency \u2014 services/dreamapi-sidecar/main.py:346", "shortDescription": {"text": "FastAPI POST `edit_enhance` without auth dependency \u2014 services/dreamapi-sidecar/main.py:346"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d90643678bc6c61", "name": "FastAPI POST `edit_outpaint` without auth dependency \u2014 services/dreamapi-sidecar/main.py:398", "shortDescription": {"text": "FastAPI POST `edit_outpaint` without auth dependency \u2014 services/dreamapi-sidecar/main.py:398"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb175ef98816e34b", "name": "FastAPI POST `edit_image2image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:460", "shortDescription": {"text": "FastAPI POST `edit_image2image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:460"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0be417b734bbb0a9", "name": "FastAPI POST `edit_colorize` without auth dependency \u2014 services/dreamapi-sidecar/main.py:507", "shortDescription": {"text": "FastAPI POST `edit_colorize` without auth dependency \u2014 services/dreamapi-sidecar/main.py:507"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a210d4d916bff8f", "name": "FastAPI POST `generate_nano_banana` without auth dependency \u2014 services/dreamapi-sidecar/main.py:629", "shortDescription": {"text": "FastAPI POST `generate_nano_banana` without auth dependency \u2014 services/dreamapi-sidecar/main.py:629"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15bb433f71b77bca", "name": "FastAPI POST `video_seedance_i2v` without auth dependency \u2014 services/dreamapi-sidecar/main.py:750", "shortDescription": {"text": "FastAPI POST `video_seedance_i2v` without auth dependency \u2014 services/dreamapi-sidecar/main.py:750"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd9994c091d3681b", "name": "FastAPI POST `submit_generate_image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:839", "shortDescription": {"text": "FastAPI POST `submit_generate_image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:839"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b95f3f0e094e497", "name": "Dangling fetch: GET /api/v1/slides/${d.jobId} (apps/web/components/workspace/RecentDecks.tsx:26)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/slides/${d.jobId} (apps/web/components/workspace/RecentDecks.tsx:26)"}, "fullDescription": {"text": "`apps/web/components/workspace/RecentDecks.tsx:26` calls `GET /api/v1/slides/${d.jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/slides/<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-f77a2d43c4a83e3f", "name": "Dangling fetch: POST /api/v1/slides (apps/web/lib/api.ts:272)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/slides (apps/web/lib/api.ts:272)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:272` calls `POST /api/v1/slides` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/slides`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-acfbdd0e0607120b", "name": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:313)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:313)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:313` calls `POST /api/v1/slides/${jobId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/slides/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8122f7693106691", "name": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:330)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:330)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:330` calls `POST /api/v1/slides/${jobId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/slides/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af923bd2e72223fb", "name": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:352)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:352)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:352` calls `POST /api/v1/slides/${jobId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/slides/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83775436ca271975", "name": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:376)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:376)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:376` calls `POST /api/v1/slides/${jobId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/slides/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3933a171bdd2982c", "name": "Dangling fetch: GET /api/v1/slides/${id} (apps/web/lib/api.ts:391)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/slides/${id} (apps/web/lib/api.ts:391)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:391` calls `GET /api/v1/slides/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/slides/<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-29082154f26eb7da", "name": "Dangling fetch: POST /api/v1/games (apps/web/lib/api.ts:479)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/games (apps/web/lib/api.ts:479)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:479` calls `POST /api/v1/games` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/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-cdae221b0e06f959", "name": "Dangling fetch: GET /api/v1/games/${id} (apps/web/lib/api.ts:488)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/games/${id} (apps/web/lib/api.ts:488)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:488` calls `GET /api/v1/games/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/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-14fceb882bd85247", "name": "Dangling fetch: POST /api/v1/games/${jobId}/messages (apps/web/lib/api.ts:498)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/games/${jobId}/messages (apps/web/lib/api.ts:498)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:498` calls `POST /api/v1/games/${jobId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/games/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73d4f477ebd99cd4", "name": "Dangling fetch: GET /api/v1/games/${jobId}/revisions (apps/web/lib/api.ts:522)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/games/${jobId}/revisions (apps/web/lib/api.ts:522)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:522` calls `GET /api/v1/games/${jobId}/revisions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/games/<p>/revisions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f301c5824bb21488", "name": "Dangling fetch: POST /api/v1/games/${jobId}/revisions/${idx}/restore (apps/web/lib/api.ts:533)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/games/${jobId}/revisions/${idx}/restore (apps/web/lib/api.ts:533)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:533` calls `POST /api/v1/games/${jobId}/revisions/${idx}/restore` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/games/<p>/revisions/<p>/restore`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2e1cb0b0aad53ff", "name": "Dangling fetch: POST /api/v1/claw (apps/web/lib/api.ts:623)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/claw (apps/web/lib/api.ts:623)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:623` calls `POST /api/v1/claw` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/claw`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6333badaca42fc2c", "name": "Dangling fetch: GET /api/v1/claw/${id} (apps/web/lib/api.ts:632)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/claw/${id} (apps/web/lib/api.ts:632)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:632` calls `GET /api/v1/claw/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/claw/<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-50b9885dbdeaf05b", "name": "Dangling fetch: GET /api/v1/claw/roles (apps/web/lib/api.ts:658)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/claw/roles (apps/web/lib/api.ts:658)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:658` calls `GET /api/v1/claw/roles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/claw/roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21fe81aa226a30a5", "name": "Dangling fetch: PUT /api/v1/claw/roles (apps/web/lib/api.ts:666)", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/claw/roles (apps/web/lib/api.ts:666)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:666` calls `PUT /api/v1/claw/roles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/claw/roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f4d21df9efa15aa", "name": "Dangling fetch: POST /api/v1/claw/${jobId}/messages (apps/web/lib/api.ts:675)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/claw/${jobId}/messages (apps/web/lib/api.ts:675)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:675` calls `POST /api/v1/claw/${jobId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/claw/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5bbda67703bb64c", "name": "Dangling fetch: POST /api/v1/video/runs (apps/web/lib/api.ts:788)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/video/runs (apps/web/lib/api.ts:788)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:788` calls `POST /api/v1/video/runs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/video/runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78e6328a685a435a", "name": "Dangling fetch: GET /api/v1/video/runs/${runId} (apps/web/lib/api.ts:797)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/video/runs/${runId} (apps/web/lib/api.ts:797)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:797` calls `GET /api/v1/video/runs/${runId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/video/runs/<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-52959f8642bc1cf2", "name": "Dangling fetch: POST /api/v1/video/runs/${runId}/regen (apps/web/lib/api.ts:805)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/video/runs/${runId}/regen (apps/web/lib/api.ts:805)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:805` calls `POST /api/v1/video/runs/${runId}/regen` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/video/runs/<p>/regen`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04c04ee82b036bdc", "name": "Dangling fetch: POST /api/v1/design/images/generate (apps/web/lib/api.ts:852)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/generate (apps/web/lib/api.ts:852)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:852` calls `POST /api/v1/design/images/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/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-e1d2fef9f4a58bdc", "name": "Dangling fetch: POST /api/v1/design/images/variants (apps/web/lib/api.ts:884)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/variants (apps/web/lib/api.ts:884)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:884` calls `POST /api/v1/design/images/variants` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/variants`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-928b0e4cc7955136", "name": "Dangling fetch: POST /api/v1/design/images/remove_bg (apps/web/lib/api.ts:911)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/remove_bg (apps/web/lib/api.ts:911)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:911` calls `POST /api/v1/design/images/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: `/v1/design/images/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-1a538d4ba23d3cc9", "name": "Dangling fetch: POST /api/v1/design/images/enhance (apps/web/lib/api.ts:923)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/enhance (apps/web/lib/api.ts:923)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:923` calls `POST /api/v1/design/images/enhance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/enhance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed2afa0a7b6579fb", "name": "Dangling fetch: POST /api/v1/design/images/colorize (apps/web/lib/api.ts:937)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/colorize (apps/web/lib/api.ts:937)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:937` calls `POST /api/v1/design/images/colorize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/colorize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e81158e1b22ad2f8", "name": "Dangling fetch: POST /api/v1/design/images/outpaint (apps/web/lib/api.ts:961)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/outpaint (apps/web/lib/api.ts:961)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:961` calls `POST /api/v1/design/images/outpaint` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/outpaint`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd2d7f632c1c7a86", "name": "Dangling fetch: POST /api/v1/design/images/nano_banana (apps/web/lib/api.ts:1000)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/nano_banana (apps/web/lib/api.ts:1000)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:1000` calls `POST /api/v1/design/images/nano_banana` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/nano_banana`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4742fbc09f5197e", "name": "Dangling fetch: POST /api/v1/design/videos/seedance_i2v (apps/web/lib/api.ts:1042)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/videos/seedance_i2v (apps/web/lib/api.ts:1042)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:1042` calls `POST /api/v1/design/videos/seedance_i2v` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/videos/seedance_i2v`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54632f9616fb6270", "name": "Dangling fetch: POST /api/v1/design/images/image2image (apps/web/lib/api.ts:1064)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/image2image (apps/web/lib/api.ts:1064)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:1064` calls `POST /api/v1/design/images/image2image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/image2image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee72e38894ab62d4", "name": "Dangling fetch: POST /api/v1/design/chat (apps/web/lib/api.ts:1121)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/chat (apps/web/lib/api.ts:1121)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:1121` calls `POST /api/v1/design/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/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-30459da5f54a755a", "name": "Dangling fetch: POST /api/v1/design/images/generate/submit (apps/web/lib/api.ts:1280)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/design/images/generate/submit (apps/web/lib/api.ts:1280)"}, "fullDescription": {"text": "`apps/web/lib/api.ts:1280` calls `POST /api/v1/design/images/generate/submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/design/images/generate/submit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad0da1fe605620dc", "name": "Unused endpoint: POST /generate/image", "shortDescription": {"text": "Unused endpoint: POST /generate/image"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /generate/image` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d3687de8854003d", "name": "Unused endpoint: POST /generate/variants", "shortDescription": {"text": "Unused endpoint: POST /generate/variants"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /generate/variants` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a99a49d8a2c494d", "name": "Unused endpoint: POST /edit/remove_bg", "shortDescription": {"text": "Unused endpoint: POST /edit/remove_bg"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /edit/remove_bg` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2b04211ee38661c", "name": "Unused endpoint: POST /edit/enhance", "shortDescription": {"text": "Unused endpoint: POST /edit/enhance"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /edit/enhance` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e7688ed834d2c98", "name": "Unused endpoint: POST /edit/outpaint", "shortDescription": {"text": "Unused endpoint: POST /edit/outpaint"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /edit/outpaint` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a146b94c4544cc7", "name": "Unused endpoint: POST /edit/image2image", "shortDescription": {"text": "Unused endpoint: POST /edit/image2image"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /edit/image2image` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1dfa233d90d725ee", "name": "Unused endpoint: POST /edit/colorize", "shortDescription": {"text": "Unused endpoint: POST /edit/colorize"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /edit/colorize` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1491c1d8d0f9dd64", "name": "Unused endpoint: POST /generate/nano_banana", "shortDescription": {"text": "Unused endpoint: POST /generate/nano_banana"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /generate/nano_banana` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a95a536db4fda4e", "name": "Unused endpoint: POST /video/seedance_i2v", "shortDescription": {"text": "Unused endpoint: POST /video/seedance_i2v"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /video/seedance_i2v` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-232c48576dee8079", "name": "Unused endpoint: POST /generate/image/submit", "shortDescription": {"text": "Unused endpoint: POST /generate/image/submit"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `POST /generate/image/submit` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fe7bb9ccee37c55", "name": "Unused endpoint: GET /generate/image/{task_id}/events", "shortDescription": {"text": "Unused endpoint: GET /generate/image/{task_id}/events"}, "fullDescription": {"text": "`services/dreamapi-sidecar/main.py` declares `GET /generate/image/{task_id}/events` 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/18566"}, "properties": {"repository": "ruminate0810/Dream-Waver", "repoUrl": "https://github.com/ruminate0810/Dream-Waver", "branch": "main"}, "results": [{"ruleId": "scanner-0226d2458314704d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/video-preview/VideoEventLog.tsx:179"}, "properties": {"repobilityId": "e91e74f4673946f6", "scanner": "scanner-primary", "fingerprint": "0226d2458314704d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c204e6f5c1ba671a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/video-preview/SceneNode.tsx:82"}, "properties": {"repobilityId": "1ddaf13b32b0e58c", "scanner": "scanner-primary", "fingerprint": "c204e6f5c1ba671a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa22f1b59da04a0b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/game-preview/GameSource.tsx:142"}, "properties": {"repobilityId": "56ef67e21def0ffe", "scanner": "scanner-primary", "fingerprint": "fa22f1b59da04a0b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d70bbfcdfc6096e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/game-preview/GameFrame.tsx:177"}, "properties": {"repobilityId": "be02f4029b7e2f56", "scanner": "scanner-primary", "fingerprint": "d70bbfcdfc6096e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5061f884fd1c59bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/ui/pixel/index.tsx:80"}, "properties": {"repobilityId": "cbe84d75444c3194", "scanner": "scanner-primary", "fingerprint": "5061f884fd1c59bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3dd2b137b1f54c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/workspace/RecentDecks.tsx:95"}, "properties": {"repobilityId": "4a8854f036dc7227", "scanner": "scanner-primary", "fingerprint": "f3dd2b137b1f54c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d926ebb2efcb4a66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/workspace/Switcher.tsx:106"}, "properties": {"repobilityId": "f7b4fa1dca9b5c91", "scanner": "scanner-primary", "fingerprint": "d926ebb2efcb4a66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f7cf0e7efa198ce8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/chat/ChatThread.tsx:564"}, "properties": {"repobilityId": "6b673af2fc7229f4", "scanner": "scanner-primary", "fingerprint": "f7cf0e7efa198ce8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ed68a51e7ea7d55", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/chat/Bubble.tsx:61"}, "properties": {"repobilityId": "ccc71f70da5e2741", "scanner": "scanner-primary", "fingerprint": "9ed68a51e7ea7d55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-367a85832df92a0d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides-preview/EditPopover.tsx:226"}, "properties": {"repobilityId": "47d597cd87ef6582", "scanner": "scanner-primary", "fingerprint": "367a85832df92a0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9183ae896950b920", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/claw/ClawOffice.tsx:498"}, "properties": {"repobilityId": "4ffced10f77504d4", "scanner": "scanner-primary", "fingerprint": "9183ae896950b920", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3eb1138f21990f2b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/claw/ClawOffice.tsx:405"}, "properties": {"repobilityId": "0fa8aefa3a4d3243", "scanner": "scanner-primary", "fingerprint": "3eb1138f21990f2b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b076c23200f8c9c8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/claw/WorkerSprite.tsx:112"}, "properties": {"repobilityId": "7481963b33660bc3", "scanner": "scanner-primary", "fingerprint": "b076c23200f8c9c8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d967ef7461c8d369", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/claw/ArtifactPanel.tsx:257"}, "properties": {"repobilityId": "b7a3c74c98e41929", "scanner": "scanner-primary", "fingerprint": "d967ef7461c8d369", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-230e9f3a6353ced2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides/TemplateCard.tsx:70"}, "properties": {"repobilityId": "7bf69532d05aaafe", "scanner": "scanner-primary", "fingerprint": "230e9f3a6353ced2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-145eed1040ba6e32", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/slides/SessionSwitcherPopover.tsx:109"}, "properties": {"repobilityId": "21604f425738e551", "scanner": "scanner-primary", "fingerprint": "145eed1040ba6e32", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f6fcc6a32a8ce7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/design/ProjectSwitcher.tsx:84"}, "properties": {"repobilityId": "3641d034ffe6b84d", "scanner": "scanner-primary", "fingerprint": "9f6fcc6a32a8ce7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46b27d78fb565775", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/design/page.tsx:921"}, "properties": {"repobilityId": "9e70a6830b756ae0", "scanner": "scanner-primary", "fingerprint": "46b27d78fb565775", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d7b24d6b8154b38", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/claw/[id]/page.tsx:66"}, "properties": {"repobilityId": "766325e46c0268dc", "scanner": "scanner-primary", "fingerprint": "7d7b24d6b8154b38", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-06b33608e2d25a78", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/slides/new/page.tsx:356"}, "properties": {"repobilityId": "2bc3236c71f2ebb9", "scanner": "scanner-primary", "fingerprint": "06b33608e2d25a78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-48a7bae880fe08e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/slides/[id]/page.tsx:146"}, "properties": {"repobilityId": "a339d261f03143a5", "scanner": "scanner-primary", "fingerprint": "48a7bae880fe08e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-9eae113ca663b4de", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.26-bookworm"}, "properties": {"repobilityId": "f2f23244b87ef594", "scanner": "scanner-primary", "fingerprint": "9eae113ca663b4de", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-84019dfd8d98a34d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "properties": {"repobilityId": "e86ca0ecfac65eac", "scanner": "scanner-primary", "fingerprint": "84019dfd8d98a34d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-7673561931a5dd33", "level": "warning", "message": {"text": "Dockerfile runs as root: apps/web/Dockerfile"}, "properties": {"repobilityId": "d68d7937b96d047d", "scanner": "scanner-primary", "fingerprint": "7673561931a5dd33", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-74e2e2316f173b7a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "a06183a8193bac3e", "scanner": "scanner-primary", "fingerprint": "74e2e2316f173b7a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74e2e2316f173b7a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "55a298903c379297", "scanner": "scanner-primary", "fingerprint": "74e2e2316f173b7a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/Dockerfile"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-74e2e2316f173b7a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "eccdecdfdc3e50ec", "scanner": "scanner-primary", "fingerprint": "74e2e2316f173b7a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/Dockerfile"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-17fc884bbac5a968", "level": "warning", "message": {"text": "Dockerfile runs as root: services/sandbox/Dockerfile"}, "properties": {"repobilityId": "53037af6e0e4b7df", "scanner": "scanner-primary", "fingerprint": "17fc884bbac5a968", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-20725863db099b72", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1.83-bookworm"}, "properties": {"repobilityId": "4913f891ba446487", "scanner": "scanner-primary", "fingerprint": "20725863db099b72", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/sandbox/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-013f3a63e2ecd2ac", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "properties": {"repobilityId": "1f8bbb4586e5765a", "scanner": "scanner-primary", "fingerprint": "013f3a63e2ecd2ac", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/sandbox/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-07ce3fb18f6bef10", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/game-preview/GameSource.tsx:142"}, "properties": {"repobilityId": "f5ffbcf8aff3a9fb", "scanner": "scanner-primary", "fingerprint": "07ce3fb18f6bef10", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/game-preview/GameSource.tsx"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-68230f197d773db7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/claw/ClawOffice.tsx:405"}, "properties": {"repobilityId": "f637bfab5c4d2efa", "scanner": "scanner-primary", "fingerprint": "68230f197d773db7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/claw/ClawOffice.tsx"}, "region": {"startLine": 405}}}]}, {"ruleId": "scanner-f1a2632f45a6654c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/claw/WorkerSprite.tsx:112"}, "properties": {"repobilityId": "d6794af3240e808e", "scanner": "scanner-primary", "fingerprint": "f1a2632f45a6654c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/claw/WorkerSprite.tsx"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-2488a8f3b9981eba", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in services/orchestrator/internal/tool/slide_render.go:1400"}, "properties": {"repobilityId": "e458bd46f495dafd", "scanner": "scanner-primary", "fingerprint": "2488a8f3b9981eba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/orchestrator/internal/tool/slide_render.go"}, "region": {"startLine": 1400}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e0c3a165eed1c507", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae83c03bfc0a4d34", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-85581dcc727196ea", "level": "note", "message": {"text": "Very large file: apps/web/components/claw/ClawOffice.tsx (1209 lines)"}, "properties": {"repobilityId": "675d200965287e44", "scanner": "scanner-primary", "fingerprint": "85581dcc727196ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bcb03870bf770147", "level": "note", "message": {"text": "Very large file: apps/web/app/design/page.tsx (1770 lines)"}, "properties": {"repobilityId": "2a46e2c3b9218064", "scanner": "scanner-primary", "fingerprint": "bcb03870bf770147", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a5570f3e971198cc", "level": "note", "message": {"text": "Very large file: services/orchestrator/internal/tool/slide_render.go (1406 lines)"}, "properties": {"repobilityId": "9a6cba9ab3746604", "scanner": "scanner-primary", "fingerprint": "a5570f3e971198cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8586bb8cb833454e", "level": "note", "message": {"text": "Very large file: services/orchestrator/internal/skill/slides/agent_runner.go (1206 lines)"}, "properties": {"repobilityId": "c3525062600f7766", "scanner": "scanner-primary", "fingerprint": "8586bb8cb833454e", "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-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "61ccc926adce1c04", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "dae51903c71d8675", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "9caec8b9e7974825", "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": "f6c8c7c9c330bed8", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-a0da2bc3b70e6f43", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/middleware.ts:20"}, "properties": {"repobilityId": "222913ed14b8ab05", "scanner": "scanner-primary", "fingerprint": "a0da2bc3b70e6f43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-059ffdbbfbd7b7e8", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/web/components/video-preview/VideoTimeline.tsx:20"}, "properties": {"repobilityId": "ee5a02fd2eaa5ed6", "scanner": "scanner-primary", "fingerprint": "059ffdbbfbd7b7e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55d9fb98655e79f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/video-preview/VideoEventLog.tsx:10"}, "properties": {"repobilityId": "636e45d4bd046fe7", "scanner": "scanner-primary", "fingerprint": "55d9fb98655e79f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77d0b8dbd15e3f10", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/components/video-preview/SceneNode.tsx:11"}, "properties": {"repobilityId": "c060cefbb52dd555", "scanner": "scanner-primary", "fingerprint": "77d0b8dbd15e3f10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f746eba3420c9a29", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/game-preview/GameFrame.tsx:13"}, "properties": {"repobilityId": "40fbde63d27f525c", "scanner": "scanner-primary", "fingerprint": "f746eba3420c9a29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4565564ea14cfb66", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/game-preview/GameChat.tsx:459"}, "properties": {"repobilityId": "a45f48ba0a14be2b", "scanner": "scanner-primary", "fingerprint": "4565564ea14cfb66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08306ecad686c555", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/components/ui/ErrorCallout.tsx:5"}, "properties": {"repobilityId": "aa3f62f40f5225ef", "scanner": "scanner-primary", "fingerprint": "08306ecad686c555", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d311347b2ed309a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/workspace/Switcher.tsx:17"}, "properties": {"repobilityId": "8b0d9f3dca1d3c82", "scanner": "scanner-primary", "fingerprint": "9d311347b2ed309a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53d9d1da59b0bc4f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/transport.tsx:121"}, "properties": {"repobilityId": "c39aa00d97cf50fb", "scanner": "scanner-primary", "fingerprint": "53d9d1da59b0bc4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ea29c86a82bdf0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ClarificationCard.tsx:11"}, "properties": {"repobilityId": "6f3c6f40a3375fc2", "scanner": "scanner-primary", "fingerprint": "8ea29c86a82bdf0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6871808bc34b8bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/Chat.tsx:16"}, "properties": {"repobilityId": "7cb717cc98e21cb7", "scanner": "scanner-primary", "fingerprint": "d6871808bc34b8bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a09bccfd9582905", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ChatThread.tsx:210"}, "properties": {"repobilityId": "4a1150807d21de19", "scanner": "scanner-primary", "fingerprint": "8a09bccfd9582905", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8df084ca4ee79a90", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/chat/WizardCard.tsx:27"}, "properties": {"repobilityId": "417eba9c4c52c191", "scanner": "scanner-primary", "fingerprint": "8df084ca4ee79a90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffb5375439559682", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/FollowupInput.tsx:7"}, "properties": {"repobilityId": "6368a57e82301542", "scanner": "scanner-primary", "fingerprint": "ffb5375439559682", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed740f4193eea6e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ThoughtCollapse.tsx:17"}, "properties": {"repobilityId": "5b68be3d7227403c", "scanner": "scanner-primary", "fingerprint": "ed740f4193eea6e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3aa3337ec18abf33", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/components/chat/EditTurnTrace.tsx:14"}, "properties": {"repobilityId": "075a6ec7df762f41", "scanner": "scanner-primary", "fingerprint": "3aa3337ec18abf33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc933b73e275e779", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/SlidesOpening.tsx:165"}, "properties": {"repobilityId": "d52500e86ce56596", "scanner": "scanner-primary", "fingerprint": "bc933b73e275e779", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffad69a89b9f46cb", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/components/chat/QuestionBubble.tsx:9"}, "properties": {"repobilityId": "61029d0938816006", "scanner": "scanner-primary", "fingerprint": "ffad69a89b9f46cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7755bcf440d70e36", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/components/chat/session.ts:28"}, "properties": {"repobilityId": "5ea536ee4584af3b", "scanner": "scanner-primary", "fingerprint": "7755bcf440d70e36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76be7a5237b6f251", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/chat/OutlineReviewCard.tsx:12"}, "properties": {"repobilityId": "aaf6fc6ccb48f2c1", "scanner": "scanner-primary", "fingerprint": "76be7a5237b6f251", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-433d60f233d28a2d", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/chat/Bubble.tsx:6"}, "properties": {"repobilityId": "9e3c7407666b04e4", "scanner": "scanner-primary", "fingerprint": "433d60f233d28a2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e94b8fd98b08f075", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/components/chat/BusyHint.tsx:10"}, "properties": {"repobilityId": "5eefd8ab66029aeb", "scanner": "scanner-primary", "fingerprint": "e94b8fd98b08f075", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dcaeb4db097b114", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ToolStrip.tsx:101"}, "properties": {"repobilityId": "24e92195562d1dcc", "scanner": "scanner-primary", "fingerprint": "2dcaeb4db097b114", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-483fd1f06eddee91", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/SvgPipelineProgress.tsx:8"}, "properties": {"repobilityId": "c4b2dbbaecc0b974", "scanner": "scanner-primary", "fingerprint": "483fd1f06eddee91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8448d3fde7a01f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/chat/ComposeStrip.tsx:10"}, "properties": {"repobilityId": "04061bb7db531156", "scanner": "scanner-primary", "fingerprint": "d8448d3fde7a01f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa965e1abf444c67", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/chat/skills/slides.ts:64"}, "properties": {"repobilityId": "e434692551a66154", "scanner": "scanner-primary", "fingerprint": "aa965e1abf444c67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60197bfc8f3ce0c1", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/slides-preview/LivePreviewStack.tsx:24"}, "properties": {"repobilityId": "f6f495e96bd1a30c", "scanner": "scanner-primary", "fingerprint": "60197bfc8f3ce0c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fae3bc92abc9618", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/slides-preview/EditPopover.tsx:23"}, "properties": {"repobilityId": "2773f24b062947e6", "scanner": "scanner-primary", "fingerprint": "8fae3bc92abc9618", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b87745be6ef943d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/components/slides-preview/SlideFrame.tsx:8"}, "properties": {"repobilityId": "2be681dc5ae3be00", "scanner": "scanner-primary", "fingerprint": "b87745be6ef943d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c046a5dcf97b306", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/claw/ClarificationCard.tsx:9"}, "properties": {"repobilityId": "364fbc72db177eb6", "scanner": "scanner-primary", "fingerprint": "9c046a5dcf97b306", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90580be404fbd693", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/claw/ClawOffice.tsx:21"}, "properties": {"repobilityId": "9f4fb18b231ec559", "scanner": "scanner-primary", "fingerprint": "90580be404fbd693", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-228c6ae7f1750084", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/claw/ClawChat.tsx:29"}, "properties": {"repobilityId": "a5bf93d23dfab45f", "scanner": "scanner-primary", "fingerprint": "228c6ae7f1750084", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca961a29faac1643", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/claw/BindingsPanel.tsx:10"}, "properties": {"repobilityId": "7c995fe38b7399bc", "scanner": "scanner-primary", "fingerprint": "ca961a29faac1643", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1050abc7277dfb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/claw/outfits.ts:8"}, "properties": {"repobilityId": "a99ddc8405e6f8c0", "scanner": "scanner-primary", "fingerprint": "e1050abc7277dfb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b184905304f52a8d", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/components/claw/TaskPlanCard.tsx:9"}, "properties": {"repobilityId": "1f5e0549f24f04fd", "scanner": "scanner-primary", "fingerprint": "b184905304f52a8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-052dfc7a13178e74", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/claw/officeSim.ts:8"}, "properties": {"repobilityId": "9c470a5eaa40c811", "scanner": "scanner-primary", "fingerprint": "052dfc7a13178e74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aca53a00bb5fcbc6", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/components/claw/WorkerSprite.tsx:7"}, "properties": {"repobilityId": "2b1fbfcd18a0a105", "scanner": "scanner-primary", "fingerprint": "aca53a00bb5fcbc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3969be9e8febaa39", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/claw/workers.ts:1"}, "properties": {"repobilityId": "45ce6882a301771c", "scanner": "scanner-primary", "fingerprint": "3969be9e8febaa39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5227e219b009b4e", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/components/claw/ArtifactPanel.tsx:18"}, "properties": {"repobilityId": "7875d406a866a3e4", "scanner": "scanner-primary", "fingerprint": "c5227e219b009b4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-942d9372d80363c7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/claw/ArtifactPanel.tsx:74"}, "properties": {"repobilityId": "8ecbb20e61506599", "scanner": "scanner-primary", "fingerprint": "942d9372d80363c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a1575911fef8d99", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/slides/TemplateCard.tsx:11"}, "properties": {"repobilityId": "4cc45ae237602232", "scanner": "scanner-primary", "fingerprint": "8a1575911fef8d99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41bcbc7ab373017d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/slides/LayoutExampleCard.tsx:5"}, "properties": {"repobilityId": "d6786fa27c596cc0", "scanner": "scanner-primary", "fingerprint": "41bcbc7ab373017d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c1b88a72eb31119", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/slides/SessionSwitcherPopover.tsx:10"}, "properties": {"repobilityId": "d93e80e6bf76df3e", "scanner": "scanner-primary", "fingerprint": "6c1b88a72eb31119", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd38d7c74bc61a25", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/components/slides/TemplateCreator.tsx:12"}, "properties": {"repobilityId": "303859c4e5758e56", "scanner": "scanner-primary", "fingerprint": "bd38d7c74bc61a25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3ecbe9390518fc1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/login/page.tsx:14"}, "properties": {"repobilityId": "e8b5786c2cfa139f", "scanner": "scanner-primary", "fingerprint": "d3ecbe9390518fc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-492095b0bf1311f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/design/RightSideChat.tsx:235"}, "properties": {"repobilityId": "74e4c4ddb18eabda", "scanner": "scanner-primary", "fingerprint": "492095b0bf1311f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbd530babcd6035e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/design/ChatCopilot.tsx:21"}, "properties": {"repobilityId": "7b6b2b8389fcded9", "scanner": "scanner-primary", "fingerprint": "fbd530babcd6035e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bec1e45f8c1bb257", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/app/design/TldrawCanvas.tsx:23"}, "properties": {"repobilityId": "646dab70fab47400", "scanner": "scanner-primary", "fingerprint": "bec1e45f8c1bb257", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b80cef9a112db039", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/design/SkillsLibrary.tsx:162"}, "properties": {"repobilityId": "8aa5b5fd8cbb1698", "scanner": "scanner-primary", "fingerprint": "b80cef9a112db039", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f1d96665d4cc51a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/design/ProjectSwitcher.tsx:16"}, "properties": {"repobilityId": "d8ea27a15dcca07c", "scanner": "scanner-primary", "fingerprint": "0f1d96665d4cc51a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3474728843c9ba2", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/web/app/design/page.tsx:62"}, "properties": {"repobilityId": "b08168481c76fcf8", "scanner": "scanner-primary", "fingerprint": "f3474728843c9ba2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b578b03876b343a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/design/designProjects.ts:6"}, "properties": {"repobilityId": "4127c108175b5f9b", "scanner": "scanner-primary", "fingerprint": "6b578b03876b343a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05f98dd0b7697b98", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/claw/new/page.tsx:17"}, "properties": {"repobilityId": "77706d69ff791607", "scanner": "scanner-primary", "fingerprint": "05f98dd0b7697b98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01c1d19bbdd4bd56", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/claw/[id]/page.tsx:13"}, "properties": {"repobilityId": "861e3ee3692e9269", "scanner": "scanner-primary", "fingerprint": "01c1d19bbdd4bd56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31074633569e4f0c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/slides/new/page.tsx:42"}, "properties": {"repobilityId": "ea66a576e3889149", "scanner": "scanner-primary", "fingerprint": "31074633569e4f0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e9c214735688064", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/slides/new/page.tsx:115"}, "properties": {"repobilityId": "5a25b5c8332e4c70", "scanner": "scanner-primary", "fingerprint": "9e9c214735688064", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c03c64de89bf276e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/app/video/new/page.tsx:10"}, "properties": {"repobilityId": "e307aa966d258be7", "scanner": "scanner-primary", "fingerprint": "c03c64de89bf276e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4a04efe28cc3300", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/api.ts:4"}, "properties": {"repobilityId": "068ebdf9c1d12806", "scanner": "scanner-primary", "fingerprint": "e4a04efe28cc3300", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f176cca6ed3eea0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/lib/api.ts:6"}, "properties": {"repobilityId": "6356f4e041a69bfc", "scanner": "scanner-primary", "fingerprint": "5f176cca6ed3eea0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f67875df98aa0080", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/slideMode.ts:5"}, "properties": {"repobilityId": "4ae1909adce5ced9", "scanner": "scanner-primary", "fingerprint": "f67875df98aa0080", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b48777a255ead5e8", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/lib/templates.ts:6"}, "properties": {"repobilityId": "c033e4232e7e517b", "scanner": "scanner-primary", "fingerprint": "b48777a255ead5e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55900269cfcf3c78", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/lib/parseHints.ts:1"}, "properties": {"repobilityId": "4ee2b8665604f350", "scanner": "scanner-primary", "fingerprint": "55900269cfcf3c78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d0a2ac8b4c7e6cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/motion.ts:8"}, "properties": {"repobilityId": "d1361c05ebcae36d", "scanner": "scanner-primary", "fingerprint": "5d0a2ac8b4c7e6cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65b4fac162d874e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/workspace.ts:4"}, "properties": {"repobilityId": "2ce794e9773dcd03", "scanner": "scanner-primary", "fingerprint": "65b4fac162d874e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-922ead64e7129335", "level": "note", "message": {"text": "Legacy-named symbol `dw_recent_decks_v1` in apps/web/lib/recentDecks.ts:24"}, "properties": {"repobilityId": "02ea502af962366c", "scanner": "scanner-primary", "fingerprint": "922ead64e7129335", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-05b4166e266f315f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/recentDecks.ts:4"}, "properties": {"repobilityId": "da89976586269329", "scanner": "scanner-primary", "fingerprint": "05b4166e266f315f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c16d2af1b6ea431", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/devAuth.ts:4"}, "properties": {"repobilityId": "808ba87360f7bc7e", "scanner": "scanner-primary", "fingerprint": "9c16d2af1b6ea431", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b34f10447873e030", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/dreamapi-sidecar/df_ability_client.py:39"}, "properties": {"repobilityId": "663024d8cb5167ee", "scanner": "scanner-primary", "fingerprint": "b34f10447873e030", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7369bb6993d89cc6", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/dreamapi-sidecar/main.py:573"}, "properties": {"repobilityId": "79485a0b772bb5c8", "scanner": "scanner-primary", "fingerprint": "7369bb6993d89cc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af022f937dd5b7fd", "level": "note", "message": {"text": "9 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5597384795dea7a4", "scanner": "scanner-primary", "fingerprint": "af022f937dd5b7fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-7f1ada5480c65431", "level": "error", "message": {"text": "FastAPI POST `generate_image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:154"}, "properties": {"repobilityId": "d95bbd9ee6f97288", "scanner": "scanner-primary", "fingerprint": "7f1ada5480c65431", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-04339b576613da0a", "level": "error", "message": {"text": "FastAPI POST `generate_variants` without auth dependency \u2014 services/dreamapi-sidecar/main.py:238"}, "properties": {"repobilityId": "722b27fc58169216", "scanner": "scanner-primary", "fingerprint": "04339b576613da0a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 238}}}]}, {"ruleId": "scanner-5600a2a0cf30d986", "level": "error", "message": {"text": "FastAPI POST `edit_remove_bg` without auth dependency \u2014 services/dreamapi-sidecar/main.py:307"}, "properties": {"repobilityId": "8504e8a201c218e2", "scanner": "scanner-primary", "fingerprint": "5600a2a0cf30d986", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 307}}}]}, {"ruleId": "scanner-2aebd726723d0c4c", "level": "error", "message": {"text": "FastAPI POST `edit_enhance` without auth dependency \u2014 services/dreamapi-sidecar/main.py:346"}, "properties": {"repobilityId": "f72a0e9fffaa6ca6", "scanner": "scanner-primary", "fingerprint": "2aebd726723d0c4c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 346}}}]}, {"ruleId": "scanner-9d90643678bc6c61", "level": "error", "message": {"text": "FastAPI POST `edit_outpaint` without auth dependency \u2014 services/dreamapi-sidecar/main.py:398"}, "properties": {"repobilityId": "39375b9c36ebb727", "scanner": "scanner-primary", "fingerprint": "9d90643678bc6c61", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 398}}}]}, {"ruleId": "scanner-bb175ef98816e34b", "level": "error", "message": {"text": "FastAPI POST `edit_image2image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:460"}, "properties": {"repobilityId": "2f680fb000fc61eb", "scanner": "scanner-primary", "fingerprint": "bb175ef98816e34b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 460}}}]}, {"ruleId": "scanner-0be417b734bbb0a9", "level": "error", "message": {"text": "FastAPI POST `edit_colorize` without auth dependency \u2014 services/dreamapi-sidecar/main.py:507"}, "properties": {"repobilityId": "20e24a1b1f1e5739", "scanner": "scanner-primary", "fingerprint": "0be417b734bbb0a9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 507}}}]}, {"ruleId": "scanner-0a210d4d916bff8f", "level": "error", "message": {"text": "FastAPI POST `generate_nano_banana` without auth dependency \u2014 services/dreamapi-sidecar/main.py:629"}, "properties": {"repobilityId": "6151997c2ab95c2f", "scanner": "scanner-primary", "fingerprint": "0a210d4d916bff8f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 629}}}]}, {"ruleId": "scanner-15bb433f71b77bca", "level": "error", "message": {"text": "FastAPI POST `video_seedance_i2v` without auth dependency \u2014 services/dreamapi-sidecar/main.py:750"}, "properties": {"repobilityId": "ec27a020249ae36c", "scanner": "scanner-primary", "fingerprint": "15bb433f71b77bca", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 750}}}]}, {"ruleId": "scanner-dd9994c091d3681b", "level": "error", "message": {"text": "FastAPI POST `submit_generate_image` without auth dependency \u2014 services/dreamapi-sidecar/main.py:839"}, "properties": {"repobilityId": "e19d6ce9214b00dd", "scanner": "scanner-primary", "fingerprint": "dd9994c091d3681b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/dreamapi-sidecar/main.py"}, "region": {"startLine": 839}}}]}, {"ruleId": "scanner-5b95f3f0e094e497", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/slides/${d.jobId} (apps/web/components/workspace/RecentDecks.tsx:26)"}, "properties": {"repobilityId": "c1bd382f460adda3", "scanner": "scanner-primary", "fingerprint": "5b95f3f0e094e497", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f77a2d43c4a83e3f", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/slides (apps/web/lib/api.ts:272)"}, "properties": {"repobilityId": "d6aef287728dd447", "scanner": "scanner-primary", "fingerprint": "f77a2d43c4a83e3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-acfbdd0e0607120b", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:313)"}, "properties": {"repobilityId": "fa21c5b5687abe7e", "scanner": "scanner-primary", "fingerprint": "acfbdd0e0607120b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8122f7693106691", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:330)"}, "properties": {"repobilityId": "838ddc627e4d4505", "scanner": "scanner-primary", "fingerprint": "c8122f7693106691", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af923bd2e72223fb", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:352)"}, "properties": {"repobilityId": "20e6410978898dfb", "scanner": "scanner-primary", "fingerprint": "af923bd2e72223fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83775436ca271975", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/slides/${jobId}/messages (apps/web/lib/api.ts:376)"}, "properties": {"repobilityId": "925623f2126a46ea", "scanner": "scanner-primary", "fingerprint": "83775436ca271975", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3933a171bdd2982c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/slides/${id} (apps/web/lib/api.ts:391)"}, "properties": {"repobilityId": "16a0e04d870eb0fc", "scanner": "scanner-primary", "fingerprint": "3933a171bdd2982c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29082154f26eb7da", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/games (apps/web/lib/api.ts:479)"}, "properties": {"repobilityId": "1929645880732ba5", "scanner": "scanner-primary", "fingerprint": "29082154f26eb7da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cdae221b0e06f959", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/games/${id} (apps/web/lib/api.ts:488)"}, "properties": {"repobilityId": "63cab75e7d7d26ec", "scanner": "scanner-primary", "fingerprint": "cdae221b0e06f959", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14fceb882bd85247", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/games/${jobId}/messages (apps/web/lib/api.ts:498)"}, "properties": {"repobilityId": "940785f7a2f51b45", "scanner": "scanner-primary", "fingerprint": "14fceb882bd85247", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73d4f477ebd99cd4", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/games/${jobId}/revisions (apps/web/lib/api.ts:522)"}, "properties": {"repobilityId": "90c1cf15166e5c43", "scanner": "scanner-primary", "fingerprint": "73d4f477ebd99cd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f301c5824bb21488", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/games/${jobId}/revisions/${idx}/restore (apps/web/lib/api.ts:533)"}, "properties": {"repobilityId": "4df42ef8d7bdef28", "scanner": "scanner-primary", "fingerprint": "f301c5824bb21488", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2e1cb0b0aad53ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/claw (apps/web/lib/api.ts:623)"}, "properties": {"repobilityId": "f4eadf33a6e28095", "scanner": "scanner-primary", "fingerprint": "b2e1cb0b0aad53ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6333badaca42fc2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/claw/${id} (apps/web/lib/api.ts:632)"}, "properties": {"repobilityId": "0a869d7604bcefa0", "scanner": "scanner-primary", "fingerprint": "6333badaca42fc2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50b9885dbdeaf05b", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/claw/roles (apps/web/lib/api.ts:658)"}, "properties": {"repobilityId": "bb19d0e4d5e4b9c2", "scanner": "scanner-primary", "fingerprint": "50b9885dbdeaf05b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21fe81aa226a30a5", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/claw/roles (apps/web/lib/api.ts:666)"}, "properties": {"repobilityId": "f4ce01b23864029d", "scanner": "scanner-primary", "fingerprint": "21fe81aa226a30a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f4d21df9efa15aa", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/claw/${jobId}/messages (apps/web/lib/api.ts:675)"}, "properties": {"repobilityId": "afc08f82aab59ac9", "scanner": "scanner-primary", "fingerprint": "5f4d21df9efa15aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5bbda67703bb64c", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/video/runs (apps/web/lib/api.ts:788)"}, "properties": {"repobilityId": "ce4aeeec0058bccd", "scanner": "scanner-primary", "fingerprint": "a5bbda67703bb64c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78e6328a685a435a", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/video/runs/${runId} (apps/web/lib/api.ts:797)"}, "properties": {"repobilityId": "629c79e2928f7689", "scanner": "scanner-primary", "fingerprint": "78e6328a685a435a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52959f8642bc1cf2", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/video/runs/${runId}/regen (apps/web/lib/api.ts:805)"}, "properties": {"repobilityId": "c278852b573ba128", "scanner": "scanner-primary", "fingerprint": "52959f8642bc1cf2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04c04ee82b036bdc", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/generate (apps/web/lib/api.ts:852)"}, "properties": {"repobilityId": "b491b8724092a859", "scanner": "scanner-primary", "fingerprint": "04c04ee82b036bdc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1d2fef9f4a58bdc", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/variants (apps/web/lib/api.ts:884)"}, "properties": {"repobilityId": "56415243326ed111", "scanner": "scanner-primary", "fingerprint": "e1d2fef9f4a58bdc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-928b0e4cc7955136", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/remove_bg (apps/web/lib/api.ts:911)"}, "properties": {"repobilityId": "1d957d9dc8f7125d", "scanner": "scanner-primary", "fingerprint": "928b0e4cc7955136", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a538d4ba23d3cc9", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/enhance (apps/web/lib/api.ts:923)"}, "properties": {"repobilityId": "804eafb986639e35", "scanner": "scanner-primary", "fingerprint": "1a538d4ba23d3cc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ed2afa0a7b6579fb", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/colorize (apps/web/lib/api.ts:937)"}, "properties": {"repobilityId": "009180bee55a202b", "scanner": "scanner-primary", "fingerprint": "ed2afa0a7b6579fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e81158e1b22ad2f8", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/outpaint (apps/web/lib/api.ts:961)"}, "properties": {"repobilityId": "fb856b7c5527d775", "scanner": "scanner-primary", "fingerprint": "e81158e1b22ad2f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd2d7f632c1c7a86", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/nano_banana (apps/web/lib/api.ts:1000)"}, "properties": {"repobilityId": "e996865ca4f5ad2b", "scanner": "scanner-primary", "fingerprint": "cd2d7f632c1c7a86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4742fbc09f5197e", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/videos/seedance_i2v (apps/web/lib/api.ts:1042)"}, "properties": {"repobilityId": "f0ec0cb2634a9ff0", "scanner": "scanner-primary", "fingerprint": "d4742fbc09f5197e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-54632f9616fb6270", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/image2image (apps/web/lib/api.ts:1064)"}, "properties": {"repobilityId": "54d54177c0a48403", "scanner": "scanner-primary", "fingerprint": "54632f9616fb6270", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee72e38894ab62d4", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/chat (apps/web/lib/api.ts:1121)"}, "properties": {"repobilityId": "46cc4d7c9d847380", "scanner": "scanner-primary", "fingerprint": "ee72e38894ab62d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30459da5f54a755a", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/design/images/generate/submit (apps/web/lib/api.ts:1280)"}, "properties": {"repobilityId": "87916060cfea2fbe", "scanner": "scanner-primary", "fingerprint": "30459da5f54a755a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad0da1fe605620dc", "level": "note", "message": {"text": "Unused endpoint: POST /generate/image"}, "properties": {"repobilityId": "ffe3423c5d115f22", "scanner": "scanner-primary", "fingerprint": "ad0da1fe605620dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d3687de8854003d", "level": "note", "message": {"text": "Unused endpoint: POST /generate/variants"}, "properties": {"repobilityId": "aecdac293adbcd78", "scanner": "scanner-primary", "fingerprint": "7d3687de8854003d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a99a49d8a2c494d", "level": "note", "message": {"text": "Unused endpoint: POST /edit/remove_bg"}, "properties": {"repobilityId": "5d3236ea9eaaf2a1", "scanner": "scanner-primary", "fingerprint": "5a99a49d8a2c494d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2b04211ee38661c", "level": "note", "message": {"text": "Unused endpoint: POST /edit/enhance"}, "properties": {"repobilityId": "c9350d0d32d2a7f3", "scanner": "scanner-primary", "fingerprint": "d2b04211ee38661c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1e7688ed834d2c98", "level": "note", "message": {"text": "Unused endpoint: POST /edit/outpaint"}, "properties": {"repobilityId": "1256cfa7111c900f", "scanner": "scanner-primary", "fingerprint": "1e7688ed834d2c98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a146b94c4544cc7", "level": "note", "message": {"text": "Unused endpoint: POST /edit/image2image"}, "properties": {"repobilityId": "ed0614cf84bbd519", "scanner": "scanner-primary", "fingerprint": "7a146b94c4544cc7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1dfa233d90d725ee", "level": "note", "message": {"text": "Unused endpoint: POST /edit/colorize"}, "properties": {"repobilityId": "aa0a4e8f052c9305", "scanner": "scanner-primary", "fingerprint": "1dfa233d90d725ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1491c1d8d0f9dd64", "level": "note", "message": {"text": "Unused endpoint: POST /generate/nano_banana"}, "properties": {"repobilityId": "c51afcf3d17d2b68", "scanner": "scanner-primary", "fingerprint": "1491c1d8d0f9dd64", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a95a536db4fda4e", "level": "note", "message": {"text": "Unused endpoint: POST /video/seedance_i2v"}, "properties": {"repobilityId": "2371c9ec5eafff0b", "scanner": "scanner-primary", "fingerprint": "8a95a536db4fda4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-232c48576dee8079", "level": "note", "message": {"text": "Unused endpoint: POST /generate/image/submit"}, "properties": {"repobilityId": "02d15721d8bbc4ea", "scanner": "scanner-primary", "fingerprint": "232c48576dee8079", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fe7bb9ccee37c55", "level": "note", "message": {"text": "Unused endpoint: GET /generate/image/{task_id}/events"}, "properties": {"repobilityId": "49b9c70076c108a4", "scanner": "scanner-primary", "fingerprint": "1fe7bb9ccee37c55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}