{"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-411b5bfcb331a367", "name": "Possibly dead Python function: judge_angle_coherence", "shortDescription": {"text": "Possibly dead Python function: judge_angle_coherence"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14ca708ce5d31fdf", "name": "Possibly dead Python function: backend_post", "shortDescription": {"text": "Possibly dead Python function: backend_post"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f73b9875b9a9de3f", "name": "Possibly dead Python function: backend_patch", "shortDescription": {"text": "Possibly dead Python function: backend_patch"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9fa0312c506c181e", "name": "Possibly dead Python function: extract_json_array", "shortDescription": {"text": "Possibly dead Python function: extract_json_array"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8f16b4183d18fd4", "name": "Stray `console.log` in TS/JS \u2014 brand/build-onepager.js:299", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 brand/build-onepager.js:299"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7656e44ba7760971", "name": "Stray `console.log` in TS/JS \u2014 f1_backend/Backend/test_zod.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 f1_backend/Backend/test_zod.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af30e577db78191e", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/Header.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/Header.tsx:86"}, "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-afea845ce5342683", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/IngestionPanel.tsx:328", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/IngestionPanel.tsx:328"}, "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-d6528880668d1b93", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/RunsPanel.tsx:217", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/RunsPanel.tsx:217"}, "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-549a7eb0b163d5e4", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/StoriesPanel.tsx:320", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/StoriesPanel.tsx:320"}, "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-980a433d847469b0", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/AuditPanel.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/AuditPanel.tsx:74"}, "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-1f1c5b7268a82105", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/WorkflowPanel.tsx:736", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/WorkflowPanel.tsx:736"}, "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-08f7a9a2e88a9da2", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/race/DriverToggleList.tsx:111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/race/DriverToggleList.tsx:111"}, "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-ee37772c0b178727", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/race/FocusedDriverCard.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/race/FocusedDriverCard.tsx:44"}, "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-f85659331de1784a", "name": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/pages/AdminPage.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/pages/AdminPage.tsx:81"}, "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-5db07e5c979a260c", "name": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestCircuits.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestCircuits.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e7290a145222a75b", "name": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/truncateRaceData.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/truncateRaceData.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f9d96829100ab4d", "name": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestSessions.ts:281", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestSessions.ts:281"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d67d33c64e065e1c", "name": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestNews.ts:224", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestNews.ts:224"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98fc1bd94d1de78e", "name": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/buildStorySegments.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/buildStorySegments.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8081be39a0a621d0", "name": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/captureReplayFixture.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/captureReplayFixture.ts:73"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eacecb932ed66d1d", "name": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/backfillDriverMeta.ts:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/backfillDriverMeta.ts:152"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1ba19ca238a0501", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/ConstructorSeasonStats.tsx:361", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/ConstructorSeasonStats.tsx:361"}, "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-cc4f42c22d4b7d42", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/TeamProfile.tsx:141", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/TeamProfile.tsx:141"}, "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-5a66732dc5009f67", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/RaceWeekendTabs.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/RaceWeekendTabs.tsx:81"}, "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-e419779154e98124", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/TeamBadge.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/TeamBadge.tsx:71"}, "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-93a4eb9d46673724", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/StandingsWidgets.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/StandingsWidgets.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-81043ea1fc6ba40e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/StoryRings.tsx:20", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/StoryRings.tsx:20"}, "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-e212c441bc866619", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/RaceCardExpandable.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/RaceCardExpandable.tsx:76"}, "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-327d0e3828002a4e", "name": "TODO/FIXME marker in shipping code \u2014 apps/vizf1/web/components/EditorialMagazine.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/vizf1/web/components/EditorialMagazine.tsx:5"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f2743cccaf386be", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/replay/DriverToggleList.tsx:115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/replay/DriverToggleList.tsx:115"}, "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-72b4c4ecf321610c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/replay/FocusedDriverCard.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/replay/FocusedDriverCard.tsx:65"}, "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-3c8dc50fd3213e59", "name": "TODO/FIXME marker in shipping code \u2014 apps/vizf1/web/lib/useFollowedEntities.ts:26", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/vizf1/web/lib/useFollowedEntities.ts:26"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcd0026ced5a3e4b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/catalog/components/ModuleCard.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/catalog/components/ModuleCard.tsx:42"}, "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-ddbae40d736e604b", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/backfillColors.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/backfillColors.ts:144"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c86683635dc998d1", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/ingest.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/ingest.ts:207"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-259f66d486f1c176", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/recap.ts:727", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/recap.ts:727"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3f96d6688d6996d", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/fixtures.ts:150", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/fixtures.ts:150"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c463cb0ba278dceb", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/seed.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/seed.ts:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b3f766c28a94416", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/scores.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/scores.ts:144"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-827a2c192f9c3d40", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/evalFootballFilter.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/evalFootballFilter.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0ebed8fc80eaf41", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/backfillImages.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/backfillImages.ts:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3dc915c2dbbf2279", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/seed-squads.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/seed-squads.ts:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a7a35fe9b62140e", "name": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/entityResolver.ts:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/entityResolver.ts:119"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67d8994ee9373c3f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/StoryRings.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/StoryRings.tsx:65"}, "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-1c2c55eefc5ce59b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/AppShell.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/AppShell.tsx:126"}, "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-b5af9b1b842870ab", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/fifa-wc26/TeamDetail.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/fifa-wc26/TeamDetail.tsx:218"}, "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-342db98a6d376a44", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/ForYouMatchFeed/CardShell.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/ForYouMatchFeed/CardShell.tsx:67"}, "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-e815cfe36b3c1442", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/app/about-us/page.tsx:1136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/app/about-us/page.tsx:1136"}, "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-466adc0c3849ab89", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/app/story/page.tsx:201", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/app/story/page.tsx:201"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb571657fbad3744", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/migrate-hero-split.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/migrate-hero-split.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6aff5be08ac838ff", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/upload-flags.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/upload-flags.ts:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b38a7c3355e33d62", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/populate-display-order.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/populate-display-order.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03f07c31a6247857", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/heygen-generate.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/heygen-generate.ts:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52b51e7558c85836", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-share.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-share.ts:115"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05ed43198180cdf5", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-pdf.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-pdf.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa136ab627556e70", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-audio.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-audio.ts:58"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fba3e5d22164950", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/migrate-content-to-db.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/migrate-content-to-db.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4354647900370e1", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/ingest-source.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/ingest-source.ts:106"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f641406cbf9e422", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/tag-topics.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/tag-topics.ts:80"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-905d7dce83817e28", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-video.ts:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-video.ts:119"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16972e3525ecb279", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/apply-delimitation-mobile-fixes.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/apply-delimitation-mobile-fixes.ts:58"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a5de476d6d13a20", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/ingest.ts:169", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/ingest.ts:169"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84a3dee56e831a3e", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/check-status.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/check-status.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6eaac75f4ffa824e", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/recompute-mention-counts.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/recompute-mention-counts.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f865f26422901ba", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/ner.ts:317", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/ner.ts:317"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-676bf921d4d0afe7", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/seed-doj-bondi.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/seed-doj-bondi.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aed2146542d50027", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/sample-ocr.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/sample-ocr.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9a4b81c2d2bfa0a", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/crawl.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/crawl.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-283ee938b23c9f00", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/check-entities.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/check-entities.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45704f85441c7e37", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/substories.ts:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/substories.ts:136"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14daa147dbe65008", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/debug-ocr.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/debug-ocr.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-787dc9d12e41e7a6", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/import-curated.ts:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/import-curated.ts:113"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a2c16c19b779bff", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/dedupe-entities.ts:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/dedupe-entities.ts:123"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-125afd995dc9aefa", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/geocode.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/geocode.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac6032256fd9e37f", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/fifa-wc26/import.ts:234", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/fifa-wc26/import.ts:234"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6640b087097e8436", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/social/ingest-youtube.ts:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/social/ingest-youtube.ts:156"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e0f3fd77428f1f6", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/generate-summaries.ts:268", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/generate-summaries.ts:268"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1553980b215c3722", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-iea-oil-prices.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-iea-oil-prices.ts:142"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a28f880653f2a13a", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/scrape-news.ts:124", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/scrape-news.ts:124"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a993eff17d686f3f", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-owid.ts:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-owid.ts:130"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5195e4deca8c21fb", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/import.ts:370", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/import.ts:370"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8ddf27edba38930", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/fetch-lyrics.ts:214", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/fetch-lyrics.ts:214"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c1b33c7a958ec2", "name": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/extract-places.ts:487", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/extract-places.ts:487"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d54a45a3042e837", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/AllStoriesClient.tsx:105", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/AllStoriesClient.tsx:105"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e8ae6832829e78f1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/JsonLd.tsx:23", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/JsonLd.tsx:23"}, "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-028be3595fcd64bd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/MapPickerModal.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/MapPickerModal.tsx:285"}, "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-5385b4e1fce004ee", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/HomeClient.tsx:391", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/HomeClient.tsx:391"}, "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-aabe8e9deb3ce0ce", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/demo/DemoPage.tsx:223", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/demo/DemoPage.tsx:223"}, "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-828941ba030dcc39", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/wallet-geo/BreakdownBars.tsx:24", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/wallet-geo/BreakdownBars.tsx:24"}, "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-e11d223255570805", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx:1022", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx:1022"}, "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-4abdcbfc1d4bd7e4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:544", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:544"}, "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-75ba1c8706ccf0ef", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/autoplay/AutoplayMapEditor.tsx:300", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/autoplay/AutoplayMapEditor.tsx:300"}, "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-0cbe88761aede31c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/AirportDetail.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/AirportDetail.tsx:86"}, "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-9ce6255cdefc3435", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/EpsteinMap.tsx:807", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/EpsteinMap.tsx:807"}, "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-0245cddb43c6268c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:297", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:297"}, "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-a2e81343b0fb3e70", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/BlackbookDetail.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/BlackbookDetail.tsx:160"}, "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-83cf2f3716780bc9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/wallet-geo/CountryDetail.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/wallet-geo/CountryDetail.tsx:97"}, "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-6cf9a321602c8b2f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/wallet-geo/WalletGeoThemePreview.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/wallet-geo/WalletGeoThemePreview.tsx:62"}, "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-799d728803730fd3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/energy-profile/CountryDetail.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/energy-profile/CountryDetail.tsx:83"}, "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-f65185599e9d7f60", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/coke-studio/PlaceDetail.tsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/coke-studio/PlaceDetail.tsx:104"}, "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-1ccc35a85686930a", "name": "Stray `console.log` in TS/JS \u2014 apps/admin/scripts/extract-compose-source.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/scripts/extract-compose-source.ts:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9529c9dbabaaca71", "name": "Stray `console.log` in TS/JS \u2014 apps/admin/scripts/createAdminUser.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/scripts/createAdminUser.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58f4c684fa5d9397", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/AssistantLauncher.tsx:369", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/AssistantLauncher.tsx:369"}, "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-9f50fcc0b4823957", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DeckComposerPanel.tsx:288", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DeckComposerPanel.tsx:288"}, "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-785ce56288dd231f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/FileActions.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/FileActions.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-5f8d7acc443c0bac", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/ThemeEditor.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/ThemeEditor.tsx:237"}, "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-70aa7eaeb2a40197", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/MapPickerModal.tsx:350", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/MapPickerModal.tsx:350"}, "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-3fdb025f0c96c6d7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DemoEditorClient.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DemoEditorClient.tsx:126"}, "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-edcc2c076f99e7d0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/EditorClient.tsx:289", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/EditorClient.tsx:289"}, "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-9927385ddf628449", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/ChartEditorClient.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/ChartEditorClient.tsx:77"}, "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-05123b2f627c252a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/YamlConfigEditor.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/YamlConfigEditor.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-9545e4ead85a7f08", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DraftsList.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DraftsList.tsx:64"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc0c852295965a4a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/NarrationEditor.tsx:343", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/NarrationEditor.tsx:343"}, "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-3d4048e62cad56c8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/AssetsPanel.tsx:201", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/AssetsPanel.tsx:201"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71f57df7da3b1ade", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SharePostRenderPanel.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SharePostRenderPanel.tsx:119"}, "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-1e0ad695fc02b94e", "name": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/components/vizmaya/social/SocialSubTabs.tsx:23", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/components/vizmaya/social/SocialSubTabs.tsx:23"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ee5f5699449c654", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/PostEditForm.tsx:392", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/PostEditForm.tsx:392"}, "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-40b8d81b13e2a055", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SlidesPostRenderPanel.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SlidesPostRenderPanel.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-eb707a74170a7dab", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:217", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:217"}, "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-5a45475f9a1ef5c4", "name": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:143", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:143"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1baaf8689f625ba", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/VideoPostRenderPanel.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/VideoPostRenderPanel.tsx:103"}, "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-7739900dfafd521f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/section/StoriesListClient.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/section/StoriesListClient.tsx:168"}, "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-16fe302dcb3ad71b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/section/StoriesManager.tsx:394", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/section/StoriesManager.tsx:394"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a517e1af0d31c141", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/footshorts/sharecard/ShareCardCanvas.tsx:144", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/footshorts/sharecard/ShareCardCanvas.tsx:144"}, "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-097fe699c439fc69", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:121", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:1215"}, "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-84418721dd89209b", "name": "Icon-only button without accessible name \u2014 apps/admin/components/canvas/ChartEditPanel.tsx:211", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/admin/components/canvas/ChartEditPanel.tsx:211"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2dc217edd1c0f29e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/ImageEditModal.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/ImageEditModal.tsx:191"}, "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-6e105052a856c4cc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/FootballDataModal.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/FootballDataModal.tsx:222"}, "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-fafc78ca11386cea", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/MaterializedSectionCard.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/MaterializedSectionCard.tsx:46"}, "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-0e243abf9ae43ff3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/ComposeFlowPanel.tsx:234", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/ComposeFlowPanel.tsx:234"}, "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-11266e50194124f9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/SourceLibraryModal.tsx:275", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/SourceLibraryModal.tsx:275"}, "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-d850d13a1f6c642c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/ChartCard.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/ChartCard.tsx:37"}, "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-723bec61b372a942", "name": "TODO/FIXME marker in shipping code \u2014 apps/admin/app/api/vizmaya/sign-story-links/route.ts:36", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/admin/app/api/vizmaya/sign-story-links/route.ts:36"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ca1f74c2f3165f9", "name": "Stray `console.log` in TS/JS \u2014 apps/admin/app/api/vizmaya/social/posts/[id]/render-share/route.ts:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/app/api/vizmaya/social/posts/[id]/render-share/route.ts:113"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e26b4df53cb19020", "name": "Stray `console.log` in TS/JS \u2014 apps/admin/app/api/vizmaya/demos/[id]/render-share/route.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/app/api/vizmaya/demos/[id]/render-share/route.ts:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12e8efe98ca51747", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/apps/[slug]/page.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/apps/[slug]/page.tsx:53"}, "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-d69dec8a38170f56", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/apps/page.tsx:26", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/apps/page.tsx:26"}, "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-f186caffaff85b14", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/authors/page.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/authors/page.tsx:34"}, "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-d01299a17efea376", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/epics/page.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/epics/page.tsx:31"}, "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-d6f36ed7dda3fca3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:552", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:552"}, "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-fcc2b477ec692e70", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/wallet-geo/WalletGeoThemePreview.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/wallet-geo/WalletGeoThemePreview.tsx:62"}, "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-0e4be3083d2a409f", "name": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/app/[appSlug]/(tabbed)/recaps/page.tsx:98", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/app/[appSlug]/(tabbed)/recaps/page.tsx:98"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69923622c0234b8b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/[appSlug]/(tabbed)/epics/page.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/[appSlug]/(tabbed)/epics/page.tsx:43"}, "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-82aec2ff5e33adb5", "name": "Stray `console.log` in TS/JS \u2014 packages/eval-entities/src/runner.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/eval-entities/src/runner.ts:48"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0c521fe1a9ce9ba", "name": "Stray `console.log` in TS/JS \u2014 packages/admin-core/src/actionToken.smoke.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/admin-core/src/actionToken.smoke.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fcf4085c1b50645", "name": "Stray `console.log` in TS/JS \u2014 packages/admin-core/src/signedUrl.smoke.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/admin-core/src/signedUrl.smoke.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fa8d40370e99e23", "name": "\"active\" state uses light bg in a dark theme \u2014 packages/admin-core/src/components/AdminTabs.tsx:31", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 packages/admin-core/src/components/AdminTabs.tsx:31"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b96f5ae71c2cd9ec", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/ui/src/grid/StoryGridStyles.tsx:124", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/ui/src/grid/StoryGridStyles.tsx:124"}, "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-b49c45bff1c56098", "name": "Stray `console.log` in TS/JS \u2014 packages/content-source/src/storyAudioGenerate.ts:682", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/content-source/src/storyAudioGenerate.ts:682"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21cada51eaf74837", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/run.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/run.ts:105"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-631d2650c5785f4e", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/dumpPrompts.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/dumpPrompts.ts:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2be6f5c7aba14262", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/recapForeground.test.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/recapForeground.test.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b43ae8bd91dcb55", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/mapStoryGuards.test.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/mapStoryGuards.test.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a915c8271f90af5", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/packs.test.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/packs.test.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ce30f2c1536733a", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/pinRepair.test.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/pinRepair.test.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-980008a70e4d82b4", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/evalOutline.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/evalOutline.ts:126"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e512f424f8299ba3", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/recapGenShapes.test.ts:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/recapGenShapes.test.ts:100"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4eef9a42ce015d7", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/subsections.test.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/subsections.test.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-257444e2be90f155", "name": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/buildSample.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/buildSample.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4a040efa7359a20", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/MatchTile.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/MatchTile.tsx:97"}, "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-3c226799309e60a9", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/StandingsTable.tsx:55", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/StandingsTable.tsx:55"}, "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-0fd14b524c77ad40", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/BracketTree.tsx:587", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/BracketTree.tsx:587"}, "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-969e4fa34a9b0d1a", "name": "TODO/FIXME marker in shipping code \u2014 verticals/footshorts-viz/src/web/BracketTree.tsx:631", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 verticals/footshorts-viz/src/web/BracketTree.tsx:631"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bbcbaf5392baf3ca", "name": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/import-glb.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/import-glb.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43632a7c1ded2ad0", "name": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/convert-starship-assets.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/convert-starship-assets.ts:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c25d26bcd04a616", "name": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/inspect-source-stls.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/inspect-source-stls.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0697324cb0465477", "name": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/inspect-glb.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/inspect-glb.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fb603b3cb39f700", "name": "Stray `console.log` in TS/JS \u2014 verticals/kidzovo-viz/src/index.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verticals/kidzovo-viz/src/index.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-350db5023ce16446", "name": "Stray `console.log` in TS/JS \u2014 verticals/kidzovo-viz/src/__fixtures__/riveInputSchema.test.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verticals/kidzovo-viz/src/__fixtures__/riveInputSchema.test.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db36964a63159562", "name": "TODO/FIXME marker in shipping code \u2014 verticals/f1-viz/src/index.ts:36", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 verticals/f1-viz/src/index.ts:36"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4d072a9cdf4a5f5", "name": "TODO/FIXME marker in shipping code \u2014 verticals/f1-viz/src/types.ts:105", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 verticals/f1-viz/src/types.ts:105"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d98cab67da65e3e7", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/PositionChart.tsx:50", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/PositionChart.tsx:50"}, "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-1e32883aa590fc33", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/DriverStandings.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/DriverStandings.tsx:43"}, "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-ddfb19bfaa881c98", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/RaceRow.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/RaceRow.tsx:53"}, "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-632777e3607967f4", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/replay/DriverToggleList.tsx:115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/replay/DriverToggleList.tsx:115"}, "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-e9f3d3dc58865db2", "name": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/replay/FocusedDriverCard.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/replay/FocusedDriverCard.tsx:65"}, "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-fc4a3cd236a28d9e", "name": "Possible secret in f1_backend/Frontend/src/config/firebase.ts", "shortDescription": {"text": "Possible secret in f1_backend/Frontend/src/config/firebase.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-732927a97a033c45", "name": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/AllStoriesClient.tsx:105", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/AllStoriesClient.tsx:105"}, "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-af33ea4d04252ba9", "name": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/JsonLd.tsx:23", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/JsonLd.tsx:23"}, "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-6499c3d33517932f", "name": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/HomeClient.tsx:391", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/HomeClient.tsx:391"}, "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-44257e70ce3cd205", "name": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/demo/DemoPage.tsx:223", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/demo/DemoPage.tsx:223"}, "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-4aceaab03c813688", "name": "Insecure pattern 'node_child_process' in apps/vizmaya-fyi/lib/storyVideoRender.ts:20", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/vizmaya-fyi/lib/storyVideoRender.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebb5ebc0c5318ff7", "name": "Insecure pattern 'node_child_process' in packages/mcp/src/tools/renderStoryVideo.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/mcp/src/tools/renderStoryVideo.ts:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4997d35f620e94a", "name": "Insecure pattern 'dangerous_innerhtml' in packages/ui/src/grid/StoryGridStyles.tsx:124", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/ui/src/grid/StoryGridStyles.tsx:124"}, "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-d6bb8763ddb456cb", "name": "Insecure pattern 'node_child_process' in packages/content-source/src/storyAudioGenerate.ts:35", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/content-source/src/storyAudioGenerate.ts:35"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d71bbbc397218e8", "name": "Very large file: f1_backend/AI/app/pipelines/telemetry_graph.py (2049 lines)", "shortDescription": {"text": "Very large file: f1_backend/AI/app/pipelines/telemetry_graph.py (2049 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-560b4a48cfa4b606", "name": "Very large file: f1_backend/AI/app/routes/ingest.py (1225 lines)", "shortDescription": {"text": "Very large file: f1_backend/AI/app/routes/ingest.py (1225 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-b21d0b61595f36ae", "name": "Very large file: apps/vizmaya-fyi/components/map-edit/MapEditShell.tsx (1524 lines)", "shortDescription": {"text": "Very large file: apps/vizmaya-fyi/components/map-edit/MapEditShell.tsx (1524 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-ff9fd0bdc8da9201", "name": "Very large file: apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx (1284 lines)", "shortDescription": {"text": "Very large file: apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx (1284 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-01f533e47c8c9b42", "name": "Very large file: apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx (1349 lines)", "shortDescription": {"text": "Very large file: apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx (1349 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-407399e0583ade44", "name": "Very large file: apps/admin/components/canvas/CanvasClient.tsx (4977 lines)", "shortDescription": {"text": "Very large file: apps/admin/components/canvas/CanvasClient.tsx (4977 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "13 test file(s) for 1219 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b1467a2d46057d2", "name": "Node manifest has dependencies but no lockfile: apps/vizf1/brand/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/vizf1/brand/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e422ca11a9a39a47", "name": "Node manifest has dependencies but no lockfile: apps/vizf1/worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/vizf1/worker/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a5cb2d395593363", "name": "Node manifest has dependencies but no lockfile: apps/vizf1/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/vizf1/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26ef93114638c40f", "name": "Node manifest has dependencies but no lockfile: apps/kidzovo/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/kidzovo/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61f1ebc8bd817a98", "name": "Node manifest has dependencies but no lockfile: apps/catalog/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/catalog/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34b6e10a474d80c9", "name": "Node manifest has dependencies but no lockfile: apps/footshorts/brand/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/brand/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1a9a8d8c9919545", "name": "Node manifest has dependencies but no lockfile: apps/footshorts/shared/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/shared/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-081b7d4df7a66238", "name": "Node manifest has dependencies but no lockfile: apps/footshorts/worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/worker/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a30c47ff0da6f7e8", "name": "Node manifest has dependencies but no lockfile: apps/footshorts/mobile/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/mobile/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9e871cae377e9f0", "name": "Node manifest has dependencies but no lockfile: apps/footshorts/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac995121dee32f35", "name": "Node manifest has dependencies but no lockfile: apps/vizmaya-fyi/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/vizmaya-fyi/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c30f715681a4005", "name": "Node manifest has dependencies but no lockfile: apps/admin/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/admin/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52a9d70913546778", "name": "Node manifest has dependencies but no lockfile: packages/story-reader/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/story-reader/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6055a25046540cbc", "name": "Node manifest has dependencies but no lockfile: packages/eval-entities/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/eval-entities/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e20fb9513afe363f", "name": "Node manifest has dependencies but no lockfile: packages/admin-core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/admin-core/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9c03e4b51641936", "name": "Node manifest has dependencies but no lockfile: packages/mcp/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/mcp/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-209ffc0ce582f80f", "name": "Node manifest has dependencies but no lockfile: packages/story-embed/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/story-embed/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2d6ddb5772eeb54", "name": "Node manifest has dependencies but no lockfile: packages/viz-engine/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/viz-engine/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23030c4e1f1f245c", "name": "Node manifest has dependencies but no lockfile: packages/content-source/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/content-source/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11b0da057f17c055", "name": "Node manifest has dependencies but no lockfile: packages/verticals/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/verticals/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9b79a1dd2898980", "name": "Node manifest has dependencies but no lockfile: packages/ai-gateway/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ai-gateway/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d9d621191281d04", "name": "Node manifest has dependencies but no lockfile: packages/viz-admin/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/viz-admin/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dabdff6f1141eb31", "name": "Node manifest has dependencies but no lockfile: packages/story-pipeline/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/story-pipeline/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d86c43d91fe52ee", "name": "Node manifest has dependencies but no lockfile: verticals/footshorts-viz/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: verticals/footshorts-viz/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1afa1239f472da09", "name": "Node manifest has dependencies but no lockfile: verticals/starship-viz/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: verticals/starship-viz/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f380abc85e3fa493", "name": "Node manifest has dependencies but no lockfile: verticals/kidzovo-viz/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: verticals/kidzovo-viz/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2bcedb8f78413901", "name": "Node manifest has dependencies but no lockfile: verticals/f1-viz/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: verticals/f1-viz/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 512 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 229 placeholder/mock markers across 86 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bc56ab88643e075", "name": "Agent authority lacks a verifier contract: apps/vizmaya-fyi/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: apps/vizmaya-fyi/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-672a67dcfc528d58", "name": "Agent authority lacks a verifier contract: apps/vizmaya-fyi/.claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: apps/vizmaya-fyi/.claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1cff612762882acb", "name": "Commented-code block (5 lines) in f1_backend/AI/app/main.py:347", "shortDescription": {"text": "Commented-code block (5 lines) in f1_backend/AI/app/main.py:347"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eae8532fd82dc0eb", "name": "Commented-code block (5 lines) in f1_backend/AI/app/pipelines/story_crew.py:228", "shortDescription": {"text": "Commented-code block (5 lines) in f1_backend/AI/app/pipelines/story_crew.py:228"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67db48d255b859d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/RunsPanel.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/RunsPanel.tsx:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11c8226287a21bc2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/WorkflowPanel.tsx:523", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/WorkflowPanel.tsx:523"}, "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-19d1e7a43366c942", "name": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/shared.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/shared.tsx:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35e36abf4bc5f322", "name": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/contexts/AuthContext.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/contexts/AuthContext.tsx:71"}, "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-c915d0486ff2d5d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizf1/worker/src/openf1.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizf1/worker/src/openf1.ts:40"}, "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-4a32a720d667a396", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizf1/worker/src/captureReplayFixture.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizf1/worker/src/captureReplayFixture.ts:46"}, "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-a6de9eadff0bb018", "name": "Commented-code block (5 lines) in apps/vizf1/web/components/RaceCardExpandable.tsx:58", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizf1/web/components/RaceCardExpandable.tsx:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d76d3523dea6b092", "name": "Commented-code block (6 lines) in apps/vizf1/web/lib/useFollowedEntities.ts:30", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizf1/web/lib/useFollowedEntities.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96dda91fa3850c8d", "name": "Commented-code block (5 lines) in apps/catalog/components/ModuleCard.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in apps/catalog/components/ModuleCard.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-cdb29128c758c711", "name": "Commented-code block (5 lines) in apps/footshorts/shared/src/editorial.ts:132", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/shared/src/editorial.ts:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc543fc895f9aff6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/backfillColors.ts:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/backfillColors.ts:122"}, "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-1c2d33f06fa2d357", "name": "Commented-code block (6 lines) in apps/footshorts/worker/src/recap.ts:503", "shortDescription": {"text": "Commented-code block (6 lines) in apps/footshorts/worker/src/recap.ts:503"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ac8823dcd8cd259", "name": "Commented-code block (6 lines) in apps/footshorts/worker/src/fixtures.ts:218", "shortDescription": {"text": "Commented-code block (6 lines) in apps/footshorts/worker/src/fixtures.ts:218"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95d3a6e9b96c1b34", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/fixtures.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/fixtures.ts:32"}, "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-846c6fe7662ca10d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/seed.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/seed.ts:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-82e15432b19ce86c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/scores.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/scores.ts:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9a1f24313b472151", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/squads/adapters/press-release.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/squads/adapters/press-release.ts:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54313be81e94370a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/squads/adapters/wikipedia.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/squads/adapters/wikipedia.ts:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9456284fda1f933a", "name": "Commented-code block (5 lines) in apps/footshorts/mobile/tailwind.config.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/tailwind.config.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7874ff1a10955248", "name": "Commented-code block (6 lines) in apps/footshorts/mobile/babel-plugins/skip-codegen-for-screens.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/footshorts/mobile/babel-plugins/skip-codegen-for-screens.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8be25f8b3e88a148", "name": "Commented-code block (5 lines) in apps/footshorts/mobile/src/components/AuraBackground.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/components/AuraBackground.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-90fafa9a8da5e509", "name": "Commented-code block (5 lines) in apps/footshorts/mobile/src/components/ForYouMatchFeed.tsx:745", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/components/ForYouMatchFeed.tsx:745"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0d51b288280bfef", "name": "Commented-code block (5 lines) in apps/footshorts/mobile/src/lib/useFollowedFixtures.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/lib/useFollowedFixtures.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bbe96bec8164478", "name": "Commented-code block (5 lines) in apps/footshorts/mobile/src/lib/useEntities.ts:32", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/lib/useEntities.ts:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2603f9d75c3e3344", "name": "Commented-code block (5 lines) in apps/footshorts/web/components/fifa-wc26/FifaWc26Landing.tsx:314", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/web/components/fifa-wc26/FifaWc26Landing.tsx:314"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c81971b30ec7ab9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/web/components/fifa-wc26/FifaWc26EpicLanding.tsx:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/web/components/fifa-wc26/FifaWc26EpicLanding.tsx:14"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1626184cc71f680f", "name": "Commented-code block (5 lines) in apps/footshorts/web/components/ForYouMatchFeed/FixturesBlock.tsx:35", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/web/components/ForYouMatchFeed/FixturesBlock.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ed9b5fe2d605bd0", "name": "Commented-code block (6 lines) in apps/footshorts/web/components/ForYouMatchFeed/CardShell.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/footshorts/web/components/ForYouMatchFeed/CardShell.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-dfbcd7f325b96b32", "name": "Commented-code block (6 lines) in apps/footshorts/web/app/onboarding/leagues/page.tsx:32", "shortDescription": {"text": "Commented-code block (6 lines) in apps/footshorts/web/app/onboarding/leagues/page.tsx:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67c4abd19c8f67c1", "name": "Commented-code block (5 lines) in apps/footshorts/web/lib/useFollowedFixtures.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/useFollowedFixtures.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31d61850298a2e83", "name": "Commented-code block (6 lines) in apps/footshorts/web/lib/useEntities.ts:39", "shortDescription": {"text": "Commented-code block (6 lines) in apps/footshorts/web/lib/useEntities.ts: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-5a9a0b4daea786ca", "name": "Commented-code block (5 lines) in apps/footshorts/web/lib/fifaWc26.ts:182", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/fifaWc26.ts:182"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14a9f256cf7af982", "name": "Commented-code block (5 lines) in apps/footshorts/web/lib/AuthModalProvider.tsx:71", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/AuthModalProvider.tsx:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f97bbec222ec2be2", "name": "Commented-code block (5 lines) in apps/footshorts/web/lib/storyboards/carrick-united.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/storyboards/carrick-united.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-d4e10a9572314502", "name": "Commented-code block (5 lines) in apps/footshorts/web/lib/storyboards/types.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/storyboards/types.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-c122323120191598", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/next.config.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/next.config.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63c163905c938cd6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/ingest.ts:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/ingest.ts:111"}, "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-311426d3ec361dec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/crawl.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/crawl.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-50b114af68f073aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/debug-ocr.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/debug-ocr.ts:8"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8eba17133f457276", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/energy-profile/scrape-news.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/energy-profile/scrape-news.ts:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a485283575d1b8ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-owid.ts:131", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-owid.ts:131"}, "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-99bf72547e2d96f3", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/scripts/coke-studio/import.ts:231", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/scripts/coke-studio/import.ts:231"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98159fb5801d25f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/fetch-lyrics.ts:178", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/fetch-lyrics.ts:178"}, "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-fb54cfbcca8296fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/lyricstranslate.ts:131", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/lyricstranslate.ts:131"}, "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-b0af34ebd4c027b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/genius.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/genius.ts:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4c4145214999c2c", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/scripts/coke-studio/sources/utils.ts:65", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/scripts/coke-studio/sources/utils.ts:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41a13647bcf835ac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/utils.ts:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/utils.ts:100"}, "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-2680fbce70cca62d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/youtube.ts:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/youtube.ts:227"}, "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-dee5f251d1ecc733", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/types.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/types.ts:49"}, "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-269fbfe1fede4dda", "name": "Commented-code block (8 lines) in apps/vizmaya-fyi/components/HomeClient.tsx:303", "shortDescription": {"text": "Commented-code block (8 lines) in apps/vizmaya-fyi/components/HomeClient.tsx:303"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c41667244f7ca57", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/demo/StoryPreview.tsx:229", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/demo/StoryPreview.tsx:229"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2202975be95125f", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/share/ShareDeckForeground.tsx:180", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/share/ShareDeckForeground.tsx:180"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06c1d23d4e39c2b3", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareShell.tsx:82", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareShell.tsx:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-678f9a2deca950ca", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareMapBg.tsx:18", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareMapBg.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-297975ee1d872f2c", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx:107", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef220af460f30025", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareCard.tsx:166", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareCard.tsx:166"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7555182aae19f182", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:414", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:414"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d180197bd67114e8", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/pdf/SlidesShell.tsx:94", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/pdf/SlidesShell.tsx:94"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fb727738b81c6cf", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/pdf/ReportShell.tsx:83", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/pdf/ReportShell.tsx:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03842ef6619c9a26", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/autoplay/AutoplayMapEditor.tsx:216", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/autoplay/AutoplayMapEditor.tsx:216"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b30b1ccacb10e34", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/autoplay/AutoplayShell.tsx:127", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/autoplay/AutoplayShell.tsx:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-118e2cad028b73b3", "name": "Commented-code block (9 lines) in apps/vizmaya-fyi/app/demo/[clientSlug]/page.tsx:35", "shortDescription": {"text": "Commented-code block (9 lines) in apps/vizmaya-fyi/app/demo/[clientSlug]/page.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f76809fe0d139c00", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/theme-preview/page.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/theme-preview/page.tsx:134"}, "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-4903d7733a5f4fc2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/api/mapbox-bg/route.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/api/mapbox-bg/route.ts:24"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c90c581f6010441d", "name": "Commented-code block (7 lines) in apps/vizmaya-fyi/app/api/story-video/[slug]/route.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in apps/vizmaya-fyi/app/api/story-video/[slug]/route.ts: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-10565948397f3bef", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/api/story-pdf/[slug]/route.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/api/story-pdf/[slug]/route.ts: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-f0913dc989c09de3", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/api/coke-studio/place/[canonical]/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/api/coke-studio/place/[canonical]/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98fc9046f322a5d6", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/epstein/page.tsx:146", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/epstein/page.tsx:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2d3e435efe41616", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-adc9f403369afdcb", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/app/reports/[slug]/page.tsx:62", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/app/reports/[slug]/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-156f287972b924a4", "name": "Commented-code block (7 lines) in apps/vizmaya-fyi/app/energy-profile/EnergyProfileLanding.tsx:85", "shortDescription": {"text": "Commented-code block (7 lines) in apps/vizmaya-fyi/app/energy-profile/EnergyProfileLanding.tsx:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8022776a900e708c", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/story/[slug]/page.tsx:98", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/story/[slug]/page.tsx:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a0acba4353b51a1", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/app/story/[slug]/canvas-frame/[id]/page.tsx:70", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/app/story/[slug]/canvas-frame/[id]/page.tsx:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc5e2546a6d997e8", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/story/[slug]/autoplay/page.tsx:58", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/story/[slug]/autoplay/page.tsx:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d71c7cf5d4df3020", "name": "Commented-code block (7 lines) in apps/vizmaya-fyi/lib/storyReportConfig.ts:322", "shortDescription": {"text": "Commented-code block (7 lines) in apps/vizmaya-fyi/lib/storyReportConfig.ts:322"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-524c28391d1d0b85", "name": "Commented-code block (8 lines) in apps/vizmaya-fyi/lib/storyPdfRender.ts:60", "shortDescription": {"text": "Commented-code block (8 lines) in apps/vizmaya-fyi/lib/storyPdfRender.ts:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1457848bd7ee765e", "name": "Commented-code block (6 lines) in apps/vizmaya-fyi/lib/storyVideoRender.ts:185", "shortDescription": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/lib/storyVideoRender.ts:185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d8b795783ff8e6b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/lib/storyVideoRender.ts:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/lib/storyVideoRender.ts:103"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d1de6203187eb6da", "name": "Commented-code block (5 lines) in apps/vizmaya-fyi/lib/wallet-geo/countries.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/lib/wallet-geo/countries.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-155b4cb1d3045ec3", "name": "Commented-code block (6 lines) in apps/admin/middleware.ts:74", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/middleware.ts:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-872213a2bbcfe28a", "name": "Commented-code block (6 lines) in apps/admin/next.config.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/next.config.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-1dc00422ca4f6861", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/DemosListClient.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/DemosListClient.tsx:49"}, "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-d14028c0b4ef866f", "name": "Commented-code block (6 lines) in apps/admin/components/vizmaya/MapPickerModal.tsx:108", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/components/vizmaya/MapPickerModal.tsx:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-637ea6c272314004", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/EditorClient.tsx:510", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/EditorClient.tsx:510"}, "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-7889e3bd95cd211d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/social/PostEditForm.tsx:143", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/social/PostEditForm.tsx:143"}, "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-eebb6d7e633be7d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bca15b5919e7007a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/section/StoriesListClient.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/section/StoriesListClient.tsx:59"}, "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-41e4db54d62676b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/section/StoriesManager.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/section/StoriesManager.tsx:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edc93e7a1d53e875", "name": "Commented-code block (6 lines) in apps/admin/components/footshorts/sharecard/useCapture.ts:40", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/components/footshorts/sharecard/useCapture.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41f9a46f0630f728", "name": "Commented-code block (5 lines) in apps/admin/components/canvas/canvasEditing.ts:47", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/canvasEditing.ts:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c95cc975f7fff7a2", "name": "Commented-code block (5 lines) in apps/admin/components/canvas/canvasSlotAdd.ts:261", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/canvasSlotAdd.ts:261"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf9923da9a1e273e", "name": "Commented-code block (5 lines) in apps/admin/components/canvas/FixPanel.tsx:86", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/FixPanel.tsx:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-034341879e68edc8", "name": "Commented-code block (5 lines) in apps/admin/components/canvas/ImageEditModal.tsx:93", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/ImageEditModal.tsx:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-059f2aeb4ffbc149", "name": "Commented-code block (8 lines) in apps/admin/components/canvas/EditorPanel.tsx:78", "shortDescription": {"text": "Commented-code block (8 lines) in apps/admin/components/canvas/EditorPanel.tsx:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ebb80f8b55cd6e5", "name": "Commented-code block (7 lines) in apps/admin/components/canvas/canvasInputs.ts:286", "shortDescription": {"text": "Commented-code block (7 lines) in apps/admin/components/canvas/canvasInputs.ts:286"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a83bdaf1962ff06c", "name": "Commented-code block (6 lines) in apps/admin/components/canvas/CanvasClient.tsx:329", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/components/canvas/CanvasClient.tsx:329"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1268e72c38b841a5", "name": "Commented-code block (6 lines) in apps/admin/components/canvas/CanvasPage.tsx:52", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/components/canvas/CanvasPage.tsx:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5510c4ad370947ee", "name": "Commented-code block (6 lines) in apps/admin/components/canvas/compose/useComposeFlow.ts:475", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/components/canvas/compose/useComposeFlow.ts:475"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bc0431497fc8860", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/api/footshorts/share/proxy-image/route.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/api/footshorts/share/proxy-image/route.ts:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ad08f604630ca2d", "name": "Commented-code block (8 lines) in apps/admin/app/api/stories/[slug]/route.ts:103", "shortDescription": {"text": "Commented-code block (8 lines) in apps/admin/app/api/stories/[slug]/route.ts:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b115c6de855baaf6", "name": "Commented-code block (5 lines) in apps/admin/app/api/stories/[slug]/canvas/compose/section/route.ts:234", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/app/api/stories/[slug]/canvas/compose/section/route.ts:234"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04a9b1f008934ba5", "name": "Commented-code block (9 lines) in apps/admin/app/api/stories/[slug]/canvas/compose/materialize/route.ts:55", "shortDescription": {"text": "Commented-code block (9 lines) in apps/admin/app/api/stories/[slug]/canvas/compose/materialize/route.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20e8af3d95f1eea3", "name": "Commented-code block (6 lines) in apps/admin/app/api/stories/[slug]/canvas/generate/route.ts:107", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/app/api/stories/[slug]/canvas/generate/route.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-178197867b544140", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:100"}, "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-34ff170f90f24729", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:123"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f872ba61d7d5198", "name": "Commented-code block (5 lines) in apps/admin/app/[appSlug]/(tabbed)/page.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/app/[appSlug]/(tabbed)/page.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-62a707d0e28c5e47", "name": "Commented-code block (5 lines) in apps/admin/lib/publicSite.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/lib/publicSite.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4256ae7c10cce51", "name": "Commented-code block (5 lines) in apps/admin/lib/supabaseServer.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in apps/admin/lib/supabaseServer.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba1f2aaca6a6b6d6", "name": "Commented-code block (6 lines) in apps/admin/lib/vizmayaModuleTypes.ts:22", "shortDescription": {"text": "Commented-code block (6 lines) in apps/admin/lib/vizmayaModuleTypes.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0a5e8e905c91c87", "name": "Commented-code block (5 lines) in packages/story-reader/src/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/story-reader/src/index.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-cf683f0628b3fb82", "name": "Commented-code block (5 lines) in packages/story-reader/src/components/story/StoryShell.tsx:135", "shortDescription": {"text": "Commented-code block (5 lines) in packages/story-reader/src/components/story/StoryShell.tsx:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-add3181a09978401", "name": "Commented-code block (5 lines) in packages/story-reader/src/components/story/DeckProgress.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in packages/story-reader/src/components/story/DeckProgress.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-cb614c0a73f9b0b8", "name": "Commented-code block (5 lines) in packages/story-reader/src/components/story/MapStorySection.tsx:132", "shortDescription": {"text": "Commented-code block (5 lines) in packages/story-reader/src/components/story/MapStorySection.tsx:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e43fcd6ef20accef", "name": "Commented-code block (6 lines) in packages/story-reader/src/components/story/ClientECharts.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in packages/story-reader/src/components/story/ClientECharts.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-e687f74b729639dc", "name": "Commented-code block (11 lines) in packages/story-reader/src/components/story/ThemeProvider.tsx:74", "shortDescription": {"text": "Commented-code block (11 lines) in packages/story-reader/src/components/story/ThemeProvider.tsx:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a0b036af54b6894", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/middleware.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/middleware.ts:21"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-063819717b2cd55d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/components/LogoutButton.tsx:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/components/LogoutButton.tsx:27"}, "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-daa2affd1889e26b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/components/LoginForm.tsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/components/LoginForm.tsx:28"}, "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-a6b249a5001dd74e", "name": "Commented-code block (5 lines) in packages/viz-engine/src/ForegroundVizSlot.tsx:117", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/ForegroundVizSlot.tsx:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fecfec4835012383", "name": "Commented-code block (8 lines) in packages/viz-engine/src/ForegroundLayoutSlot.tsx:102", "shortDescription": {"text": "Commented-code block (8 lines) in packages/viz-engine/src/ForegroundLayoutSlot.tsx:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bee53bde057b8f6", "name": "Commented-code block (5 lines) in packages/viz-engine/src/BackgroundVizSlot.tsx:220", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/BackgroundVizSlot.tsx:220"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78927132648f36f4", "name": "Commented-code block (5 lines) in packages/viz-engine/src/foregroundLayouts.ts:228", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/foregroundLayouts.ts:228"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf31c8bfdd2c0f63", "name": "Commented-code block (7 lines) in packages/viz-engine/src/charts/GenericChart.tsx:139", "shortDescription": {"text": "Commented-code block (7 lines) in packages/viz-engine/src/charts/GenericChart.tsx:139"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb192adf63ed23a7", "name": "Commented-code block (9 lines) in packages/viz-engine/src/charts/StoryEChart.tsx:74", "shortDescription": {"text": "Commented-code block (9 lines) in packages/viz-engine/src/charts/StoryEChart.tsx:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf3be4a8437b6cb9", "name": "Commented-code block (6 lines) in packages/viz-engine/src/charts/MapboxBackground.tsx:561", "shortDescription": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/charts/MapboxBackground.tsx:561"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-45c57ef1c54e22e1", "name": "Commented-code block (5 lines) in packages/viz-engine/src/lib/logoPalette.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/lib/logoPalette.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-0b8be5f4820fd0e9", "name": "Commented-code block (9 lines) in packages/viz-engine/src/lib/yamlMapPatch.ts:209", "shortDescription": {"text": "Commented-code block (9 lines) in packages/viz-engine/src/lib/yamlMapPatch.ts:209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58e20019da2e29a6", "name": "Commented-code block (6 lines) in packages/viz-engine/src/lib/storyReadiness.ts:36", "shortDescription": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/lib/storyReadiness.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a93d5d554ee98ab2", "name": "Commented-code block (7 lines) in packages/viz-engine/src/lib/resolveSlots.ts:125", "shortDescription": {"text": "Commented-code block (7 lines) in packages/viz-engine/src/lib/resolveSlots.ts:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4cdbef2ad53f090", "name": "Commented-code block (5 lines) in packages/viz-engine/src/modules/rive/Component.tsx:269", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/rive/Component.tsx:269"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0eac8214aa53cb8", "name": "Commented-code block (5 lines) in packages/viz-engine/src/modules/image/index.ts:47", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/image/index.ts:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-78ed68b17615e6f0", "name": "Commented-code block (5 lines) in packages/viz-engine/src/modules/image/Component.tsx:29", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/image/Component.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-283f82db824d667d", "name": "Commented-code block (6 lines) in packages/viz-engine/src/modules/bigStat/Component.tsx:84", "shortDescription": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/modules/bigStat/Component.tsx:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ddbf8a180af1020", "name": "Commented-code block (6 lines) in packages/viz-engine/src/modules/chart/Component.tsx:21", "shortDescription": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/modules/chart/Component.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-bdd9b74ba7a539dd", "name": "Commented-code block (6 lines) in packages/viz-engine/src/modules/map/index.ts:78", "shortDescription": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/modules/map/index.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37c5374987b2a4fe", "name": "Commented-code block (8 lines) in packages/viz-engine/src/modules/map/PersistentComponent.tsx:77", "shortDescription": {"text": "Commented-code block (8 lines) in packages/viz-engine/src/modules/map/PersistentComponent.tsx:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdc96018225a7ca1", "name": "Commented-code block (5 lines) in packages/viz-engine/src/modules/video/Component.tsx:52", "shortDescription": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/video/Component.tsx:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4e00d4abd0cf755", "name": "Commented-code block (7 lines) in packages/content-source/src/resolveUnits.ts:198", "shortDescription": {"text": "Commented-code block (7 lines) in packages/content-source/src/resolveUnits.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4046e3068afa16b", "name": "Commented-code block (5 lines) in packages/content-source/src/usePollVideoRender.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in packages/content-source/src/usePollVideoRender.ts: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-3bdea4aa077ea9d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyAudioDispatch.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyAudioDispatch.ts:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4db238e4c70452ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyVideoDispatch.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyVideoDispatch.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d9c22885f2e381c", "name": "Commented-code block (5 lines) in packages/content-source/src/storyTts.ts:105", "shortDescription": {"text": "Commented-code block (5 lines) in packages/content-source/src/storyTts.ts:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc024c7f0761ee8a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyShareDispatch.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyShareDispatch.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58b69a7bf63b5d17", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/recapDispatch.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/recapDispatch.ts:43"}, "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-e379dc87c6c963e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/heygenTemplateDispatch.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/heygenTemplateDispatch.ts:56"}, "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-499a3ddb948ae76a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyPdfDispatch.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyPdfDispatch.ts:43"}, "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-87c276996e181223", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/heygenTemplate.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/heygenTemplate.ts:79"}, "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-69936bb9af407a51", "name": "Commented-code block (6 lines) in packages/content-source/src/storyConfig.ts:138", "shortDescription": {"text": "Commented-code block (6 lines) in packages/content-source/src/storyConfig.ts:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0abf7a4b79273e7a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/footshortsData.ts:255", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/footshortsData.ts:255"}, "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-a87782670fb491c2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storySourceExtractDispatch.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storySourceExtractDispatch.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e50c228fbf6c2b8", "name": "Commented-code block (5 lines) in packages/content-source/src/contentSource.ts:114", "shortDescription": {"text": "Commented-code block (5 lines) in packages/content-source/src/contentSource.ts:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a027fa55584d2ba4", "name": "Legacy-named symbol `previewLegacy` in packages/content-source/src/handlers/storyVideo.ts:109", "shortDescription": {"text": "Legacy-named symbol `previewLegacy` in packages/content-source/src/handlers/storyVideo.ts:109"}, "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-1f0fd41da4ccd308", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ai-gateway/src/client.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ai-gateway/src/client.ts:48"}, "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-e5a3464aa0d2988d", "name": "Commented-code block (6 lines) in packages/story-pipeline/src/ai.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in packages/story-pipeline/src/ai.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7e6c45118d8d08c", "name": "Commented-code block (6 lines) in packages/story-pipeline/src/schema.ts:205", "shortDescription": {"text": "Commented-code block (6 lines) in packages/story-pipeline/src/schema.ts:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-644d55b272491a75", "name": "Commented-code block (6 lines) in packages/story-pipeline/src/lintLayout.ts:174", "shortDescription": {"text": "Commented-code block (6 lines) in packages/story-pipeline/src/lintLayout.ts:174"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-315dc41a074302b4", "name": "Commented-code block (5 lines) in packages/story-pipeline/src/cover.ts:143", "shortDescription": {"text": "Commented-code block (5 lines) in packages/story-pipeline/src/cover.ts:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb7f645d57e7b01c", "name": "Commented-code block (5 lines) in packages/story-pipeline/src/validate.ts:98", "shortDescription": {"text": "Commented-code block (5 lines) in packages/story-pipeline/src/validate.ts:98"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-779c31dcc148b70c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/story-pipeline/src/ingest/index.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/story-pipeline/src/ingest/index.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe93a8356e1d5a6a", "name": "Commented-code block (5 lines) in packages/story-pipeline/src/viz-engine-stubs/genSchema.d.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/story-pipeline/src/viz-engine-stubs/genSchema.d.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-819b7c0480d49f31", "name": "Commented-code block (6 lines) in verticals/footshorts-viz/src/modules/standings-over-matchdays/Component.tsx:18", "shortDescription": {"text": "Commented-code block (6 lines) in verticals/footshorts-viz/src/modules/standings-over-matchdays/Component.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-132fa1205578faa6", "name": "Commented-code block (5 lines) in verticals/footshorts-viz/src/modules/standings-over-matchdays/sample.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in verticals/footshorts-viz/src/modules/standings-over-matchdays/sample.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56f62489cf3b4692", "name": "Commented-code block (7 lines) in verticals/footshorts-viz/src/web/MatchRow.tsx:64", "shortDescription": {"text": "Commented-code block (7 lines) in verticals/footshorts-viz/src/web/MatchRow.tsx: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-796ed59347fabf9a", "name": "Commented-code block (6 lines) in verticals/footshorts-viz/src/web/StandingsOverMatchdays.tsx:77", "shortDescription": {"text": "Commented-code block (6 lines) in verticals/footshorts-viz/src/web/StandingsOverMatchdays.tsx:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53b19a8ee84e6868", "name": "Commented-code block (5 lines) in verticals/footshorts-viz/src/web/StandingsTable.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in verticals/footshorts-viz/src/web/StandingsTable.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-fa5a4e3cf751e7e1", "name": "Commented-code block (7 lines) in verticals/footshorts-viz/src/web/BracketTree.tsx:406", "shortDescription": {"text": "Commented-code block (7 lines) in verticals/footshorts-viz/src/web/BracketTree.tsx:406"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4427da0354b22da5", "name": "Commented-code block (5 lines) in verticals/footshorts-viz/src/native/MatchRow.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in verticals/footshorts-viz/src/native/MatchRow.tsx: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-25e84ae9be11a340", "name": "Commented-code block (7 lines) in verticals/starship-viz/scripts/import-glb.ts:75", "shortDescription": {"text": "Commented-code block (7 lines) in verticals/starship-viz/scripts/import-glb.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58638f2b84b23031", "name": "Commented-code block (5 lines) in verticals/starship-viz/scripts/convert-starship-assets.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in verticals/starship-viz/scripts/convert-starship-assets.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe28309d7c0d5573", "name": "Commented-code block (5 lines) in verticals/starship-viz/src/modules/starship/Component.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in verticals/starship-viz/src/modules/starship/Component.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db17aaa6c9ce159c", "name": "Commented-code block (7 lines) in verticals/starship-viz/src/web/StarshipScene.tsx:283", "shortDescription": {"text": "Commented-code block (7 lines) in verticals/starship-viz/src/web/StarshipScene.tsx:283"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8d1b0a8144dde9c", "name": "Commented-code block (5 lines) in verticals/kidzovo-viz/src/modules/character/index.ts:112", "shortDescription": {"text": "Commented-code block (5 lines) in verticals/kidzovo-viz/src/modules/character/index.ts:112"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-817a96c946f4f9d9", "name": "Commented-code block (5 lines) in verticals/kidzovo-viz/src/modules/character/Component.tsx:142", "shortDescription": {"text": "Commented-code block (5 lines) in verticals/kidzovo-viz/src/modules/character/Component.tsx:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12b6a2edef42e2e5", "name": "75 env vars used in code but missing from .env.example", "shortDescription": {"text": "75 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_ALLOWED_EMAILS`, `ADMIN_COOKIE_DOMAIN`, `ADMIN_PASSWORD`, `ADMIN_SESSION_SECRET`, `AI_GATEWAY_API_KEY`, `AI_GATEWAY_TIMEOUT_MS`, `ANTHROPIC_API_KEY`, `BASE_URL` + 67 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nf1_backend/AI/app/pipelines/story_crew.py:build_story_crew, f1_backend/AI/app/pipelines/story_crew.py:run_story_crew\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6df46b275bfea24", "name": "FastAPI POST `run_telemetry_analysis` without auth dependency \u2014 f1_backend/AI/app/main.py:505", "shortDescription": {"text": "FastAPI POST `run_telemetry_analysis` without auth dependency \u2014 f1_backend/AI/app/main.py:505"}, "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-0296223c3060c10d", "name": "FastAPI POST `run_angle_discovery` without auth dependency \u2014 f1_backend/AI/app/main.py:523", "shortDescription": {"text": "FastAPI POST `run_angle_discovery` without auth dependency \u2014 f1_backend/AI/app/main.py:523"}, "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-b1f18743ddf41e38", "name": "FastAPI POST `run_story_generation` without auth dependency \u2014 f1_backend/AI/app/main.py:541", "shortDescription": {"text": "FastAPI POST `run_story_generation` without auth dependency \u2014 f1_backend/AI/app/main.py:541"}, "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-364366217623575f", "name": "FastAPI POST `ingest_session` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:950", "shortDescription": {"text": "FastAPI POST `ingest_session` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:950"}, "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-4ae993d38021c0aa", "name": "FastAPI POST `enrich_only` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:1126", "shortDescription": {"text": "FastAPI POST `enrich_only` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:1126"}, "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-6e38909e1cea2619", "name": "FastAPI POST `enrich_positions` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:1147", "shortDescription": {"text": "FastAPI POST `enrich_positions` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:1147"}, "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-3763a1226d85bfbb", "name": "Dangling fetch: POST /api/demo/${clientSlug}/auth (apps/vizmaya-fyi/components/demo/DemoLoginForm.tsx:21)", "shortDescription": {"text": "Dangling fetch: POST /api/demo/${clientSlug}/auth (apps/vizmaya-fyi/components/demo/DemoLoginForm.tsx:21)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/components/demo/DemoLoginForm.tsx:21` calls `POST /api/demo/${clientSlug}/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/demo/<p>/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed2ca6cf3c9a94ca", "name": "Dangling fetch: GET /api/story-pdf/${storySlug}?format=${format} (apps/vizmaya-fyi/components/demo/PdfGallery.tsx:99)", "shortDescription": {"text": "Dangling fetch: GET /api/story-pdf/${storySlug}?format=${format} (apps/vizmaya-fyi/components/demo/PdfGallery.tsx:99)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/components/demo/PdfGallery.tsx:99` calls `GET /api/story-pdf/${storySlug}?format=${format}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/story-pdf/<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-f71206e928b4d600", "name": "Dangling fetch: GET /api/stories/configs (apps/vizmaya-fyi/components/map-edit/MapEditShell.tsx:996)", "shortDescription": {"text": "Dangling fetch: GET /api/stories/configs (apps/vizmaya-fyi/components/map-edit/MapEditShell.tsx:996)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/components/map-edit/MapEditShell.tsx:996` calls `GET /api/stories/configs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/configs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3cd10a54e1892d47", "name": "Dangling fetch: POST /api/story-report-config/${slug} (apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:404)", "shortDescription": {"text": "Dangling fetch: POST /api/story-report-config/${slug} (apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:404)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:404` calls `POST /api/story-report-config/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/story-report-config/<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-5d7ad6d674ab8dac", "name": "Dangling fetch: GET /api/stories/themes (apps/vizmaya-fyi/app/theme-preview/page.tsx:134)", "shortDescription": {"text": "Dangling fetch: GET /api/stories/themes (apps/vizmaya-fyi/app/theme-preview/page.tsx:134)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/app/theme-preview/page.tsx:134` calls `GET /api/stories/themes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/themes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d7e2f067cc86725", "name": "Dangling fetch: GET /api/epstein/curated/airport/${encodeURIComponent(iata)} (apps/vizmaya-fyi/app/epstein/AirportDetail", "shortDescription": {"text": "Dangling fetch: GET /api/epstein/curated/airport/${encodeURIComponent(iata)} (apps/vizmaya-fyi/app/epstein/AirportDetail.tsx:54)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/app/epstein/AirportDetail.tsx:54` calls `GET /api/epstein/curated/airport/${encodeURIComponent(iata)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/epstein/curated/airport/<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-ebe30ec976568f07", "name": "Dangling fetch: GET /api/epstein/curated/person/${encodeURIComponent(personId)} (apps/vizmaya-fyi/app/epstein/PersonDeta", "shortDescription": {"text": "Dangling fetch: GET /api/epstein/curated/person/${encodeURIComponent(personId)} (apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:72)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:72` calls `GET /api/epstein/curated/person/${encodeURIComponent(personId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/epstein/curated/person/<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-62c774f5faf1f520", "name": "Dangling fetch: GET /api/epstein/curated/blackbook/${encodeURIComponent(String(blackbookId))} (apps/vizmaya-fyi/app/epst", "shortDescription": {"text": "Dangling fetch: GET /api/epstein/curated/blackbook/${encodeURIComponent(String(blackbookId))} (apps/vizmaya-fyi/app/epstein/BlackbookDetail.tsx:47)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/app/epstein/BlackbookDetail.tsx:47` calls `GET /api/epstein/curated/blackbook/${encodeURIComponent(String(blackbookId))}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/epstein/curated/blackbook/<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-5fb53b2727aa9555", "name": "Dangling fetch: GET /api/wallet-geo/country/${encodeURIComponent(code)} (apps/vizmaya-fyi/app/wallet-geo/CountryDetail.t", "shortDescription": {"text": "Dangling fetch: GET /api/wallet-geo/country/${encodeURIComponent(code)} (apps/vizmaya-fyi/app/wallet-geo/CountryDetail.tsx:30)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/app/wallet-geo/CountryDetail.tsx:30` calls `GET /api/wallet-geo/country/${encodeURIComponent(code)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/wallet-geo/country/<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-fd90cc1ccc2a5c1e", "name": "Dangling fetch: GET /api/energy-profile/country/${encodeURIComponent(code)} (apps/vizmaya-fyi/app/energy-profile/Country", "shortDescription": {"text": "Dangling fetch: GET /api/energy-profile/country/${encodeURIComponent(code)} (apps/vizmaya-fyi/app/energy-profile/CountryDetail.tsx:29)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/app/energy-profile/CountryDetail.tsx:29` calls `GET /api/energy-profile/country/${encodeURIComponent(code)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/energy-profile/country/<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-1ed002dff16813e2", "name": "Dangling fetch: GET /api/coke-studio/place/${encodeURIComponent(canonical)} (apps/vizmaya-fyi/app/coke-studio/PlaceDetai", "shortDescription": {"text": "Dangling fetch: GET /api/coke-studio/place/${encodeURIComponent(canonical)} (apps/vizmaya-fyi/app/coke-studio/PlaceDetail.tsx:30)"}, "fullDescription": {"text": "`apps/vizmaya-fyi/app/coke-studio/PlaceDetail.tsx:30` calls `GET /api/coke-studio/place/${encodeURIComponent(canonical)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coke-studio/place/<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-020798a907dc2058", "name": "Dangling fetch: GET /api/vizmaya/assistant/conversations (apps/admin/components/AssistantLauncher.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/assistant/conversations (apps/admin/components/AssistantLauncher.tsx:119)"}, "fullDescription": {"text": "`apps/admin/components/AssistantLauncher.tsx:119` calls `GET /api/vizmaya/assistant/conversations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/assistant/conversations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-302cbc15470aaad4", "name": "Dangling fetch: GET /api/vizmaya/assistant/conversations/${id} (apps/admin/components/AssistantLauncher.tsx:143)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/assistant/conversations/${id} (apps/admin/components/AssistantLauncher.tsx:143)"}, "fullDescription": {"text": "`apps/admin/components/AssistantLauncher.tsx:143` calls `GET /api/vizmaya/assistant/conversations/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/assistant/conversations/<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-b73fec7034b6288f", "name": "Dangling fetch: DELETE /api/vizmaya/assistant/conversations/${id} (apps/admin/components/AssistantLauncher.tsx:166)", "shortDescription": {"text": "Dangling fetch: DELETE /api/vizmaya/assistant/conversations/${id} (apps/admin/components/AssistantLauncher.tsx:166)"}, "fullDescription": {"text": "`apps/admin/components/AssistantLauncher.tsx:166` calls `DELETE /api/vizmaya/assistant/conversations/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/assistant/conversations/<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-6cf7f0f8931d4930", "name": "Dangling fetch: POST /api/vizmaya/assistant (apps/admin/components/AssistantLauncher.tsx:221)", "shortDescription": {"text": "Dangling fetch: POST /api/vizmaya/assistant (apps/admin/components/AssistantLauncher.tsx:221)"}, "fullDescription": {"text": "`apps/admin/components/AssistantLauncher.tsx:221` calls `POST /api/vizmaya/assistant` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/assistant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99df0f1f8f84752c", "name": "Dangling fetch: POST /api/stories/compose (apps/admin/components/compose/ComposeCreateEntry.tsx:34)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/compose (apps/admin/components/compose/ComposeCreateEntry.tsx:34)"}, "fullDescription": {"text": "`apps/admin/components/compose/ComposeCreateEntry.tsx:34` calls `POST /api/stories/compose` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/compose`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a46ac9907aa9eec9", "name": "Dangling fetch: POST /api/stories/${slug}/assets/generate (apps/admin/components/vizmaya/GenerateImagePanel.tsx:55)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${slug}/assets/generate (apps/admin/components/vizmaya/GenerateImagePanel.tsx:55)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/GenerateImagePanel.tsx:55` calls `POST /api/stories/${slug}/assets/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/assets/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-a3787bc1eabb139c", "name": "Dangling fetch: GET /api/stories (apps/admin/components/vizmaya/DemosListClient.tsx:27)", "shortDescription": {"text": "Dangling fetch: GET /api/stories (apps/admin/components/vizmaya/DemosListClient.tsx:27)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/DemosListClient.tsx:27` calls `GET /api/stories` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e88ced9c10eb54bb", "name": "Dangling fetch: DELETE /api/vizmaya/demos/${id} (apps/admin/components/vizmaya/DemosListClient.tsx:49)", "shortDescription": {"text": "Dangling fetch: DELETE /api/vizmaya/demos/${id} (apps/admin/components/vizmaya/DemosListClient.tsx:49)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/DemosListClient.tsx:49` calls `DELETE /api/vizmaya/demos/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/demos/<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-38e1bc65fe140480", "name": "Dangling fetch: POST /api/vizmaya/demos (apps/admin/components/vizmaya/DemosListClient.tsx:176)", "shortDescription": {"text": "Dangling fetch: POST /api/vizmaya/demos (apps/admin/components/vizmaya/DemosListClient.tsx:176)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/DemosListClient.tsx:176` calls `POST /api/vizmaya/demos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/demos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-30e85239c8e1a756", "name": "Dangling fetch: GET /api/vizmaya/apps (apps/admin/components/vizmaya/MoveStoryControl.tsx:14)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/apps (apps/admin/components/vizmaya/MoveStoryControl.tsx:14)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/MoveStoryControl.tsx:14` calls `GET /api/vizmaya/apps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/apps`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c21a8fffb5068b1f", "name": "Dangling fetch: PUT /api/stories/${slug}/app (apps/admin/components/vizmaya/MoveStoryControl.tsx:57)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug}/app (apps/admin/components/vizmaya/MoveStoryControl.tsx:57)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/MoveStoryControl.tsx:57` calls `PUT /api/stories/${slug}/app` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/app`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec255a44f9659a31", "name": "Dangling fetch: PUT /api/vizmaya/demos/${demoId} (apps/admin/components/vizmaya/DemoEditorClient.tsx:89)", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/demos/${demoId} (apps/admin/components/vizmaya/DemoEditorClient.tsx:89)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/DemoEditorClient.tsx:89` calls `PUT /api/vizmaya/demos/${demoId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/demos/<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-086fb036a9d9cc2c", "name": "Dangling fetch: GET /api/vizmaya/demos/${demoId}/cards (apps/admin/components/vizmaya/DemoEditorClient.tsx:363)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/demos/${demoId}/cards (apps/admin/components/vizmaya/DemoEditorClient.tsx:363)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/DemoEditorClient.tsx:363` calls `GET /api/vizmaya/demos/${demoId}/cards` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/demos/<p>/cards`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aecc080d78396616", "name": "Dangling fetch: POST /api/vizmaya/demos/${demoId}/render-share (apps/admin/components/vizmaya/DemoEditorClient.tsx:391)", "shortDescription": {"text": "Dangling fetch: POST /api/vizmaya/demos/${demoId}/render-share (apps/admin/components/vizmaya/DemoEditorClient.tsx:391)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/DemoEditorClient.tsx:391` calls `POST /api/vizmaya/demos/${demoId}/render-share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/demos/<p>/render-share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f737102d5f83be7", "name": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/vizmaya/EditorClient.tsx:170)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/vizmaya/EditorClient.tsx:170)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/EditorClient.tsx:170` calls `PUT /api/stories/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-5224fafaa6603aeb", "name": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/vizmaya/EditorClient.tsx:220)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/vizmaya/EditorClient.tsx:220)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/EditorClient.tsx:220` calls `PUT /api/stories/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-05085e52e57f3b0e", "name": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:247)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:247)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/EditorClient.tsx:247` calls `PUT /api/stories/${slug}/charts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-f13fd2d252d44eed", "name": "Dangling fetch: GET /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:510)", "shortDescription": {"text": "Dangling fetch: GET /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:510)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/EditorClient.tsx:510` calls `GET /api/stories/${slug}/charts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-fd915b586c00cdfe", "name": "Dangling fetch: DELETE /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:545)", "shortDescription": {"text": "Dangling fetch: DELETE /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:545)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/EditorClient.tsx:545` calls `DELETE /api/stories/${slug}/charts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-2e5d72bad3cdbc36", "name": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:574)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:574)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/EditorClient.tsx:574` calls `PUT /api/stories/${slug}/charts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-945b6ff28e5ceb55", "name": "Dangling fetch: POST /api/stories/${slug}/canvas/compose/start (apps/admin/components/vizmaya/EditorClient.tsx:689)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${slug}/canvas/compose/start (apps/admin/components/vizmaya/EditorClient.tsx:689)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/EditorClient.tsx:689` calls `POST /api/stories/${slug}/canvas/compose/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/canvas/compose/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb4313c370e6b47d", "name": "Dangling fetch: PUT /api/stories/${slug}/charts/${chartId} (apps/admin/components/vizmaya/ChartEditorClient.tsx:55)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${chartId} (apps/admin/components/vizmaya/ChartEditorClient.tsx:55)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/ChartEditorClient.tsx:55` calls `PUT /api/stories/${slug}/charts/${chartId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-6caed6edccf8d3a7", "name": "Dangling fetch: DELETE /api/stories/${s.slug} (apps/admin/components/vizmaya/DraftsList.tsx:30)", "shortDescription": {"text": "Dangling fetch: DELETE /api/stories/${s.slug} (apps/admin/components/vizmaya/DraftsList.tsx:30)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/DraftsList.tsx:30` calls `DELETE /api/stories/${s.slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-dfbe4761d820f209", "name": "Dangling fetch: PUT /api/stories/${slug}/tts (apps/admin/components/vizmaya/NarrationEditor.tsx:141)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug}/tts (apps/admin/components/vizmaya/NarrationEditor.tsx:141)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/NarrationEditor.tsx:141` calls `PUT /api/stories/${slug}/tts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/tts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d82be07f9e20d07", "name": "Dangling fetch: POST /api/stories/${slug}/audio/regen (apps/admin/components/vizmaya/NarrationEditor.tsx:164)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${slug}/audio/regen (apps/admin/components/vizmaya/NarrationEditor.tsx:164)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/NarrationEditor.tsx:164` calls `POST /api/stories/${slug}/audio/regen` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/audio/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-319db15950fbd73b", "name": "Dangling fetch: GET /api/stories/${slug}/assets (apps/admin/components/vizmaya/AssetsPanel.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/stories/${slug}/assets (apps/admin/components/vizmaya/AssetsPanel.tsx:47)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/AssetsPanel.tsx:47` calls `GET /api/stories/${slug}/assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-115e110a5bbceef6", "name": "Dangling fetch: POST /api/stories/${slug}/assets/sign-upload (apps/admin/components/vizmaya/AssetsPanel.tsx:73)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${slug}/assets/sign-upload (apps/admin/components/vizmaya/AssetsPanel.tsx:73)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/AssetsPanel.tsx:73` calls `POST /api/stories/${slug}/assets/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/assets/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3dc6cd9a599d590", "name": "Dangling fetch: DELETE /api/stories/${slug}/assets/${encodeURIComponent(filename)} (apps/admin/components/vizmaya/Assets", "shortDescription": {"text": "Dangling fetch: DELETE /api/stories/${slug}/assets/${encodeURIComponent(filename)} (apps/admin/components/vizmaya/AssetsPanel.tsx:164)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/AssetsPanel.tsx:164` calls `DELETE /api/stories/${slug}/assets/${encodeURIComponent(filename)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/assets/<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-b277409f870009c8", "name": "Dangling fetch: GET /api/vizmaya/social/share-cards/${draft.storySlug} (apps/admin/components/vizmaya/social/PostEditFor", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/social/share-cards/${draft.storySlug} (apps/admin/components/vizmaya/social/PostEditForm.tsx:143)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/PostEditForm.tsx:143` calls `GET /api/vizmaya/social/share-cards/${draft.storySlug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social/share-cards/<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-3f24f793ccb597d7", "name": "Dangling fetch: POST /api/vizmaya/social/preview-text (apps/admin/components/vizmaya/social/PostEditForm.tsx:161)", "shortDescription": {"text": "Dangling fetch: POST /api/vizmaya/social/preview-text (apps/admin/components/vizmaya/social/PostEditForm.tsx:161)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/PostEditForm.tsx:161` calls `POST /api/vizmaya/social/preview-text` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social/preview-text`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c393e831682f8f9", "name": "Dangling fetch: PATCH /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostCard.tsx:44)", "shortDescription": {"text": "Dangling fetch: PATCH /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostCard.tsx:44)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/PostCard.tsx:44` calls `PATCH /api/vizmaya/social/posts/${post.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social/posts/<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-738de3abd040ea42", "name": "Dangling fetch: DELETE /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostCard.tsx:59)", "shortDescription": {"text": "Dangling fetch: DELETE /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostCard.tsx:59)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/PostCard.tsx:59` calls `DELETE /api/vizmaya/social/posts/${post.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social/posts/<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-7eafe99c14b1d1e2", "name": "Dangling fetch: PUT /api/vizmaya/social/${id} (apps/admin/components/vizmaya/social/SocialInbox.tsx:69)", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/social/${id} (apps/admin/components/vizmaya/social/SocialInbox.tsx:69)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/SocialInbox.tsx:69` calls `PUT /api/vizmaya/social/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social/<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-28082c597c54ad47", "name": "Dangling fetch: GET /api/vizmaya/social?status=new (apps/admin/components/vizmaya/social/SocialInbox.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/social?status=new (apps/admin/components/vizmaya/social/SocialInbox.tsx:78)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/SocialInbox.tsx:78` calls `GET /api/vizmaya/social?status=new` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3fb28dd83425af5", "name": "Dangling fetch: PATCH /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostPanel.tsx:71)", "shortDescription": {"text": "Dangling fetch: PATCH /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostPanel.tsx:71)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/PostPanel.tsx:71` calls `PATCH /api/vizmaya/social/posts/${post.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social/posts/<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-d20bce5175f28cb5", "name": "Dangling fetch: DELETE /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostPanel.tsx:87)", "shortDescription": {"text": "Dangling fetch: DELETE /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostPanel.tsx:87)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/PostPanel.tsx:87` calls `DELETE /api/vizmaya/social/posts/${post.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/social/posts/<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-7e2010f6fd0b067a", "name": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}?aspect=${encodeURIComponent(aspect)} (apps/admin/compon", "shortDescription": {"text": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}?aspect=${encodeURIComponent(aspect)} (apps/admin/components/vizmaya/social/VideoPostRenderPanel.tsx:25)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/social/VideoPostRenderPanel.tsx:25` calls `GET /api/story-video/${encodeURIComponent(slug)}?aspect=${encodeURIComponent(aspect)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/story-video/<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-8b33f7cf04e223a5", "name": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}/timeline (apps/admin/components/vizmaya/video/RangeRend", "shortDescription": {"text": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}/timeline (apps/admin/components/vizmaya/video/RangeRenderPanel.tsx:86)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/video/RangeRenderPanel.tsx:86` calls `GET /api/story-video/${encodeURIComponent(slug)}/timeline` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/story-video/<p>/timeline`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fff4297b180b5dce", "name": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}?${params.toString()} (apps/admin/components/vizmaya/vid", "shortDescription": {"text": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}?${params.toString()} (apps/admin/components/vizmaya/video/RangeRenderPanel.tsx:171)"}, "fullDescription": {"text": "`apps/admin/components/vizmaya/video/RangeRenderPanel.tsx:171` calls `GET /api/story-video/${encodeURIComponent(slug)}?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/story-video/<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-bbdd68cff21cb2d1", "name": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/storyUpload.tsx:118)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/storyUpload.tsx:118)"}, "fullDescription": {"text": "`apps/admin/components/section/storyUpload.tsx:118` calls `PUT /api/stories/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-483c1040ad1f0408", "name": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/section/storyUpload.tsx:158)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/section/storyUpload.tsx:158)"}, "fullDescription": {"text": "`apps/admin/components/section/storyUpload.tsx:158` calls `PUT /api/stories/${slug}/charts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-f638357ec4a68097", "name": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesListClient.tsx:86)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesListClient.tsx:86)"}, "fullDescription": {"text": "`apps/admin/components/section/StoriesListClient.tsx:86` calls `PUT /api/stories/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-0925e4d86e55f0ac", "name": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:107)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:107)"}, "fullDescription": {"text": "`apps/admin/components/section/StoriesManager.tsx:107` calls `PUT /api/stories/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-feaaf64472d49fd2", "name": "Dangling fetch: DELETE /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:119)", "shortDescription": {"text": "Dangling fetch: DELETE /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:119)"}, "fullDescription": {"text": "`apps/admin/components/section/StoriesManager.tsx:119` calls `DELETE /api/stories/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-6682c9a0b738ff66", "name": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:138)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:138)"}, "fullDescription": {"text": "`apps/admin/components/section/StoriesManager.tsx:138` calls `PUT /api/stories/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-97af03d39e2c91a6", "name": "Dangling fetch: POST /api/footshorts/trigger-recap (apps/admin/components/footshorts/TriggerRecapButton.tsx:29)", "shortDescription": {"text": "Dangling fetch: POST /api/footshorts/trigger-recap (apps/admin/components/footshorts/TriggerRecapButton.tsx:29)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/TriggerRecapButton.tsx:29` calls `POST /api/footshorts/trigger-recap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/trigger-recap`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90eb24cecd81062b", "name": "Dangling fetch: GET /api/footshorts/data/standings?${qs} (apps/admin/components/footshorts/sharecard/ShareCardCreator.ts", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/standings?${qs} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:198)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:198` calls `GET /api/footshorts/data/standings?${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/standings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c7b4ccb4e771267", "name": "Dangling fetch: GET /api/footshorts/data/fixtures?${qs} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/fixtures?${qs} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:220)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:220` calls `GET /api/footshorts/data/fixtures?${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/fixtures`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b67c590dd226ef0b", "name": "Dangling fetch: GET /api/footshorts/data/news?limit=${newsLimit} (apps/admin/components/footshorts/sharecard/ShareCardCr", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/news?limit=${newsLimit} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:261)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:261` calls `GET /api/footshorts/data/news?limit=${newsLimit}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/news`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cacdd6f78d54153", "name": "Dangling fetch: GET /api/footshorts/share/cards (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:426)", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/share/cards (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:426)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:426` calls `GET /api/footshorts/share/cards` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/share/cards`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b363d880bef63341", "name": "Dangling fetch: POST /api/footshorts/share/cards (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:482)", "shortDescription": {"text": "Dangling fetch: POST /api/footshorts/share/cards (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:482)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:482` calls `POST /api/footshorts/share/cards` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/share/cards`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26af9433b733090a", "name": "Dangling fetch: DELETE /api/footshorts/share/cards/${id} (apps/admin/components/footshorts/sharecard/ShareCardCreator.ts", "shortDescription": {"text": "Dangling fetch: DELETE /api/footshorts/share/cards/${id} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:535)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:535` calls `DELETE /api/footshorts/share/cards/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/share/cards/<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-af3e24dae03b137d", "name": "Dangling fetch: POST /api/footshorts/share/generate-image (apps/admin/components/footshorts/sharecard/ShareCardCreator.t", "shortDescription": {"text": "Dangling fetch: POST /api/footshorts/share/generate-image (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:552)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:552` calls `POST /api/footshorts/share/generate-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/share/generate-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf13750acd2a7b94", "name": "Dangling fetch: GET /api/footshorts/share/proxy-image?url=${encodeURIComponent(url)} (apps/admin/components/footshorts/s", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/share/proxy-image?url=${encodeURIComponent(url)} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:596)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:596` calls `GET /api/footshorts/share/proxy-image?url=${encodeURIComponent(url)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/share/proxy-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ecfe9938f2258528", "name": "Dangling fetch: GET /api/footshorts/data/entities?q=${encodeURIComponent(badgeQuery.trim())}&limit=40 (apps/admin/compon", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/entities?q=${encodeURIComponent(badgeQuery.trim())}&limit=40 (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:618)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:618` calls `GET /api/footshorts/data/entities?q=${encodeURIComponent(badgeQuery.trim())}&limit=40` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/entities`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f43262561bef1f24", "name": "Dangling fetch: GET /api/footshorts/data/flags (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:634)", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/flags (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:634)"}, "fullDescription": {"text": "`apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:634` calls `GET /api/footshorts/data/flags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/flags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8a6d00766a5deb8", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/transform (apps/admin/components/canvas/SelectionAi", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/transform (apps/admin/components/canvas/SelectionAiOverlay.tsx:193)"}, "fullDescription": {"text": "`apps/admin/components/canvas/SelectionAiOverlay.tsx:193` calls `POST /api/stories/${encodeURIComponent(slug)}/canvas/transform` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/canvas/transform`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbc30e0e98570615", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/generation-feedback (apps/admin/components/canvas/Generati", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/generation-feedback (apps/admin/components/canvas/GenerationFeedback.tsx:39)"}, "fullDescription": {"text": "`apps/admin/components/canvas/GenerationFeedback.tsx:39` calls `POST /api/stories/${encodeURIComponent(slug)}/generation-feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/generation-feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16db574cc6279ad7", "name": "Dangling fetch: GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/component", "shortDescription": {"text": "Dangling fetch: GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/components/canvas/ChartEditPanel.tsx:68)"}, "fullDescription": {"text": "`apps/admin/components/canvas/ChartEditPanel.tsx:68` calls `GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-cd414f69aadfd243", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)}/generate (apps/admin", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)}/generate (apps/admin/components/canvas/ChartEditPanel.tsx:111)"}, "fullDescription": {"text": "`apps/admin/components/canvas/ChartEditPanel.tsx:111` calls `POST /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)}/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<p>/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-62a85a8556c2512f", "name": "Dangling fetch: PUT /api/stories/${encodeURIComponent(slug)} (apps/admin/components/canvas/canvasSlotEditing.ts:212)", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${encodeURIComponent(slug)} (apps/admin/components/canvas/canvasSlotEditing.ts:212)"}, "fullDescription": {"text": "`apps/admin/components/canvas/canvasSlotEditing.ts:212` calls `PUT /api/stories/${encodeURIComponent(slug)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<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-5583e06a542d421e", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/generate (apps/admin/components/canvas/PromptBar.ts", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/generate (apps/admin/components/canvas/PromptBar.tsx:134)"}, "fullDescription": {"text": "`apps/admin/components/canvas/PromptBar.tsx:134` calls `POST /api/stories/${encodeURIComponent(slug)}/canvas/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/canvas/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-c7ae8c5c682aa2ac", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/fix (apps/admin/components/canvas/FixPanel.tsx:59)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/fix (apps/admin/components/canvas/FixPanel.tsx:59)"}, "fullDescription": {"text": "`apps/admin/components/canvas/FixPanel.tsx:59` calls `POST /api/stories/${encodeURIComponent(slug)}/canvas/fix` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/canvas/fix`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7428372b8dd13aad", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/assets (apps/admin/components/canvas/ImageEditModal.tsx:12", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/assets (apps/admin/components/canvas/ImageEditModal.tsx:127)"}, "fullDescription": {"text": "`apps/admin/components/canvas/ImageEditModal.tsx:127` calls `POST /api/stories/${encodeURIComponent(slug)}/assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cccd9836fa63ccdd", "name": "Dangling fetch: GET /api/footshorts/data/competitions (apps/admin/components/canvas/FootballDataModal.tsx:85)", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/competitions (apps/admin/components/canvas/FootballDataModal.tsx:85)"}, "fullDescription": {"text": "`apps/admin/components/canvas/FootballDataModal.tsx:85` calls `GET /api/footshorts/data/competitions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/competitions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45cf68839dd7a0b3", "name": "Dangling fetch: GET /api/footshorts/data/standings?${qs} (apps/admin/components/canvas/FootballDataModal.tsx:120)", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/standings?${qs} (apps/admin/components/canvas/FootballDataModal.tsx:120)"}, "fullDescription": {"text": "`apps/admin/components/canvas/FootballDataModal.tsx:120` calls `GET /api/footshorts/data/standings?${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/standings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c9a9f68f5cf0673", "name": "Dangling fetch: GET /api/footshorts/data/fixtures?${qs}${extra} (apps/admin/components/canvas/FootballDataModal.tsx:127)", "shortDescription": {"text": "Dangling fetch: GET /api/footshorts/data/fixtures?${qs}${extra} (apps/admin/components/canvas/FootballDataModal.tsx:127)"}, "fullDescription": {"text": "`apps/admin/components/canvas/FootballDataModal.tsx:127` calls `GET /api/footshorts/data/fixtures?${qs}${extra}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/footshorts/data/fixtures`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9bfbccd5e1956d7", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/evaluate (apps/admin/components/canvas/EvaluatorPan", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/evaluate (apps/admin/components/canvas/EvaluatorPanel.tsx:64)"}, "fullDescription": {"text": "`apps/admin/components/canvas/EvaluatorPanel.tsx:64` calls `POST /api/stories/${encodeURIComponent(slug)}/canvas/evaluate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/canvas/evaluate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d38d770fa3e8de02", "name": "Dangling fetch: POST /api/stories/${slug}/canvas/compose/start (apps/admin/components/canvas/CanvasClient.tsx:727)", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${slug}/canvas/compose/start (apps/admin/components/canvas/CanvasClient.tsx:727)"}, "fullDescription": {"text": "`apps/admin/components/canvas/CanvasClient.tsx:727` calls `POST /api/stories/${slug}/canvas/compose/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/canvas/compose/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf5866632862279e", "name": "Dangling fetch: GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/component", "shortDescription": {"text": "Dangling fetch: GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/components/canvas/CanvasClient.tsx:2490)"}, "fullDescription": {"text": "`apps/admin/components/canvas/CanvasClient.tsx:2490` calls `GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-12a0855ebd94d79b", "name": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/generate-section (apps/admin/components/canvas/Canv", "shortDescription": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/generate-section (apps/admin/components/canvas/CanvasClient.tsx:3343)"}, "fullDescription": {"text": "`apps/admin/components/canvas/CanvasClient.tsx:3343` calls `POST /api/stories/${encodeURIComponent(slug)}/canvas/generate-section` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/canvas/generate-section`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4927e768ecaba379", "name": "Dangling fetch: PUT /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/component", "shortDescription": {"text": "Dangling fetch: PUT /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/components/canvas/CanvasClient.tsx:3639)"}, "fullDescription": {"text": "`apps/admin/components/canvas/CanvasClient.tsx:3639` calls `PUT /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stories/<p>/charts/<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-dd2ece8257f3d44a", "name": "Dangling fetch: GET /api/vizmaya/ai-models (apps/admin/app/vizmaya/ai-models/page.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/ai-models (apps/admin/app/vizmaya/ai-models/page.tsx:35)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/ai-models/page.tsx:35` calls `GET /api/vizmaya/ai-models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/ai-models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5b0776ec62ac41d", "name": "Dangling fetch: PUT /api/vizmaya/ai-models (apps/admin/app/vizmaya/ai-models/page.tsx:54)", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/ai-models (apps/admin/app/vizmaya/ai-models/page.tsx:54)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/ai-models/page.tsx:54` calls `PUT /api/vizmaya/ai-models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/ai-models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff9d48330c06e937", "name": "Dangling fetch: GET /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:43)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:43` calls `GET /api/vizmaya/authors/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/authors/<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-c83aa01533890614", "name": "Dangling fetch: POST /api/vizmaya/authors (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:95)", "shortDescription": {"text": "Dangling fetch: POST /api/vizmaya/authors (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:95)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:95` calls `POST /api/vizmaya/authors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/authors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f1680119c3d11ff", "name": "Dangling fetch: PUT /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:100)", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:100)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:100` calls `PUT /api/vizmaya/authors/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/authors/<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-57d47a4c2918f8dc", "name": "Dangling fetch: DELETE /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:119)", "shortDescription": {"text": "Dangling fetch: DELETE /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:119)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:119` calls `DELETE /api/vizmaya/authors/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/authors/<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-4db56c449cbba21e", "name": "Dangling fetch: GET /api/vizmaya/epics/${slug}/theme (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:123)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/epics/${slug}/theme (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:123)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:123` calls `GET /api/vizmaya/epics/${slug}/theme` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/epics/<p>/theme`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13f4a436ebad10a7", "name": "Dangling fetch: GET /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:124)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:124` calls `GET /api/vizmaya/epics/${slug}/stories` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/epics/<p>/stories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7369794cc88d9a85", "name": "Dangling fetch: GET /api/vizmaya/apps (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:157)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/apps (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:157)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:157` calls `GET /api/vizmaya/apps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/apps`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2dc469c08afc461d", "name": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/show-on-home (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:22", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/show-on-home (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:229)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:229` calls `PUT /api/vizmaya/epics/${slug}/show-on-home` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/epics/<p>/show-on-home`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e62443e2dfe176a", "name": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/app (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:248)", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/app (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:248)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:248` calls `PUT /api/vizmaya/epics/${slug}/app` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/epics/<p>/app`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d10ab4657db7d51", "name": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/theme (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:333)", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/theme (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:333)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:333` calls `PUT /api/vizmaya/epics/${slug}/theme` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/epics/<p>/theme`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c01dae5884a74b44", "name": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:344)", "shortDescription": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:344)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:344` calls `PUT /api/vizmaya/epics/${slug}/stories` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/epics/<p>/stories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1c1e844da9439b1", "name": "Dangling fetch: GET /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:359)", "shortDescription": {"text": "Dangling fetch: GET /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:359)"}, "fullDescription": {"text": "`apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:359` calls `GET /api/vizmaya/epics/${slug}/stories` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/epics/<p>/stories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b9446b1aac366c1", "name": "Dangling fetch: POST /api/vizmaya/sign-story-links (apps/admin/lib/useSignedStoryLinks.ts:29)", "shortDescription": {"text": "Dangling fetch: POST /api/vizmaya/sign-story-links (apps/admin/lib/useSignedStoryLinks.ts:29)"}, "fullDescription": {"text": "`apps/admin/lib/useSignedStoryLinks.ts:29` calls `POST /api/vizmaya/sign-story-links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vizmaya/sign-story-links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81a258685c1f8309", "name": "Dangling fetch: GET /api/chart-data/${slug}/${id} (packages/viz-engine/src/charts/GenericChart.tsx:106)", "shortDescription": {"text": "Dangling fetch: GET /api/chart-data/${slug}/${id} (packages/viz-engine/src/charts/GenericChart.tsx:106)"}, "fullDescription": {"text": "`packages/viz-engine/src/charts/GenericChart.tsx:106` calls `GET /api/chart-data/${slug}/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chart-data/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e16cd519c35069f1", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/conten", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyAudioDispatch.ts:33)"}, "fullDescription": {"text": "`packages/content-source/src/storyAudioDispatch.ts:33` calls `POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/actions/workflows/<p>/dispatches`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac15ddaee46a7890", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/conten", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyVideoDispatch.ts:55)"}, "fullDescription": {"text": "`packages/content-source/src/storyVideoDispatch.ts:55` calls `POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/actions/workflows/<p>/dispatches`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-436b4a65f90754c3", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/conten", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyShareDispatch.ts:36)"}, "fullDescription": {"text": "`packages/content-source/src/storyShareDispatch.ts:36` calls `POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/actions/workflows/<p>/dispatches`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f105818718835e5c", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/conten", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/recapDispatch.ts:43)"}, "fullDescription": {"text": "`packages/content-source/src/recapDispatch.ts:43` calls `POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/actions/workflows/<p>/dispatches`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efa7bbd5849d10f4", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/conten", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/heygenTemplateDispatch.ts:56)"}, "fullDescription": {"text": "`packages/content-source/src/heygenTemplateDispatch.ts:56` calls `POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/actions/workflows/<p>/dispatches`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b73ea668e5a67a8", "name": "Dangling fetch: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateConten", "shortDescription": {"text": "Dangling fetch: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent?key=${ctx.apiKey} (packages/content-source/src/storyAudioGenerate.ts:211)"}, "fullDescription": {"text": "`packages/content-source/src/storyAudioGenerate.ts:211` calls `POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent?key=${ctx.apiKey}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts/<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-6036d9ebc3f602da", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/conten", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyPdfDispatch.ts:43)"}, "fullDescription": {"text": "`packages/content-source/src/storyPdfDispatch.ts:43` calls `POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/actions/workflows/<p>/dispatches`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e221bb6c67fe5e29", "name": "Dangling fetch: GET /api/admin/social/posts/${encodeURIComponent(postId)}/render-share (packages/content-source/src/useP", "shortDescription": {"text": "Dangling fetch: GET /api/admin/social/posts/${encodeURIComponent(postId)}/render-share (packages/content-source/src/usePollShareRender.ts:45)"}, "fullDescription": {"text": "`packages/content-source/src/usePollShareRender.ts:45` calls `GET /api/admin/social/posts/${encodeURIComponent(postId)}/render-share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/social/posts/<p>/render-share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e04809506e5e329", "name": "Dangling fetch: POST /api/admin/social/posts/${encodeURIComponent(postId)}/render-share (packages/content-source/src/use", "shortDescription": {"text": "Dangling fetch: POST /api/admin/social/posts/${encodeURIComponent(postId)}/render-share (packages/content-source/src/usePollShareRender.ts:77)"}, "fullDescription": {"text": "`packages/content-source/src/usePollShareRender.ts:77` calls `POST /api/admin/social/posts/${encodeURIComponent(postId)}/render-share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/social/posts/<p>/render-share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8dd0bef2667a47f8", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/conten", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storySourceExtractDispatch.ts:37)"}, "fullDescription": {"text": "`packages/content-source/src/storySourceExtractDispatch.ts:37` calls `POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/actions/workflows/<p>/dispatches`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b95fecd8f16ac6a", "name": "Unused endpoint: POST /run/telemetry-analysis", "shortDescription": {"text": "Unused endpoint: POST /run/telemetry-analysis"}, "fullDescription": {"text": "`f1_backend/AI/app/main.py` declares `POST /run/telemetry-analysis` 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-53ee3b6483489ba1", "name": "Unused endpoint: POST /run/angle-discovery", "shortDescription": {"text": "Unused endpoint: POST /run/angle-discovery"}, "fullDescription": {"text": "`f1_backend/AI/app/main.py` declares `POST /run/angle-discovery` 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-5b1b59c0256c7478", "name": "Unused endpoint: POST /run/story-generation", "shortDescription": {"text": "Unused endpoint: POST /run/story-generation"}, "fullDescription": {"text": "`f1_backend/AI/app/main.py` declares `POST /run/story-generation` 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-95faf5285003383b", "name": "Unused endpoint: GET /run/{run_id}/status", "shortDescription": {"text": "Unused endpoint: GET /run/{run_id}/status"}, "fullDescription": {"text": "`f1_backend/AI/app/main.py` declares `GET /run/{run_id}/status` 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-e7e028d5add90a4a", "name": "Unused endpoint: POST /ingest/session", "shortDescription": {"text": "Unused endpoint: POST /ingest/session"}, "fullDescription": {"text": "`f1_backend/AI/app/routes/ingest.py` declares `POST /ingest/session` 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-fade69cf284c99f6", "name": "Unused endpoint: POST /ingest/enrich-only", "shortDescription": {"text": "Unused endpoint: POST /ingest/enrich-only"}, "fullDescription": {"text": "`f1_backend/AI/app/routes/ingest.py` declares `POST /ingest/enrich-only` 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-c9767c4421b7a155", "name": "Unused endpoint: POST /ingest/enrich-positions", "shortDescription": {"text": "Unused endpoint: POST /ingest/enrich-positions"}, "fullDescription": {"text": "`f1_backend/AI/app/routes/ingest.py` declares `POST /ingest/enrich-positions` 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-e892a1fb00ea0c0a", "name": "Unused endpoint: GET /sessions/available", "shortDescription": {"text": "Unused endpoint: GET /sessions/available"}, "fullDescription": {"text": "`f1_backend/AI/app/routes/ingest.py` declares `GET /sessions/available` 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-6eb452fbfb454d20", "name": "Unused endpoint: USE /api/auth", "shortDescription": {"text": "Unused endpoint: USE /api/auth"}, "fullDescription": {"text": "`f1_backend/Backend/src/index.ts` declares `USE /api/auth` 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-d23a060528c7d8b7", "name": "Unused endpoint: USE /api/stories", "shortDescription": {"text": "Unused endpoint: USE /api/stories"}, "fullDescription": {"text": "`f1_backend/Backend/src/index.ts` declares `USE /api/stories` 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-7d2d069b7da50f78", "name": "Unused endpoint: USE /api/signals", "shortDescription": {"text": "Unused endpoint: USE /api/signals"}, "fullDescription": {"text": "`f1_backend/Backend/src/index.ts` declares `USE /api/signals` 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-5562774db22a7db8", "name": "Unused endpoint: USE /api/telemetry", "shortDescription": {"text": "Unused endpoint: USE /api/telemetry"}, "fullDescription": {"text": "`f1_backend/Backend/src/index.ts` declares `USE /api/telemetry` 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-21fc584ff580c3c7", "name": "Unused endpoint: USE /api/graphs", "shortDescription": {"text": "Unused endpoint: USE /api/graphs"}, "fullDescription": {"text": "`f1_backend/Backend/src/index.ts` declares `USE /api/graphs` 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-d93a530ce10d47d9", "name": "Unused endpoint: USE /api/admin", "shortDescription": {"text": "Unused endpoint: USE /api/admin"}, "fullDescription": {"text": "`f1_backend/Backend/src/index.ts` declares `USE /api/admin` 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-6a42af606c831d48", "name": "Unused endpoint: USE /api/analysis-angles", "shortDescription": {"text": "Unused endpoint: USE /api/analysis-angles"}, "fullDescription": {"text": "`f1_backend/Backend/src/index.ts` declares `USE /api/analysis-angles` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`f1_backend/Backend/src/middleware/validate.middleware.ts` declares `POST /` 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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`f1_backend/Backend/src/middleware/validate.middleware.ts` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a61c112b611f4bb", "name": "Unused endpoint: DELETE /:id", "shortDescription": {"text": "Unused endpoint: DELETE /:id"}, "fullDescription": {"text": "`f1_backend/Backend/src/middleware/auth.middleware.ts` declares `DELETE /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd71dfa1d0356c5b", "name": "Unused endpoint: GET /:slug", "shortDescription": {"text": "Unused endpoint: GET /:slug"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/stories.routes.ts` declares `GET /:slug` 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-5fbc954f63526821", "name": "Unused endpoint: PATCH /:id", "shortDescription": {"text": "Unused endpoint: PATCH /:id"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/stories.routes.ts` declares `PATCH /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d589fc537557405", "name": "Unused endpoint: PATCH /:id/publish", "shortDescription": {"text": "Unused endpoint: PATCH /:id/publish"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/stories.routes.ts` declares `PATCH /:id/publish` 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-0af9e12649346595", "name": "Unused endpoint: DELETE /:id/permanent", "shortDescription": {"text": "Unused endpoint: DELETE /:id/permanent"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/stories.routes.ts` declares `DELETE /:id/permanent` 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-34524fad82f5fab0", "name": "Unused endpoint: POST /:id/generate", "shortDescription": {"text": "Unused endpoint: POST /:id/generate"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/stories.routes.ts` declares `POST /:id/generate` 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-f8e62709a71e8eb9", "name": "Unused endpoint: GET /:id/run-status", "shortDescription": {"text": "Unused endpoint: GET /:id/run-status"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/stories.routes.ts` declares `GET /:id/run-status` 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-fa413208496243a5", "name": "Unused endpoint: POST /sync", "shortDescription": {"text": "Unused endpoint: POST /sync"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/auth.routes.ts` declares `POST /sync` 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-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/auth.routes.ts` declares `GET /me` 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-ea575b61c121b733", "name": "Unused endpoint: PATCH /me", "shortDescription": {"text": "Unused endpoint: PATCH /me"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/auth.routes.ts` declares `PATCH /me` 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-841e50bf821e4158", "name": "Unused endpoint: GET /users", "shortDescription": {"text": "Unused endpoint: GET /users"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/auth.routes.ts` declares `GET /users` 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-01b5d572dd285e2c", "name": "Unused endpoint: PATCH /users/:id/role", "shortDescription": {"text": "Unused endpoint: PATCH /users/:id/role"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/auth.routes.ts` declares `PATCH /users/:id/role` 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-3be912c6187ea599", "name": "Unused endpoint: GET /runs", "shortDescription": {"text": "Unused endpoint: GET /runs"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/admin.routes.ts` declares `GET /runs` 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-4bf9a993455c2376", "name": "Unused endpoint: GET /runs/:id", "shortDescription": {"text": "Unused endpoint: GET /runs/:id"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/admin.routes.ts` declares `GET /runs/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-451f3af47cd5130f", "name": "Unused endpoint: DELETE /runs/:id", "shortDescription": {"text": "Unused endpoint: DELETE /runs/:id"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/admin.routes.ts` declares `DELETE /runs/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9daeb7b1a43e9733", "name": "Unused endpoint: POST /runs", "shortDescription": {"text": "Unused endpoint: POST /runs"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/admin.routes.ts` declares `POST /runs` 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-1e3a9371ae299f2d", "name": "Unused endpoint: GET /sessions/:sessionKey/summary", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey/summary"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/admin.routes.ts` declares `GET /sessions/:sessionKey/summary` 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-00d297d86aa253fe", "name": "Unused endpoint: GET /audit", "shortDescription": {"text": "Unused endpoint: GET /audit"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/admin.routes.ts` declares `GET /audit` 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-cf8908b63906089b", "name": "Unused endpoint: POST /bulk-select", "shortDescription": {"text": "Unused endpoint: POST /bulk-select"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/angles.routes.ts` declares `POST /bulk-select` 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-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/graphs.routes.ts` declares `GET /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90631dcf4fb49f54", "name": "Unused endpoint: POST /bulk", "shortDescription": {"text": "Unused endpoint: POST /bulk"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/graphs.routes.ts` declares `POST /bulk` 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-b15d518d538de57d", "name": "Unused endpoint: GET /sessions", "shortDescription": {"text": "Unused endpoint: GET /sessions"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions` 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-45537717c2619b5c", "name": "Unused endpoint: GET /sessions/:sessionKey/status", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey/status"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions/:sessionKey/status` 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-9643484d78438d16", "name": "Unused endpoint: GET /sessions/:sessionKey", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions/:sessionKey` 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-e68e0fc4f788b543", "name": "Unused endpoint: GET /sessions/:sessionKey/laps", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey/laps"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions/:sessionKey/laps` 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-5856cdcb5d0b993d", "name": "Unused endpoint: GET /sessions/:sessionKey/positions", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey/positions"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions/:sessionKey/positions` 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-75d4669cf1f3a210", "name": "Unused endpoint: GET /sessions/:sessionKey/positions/:driverNumber", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey/positions/:driverNumber"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions/:sessionKey/positions/:driverNumber` 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-8841b825665db659", "name": "Unused endpoint: GET /sessions/:sessionKey/aggregates", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey/aggregates"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions/:sessionKey/aggregates` 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-9569ad041a819464", "name": "Unused endpoint: GET /sessions/:sessionKey/sector-bests", "shortDescription": {"text": "Unused endpoint: GET /sessions/:sessionKey/sector-bests"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /sessions/:sessionKey/sector-bests` 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-d7dfb00bb68f29e3", "name": "Unused endpoint: GET /circuits/:circuitKey", "shortDescription": {"text": "Unused endpoint: GET /circuits/:circuitKey"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `GET /circuits/:circuitKey` 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-65a667bcc38fb792", "name": "Unused endpoint: POST /ingest", "shortDescription": {"text": "Unused endpoint: POST /ingest"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `POST /ingest` 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-fad0f9d75a1e96c5", "name": "Unused endpoint: POST /sessions/:sessionKey/retry", "shortDescription": {"text": "Unused endpoint: POST /sessions/:sessionKey/retry"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `POST /sessions/:sessionKey/retry` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cfd7b9eded27642", "name": "Unused endpoint: POST /sessions/:sessionKey/retry-positions", "shortDescription": {"text": "Unused endpoint: POST /sessions/:sessionKey/retry-positions"}, "fullDescription": {"text": "`f1_backend/Backend/src/routes/telemetry.routes.ts` declares `POST /sessions/:sessionKey/retry-positions` 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/20571"}, "properties": {"repository": "suprabho/vismay", "repoUrl": "https://github.com/suprabho/vismay", "branch": "main"}, "results": [{"ruleId": "scanner-411b5bfcb331a367", "level": "note", "message": {"text": "Possibly dead Python function: judge_angle_coherence"}, "properties": {"repobilityId": "14948cf5879f32e0", "scanner": "scanner-primary", "fingerprint": "411b5bfcb331a367", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/utils/judge.py:76"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-14ca708ce5d31fdf", "level": "note", "message": {"text": "Possibly dead Python function: backend_post"}, "properties": {"repobilityId": "6f589dc0dbdbd5cb", "scanner": "scanner-primary", "fingerprint": "14ca708ce5d31fdf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/utils/resilient.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f73b9875b9a9de3f", "level": "note", "message": {"text": "Possibly dead Python function: backend_patch"}, "properties": {"repobilityId": "3b809743920c3e8b", "scanner": "scanner-primary", "fingerprint": "f73b9875b9a9de3f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/utils/resilient.py:93"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9fa0312c506c181e", "level": "note", "message": {"text": "Possibly dead Python function: extract_json_array"}, "properties": {"repobilityId": "b0aa9ccc4fefe1a7", "scanner": "scanner-primary", "fingerprint": "9fa0312c506c181e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/utils/json_parse.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c8f16b4183d18fd4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 brand/build-onepager.js:299"}, "properties": {"repobilityId": "6a3d1436c75d7689", "scanner": "scanner-primary", "fingerprint": "c8f16b4183d18fd4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7656e44ba7760971", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 f1_backend/Backend/test_zod.ts:9"}, "properties": {"repobilityId": "1273da69d3fa63a4", "scanner": "scanner-primary", "fingerprint": "7656e44ba7760971", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af30e577db78191e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/Header.tsx:86"}, "properties": {"repobilityId": "cdf11b7ea6939ea5", "scanner": "scanner-primary", "fingerprint": "af30e577db78191e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afea845ce5342683", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/IngestionPanel.tsx:328"}, "properties": {"repobilityId": "b06f694d71b4898a", "scanner": "scanner-primary", "fingerprint": "afea845ce5342683", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6528880668d1b93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/RunsPanel.tsx:217"}, "properties": {"repobilityId": "e4eb88f5a937a42e", "scanner": "scanner-primary", "fingerprint": "d6528880668d1b93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-549a7eb0b163d5e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/StoriesPanel.tsx:320"}, "properties": {"repobilityId": "854d5ee110da5afe", "scanner": "scanner-primary", "fingerprint": "549a7eb0b163d5e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-980a433d847469b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/AuditPanel.tsx:74"}, "properties": {"repobilityId": "3944a83be3428fd4", "scanner": "scanner-primary", "fingerprint": "980a433d847469b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f1c5b7268a82105", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/admin/WorkflowPanel.tsx:736"}, "properties": {"repobilityId": "9fda4da811659293", "scanner": "scanner-primary", "fingerprint": "1f1c5b7268a82105", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-08f7a9a2e88a9da2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/race/DriverToggleList.tsx:111"}, "properties": {"repobilityId": "d1c37e9ef858bdbd", "scanner": "scanner-primary", "fingerprint": "08f7a9a2e88a9da2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee37772c0b178727", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/components/race/FocusedDriverCard.tsx:44"}, "properties": {"repobilityId": "34551721e7b00ec2", "scanner": "scanner-primary", "fingerprint": "ee37772c0b178727", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f85659331de1784a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 f1_backend/Frontend/src/pages/AdminPage.tsx:81"}, "properties": {"repobilityId": "2e979d62ac11d9be", "scanner": "scanner-primary", "fingerprint": "f85659331de1784a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5db07e5c979a260c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestCircuits.ts:92"}, "properties": {"repobilityId": "d381ac6983038a66", "scanner": "scanner-primary", "fingerprint": "5db07e5c979a260c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e7290a145222a75b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/truncateRaceData.ts:29"}, "properties": {"repobilityId": "d6a8a9b380811295", "scanner": "scanner-primary", "fingerprint": "e7290a145222a75b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f9d96829100ab4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestSessions.ts:281"}, "properties": {"repobilityId": "53463153a18f969b", "scanner": "scanner-primary", "fingerprint": "5f9d96829100ab4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d67d33c64e065e1c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/ingestNews.ts:224"}, "properties": {"repobilityId": "50fe8b18a8eade1d", "scanner": "scanner-primary", "fingerprint": "d67d33c64e065e1c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98fc1bd94d1de78e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/buildStorySegments.ts:40"}, "properties": {"repobilityId": "f3979eca2313aad8", "scanner": "scanner-primary", "fingerprint": "98fc1bd94d1de78e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8081be39a0a621d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/captureReplayFixture.ts:73"}, "properties": {"repobilityId": "b214fcdfdab1f1a7", "scanner": "scanner-primary", "fingerprint": "8081be39a0a621d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eacecb932ed66d1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizf1/worker/src/backfillDriverMeta.ts:152"}, "properties": {"repobilityId": "758624059dc70dc9", "scanner": "scanner-primary", "fingerprint": "eacecb932ed66d1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1ba19ca238a0501", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/ConstructorSeasonStats.tsx:361"}, "properties": {"repobilityId": "1af69014cd5ad935", "scanner": "scanner-primary", "fingerprint": "d1ba19ca238a0501", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc4f42c22d4b7d42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/TeamProfile.tsx:141"}, "properties": {"repobilityId": "5873e2bfb64fbb2b", "scanner": "scanner-primary", "fingerprint": "cc4f42c22d4b7d42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a66732dc5009f67", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/RaceWeekendTabs.tsx:81"}, "properties": {"repobilityId": "c27a06bdc0c7c024", "scanner": "scanner-primary", "fingerprint": "5a66732dc5009f67", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e419779154e98124", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/TeamBadge.tsx:71"}, "properties": {"repobilityId": "8af2f121c02e2ee6", "scanner": "scanner-primary", "fingerprint": "e419779154e98124", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93a4eb9d46673724", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/StandingsWidgets.tsx:95"}, "properties": {"repobilityId": "2abdd0a3e1f33d2b", "scanner": "scanner-primary", "fingerprint": "93a4eb9d46673724", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81043ea1fc6ba40e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/StoryRings.tsx:20"}, "properties": {"repobilityId": "b6693ba0acd4885b", "scanner": "scanner-primary", "fingerprint": "81043ea1fc6ba40e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e212c441bc866619", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/RaceCardExpandable.tsx:76"}, "properties": {"repobilityId": "f56ea20b306f35f2", "scanner": "scanner-primary", "fingerprint": "e212c441bc866619", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-327d0e3828002a4e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/vizf1/web/components/EditorialMagazine.tsx:5"}, "properties": {"repobilityId": "bef73408af0b56aa", "scanner": "scanner-primary", "fingerprint": "327d0e3828002a4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9f2743cccaf386be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/replay/DriverToggleList.tsx:115"}, "properties": {"repobilityId": "f216664543219413", "scanner": "scanner-primary", "fingerprint": "9f2743cccaf386be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-72b4c4ecf321610c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizf1/web/components/replay/FocusedDriverCard.tsx:65"}, "properties": {"repobilityId": "7ddfc15711439f0b", "scanner": "scanner-primary", "fingerprint": "72b4c4ecf321610c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3c8dc50fd3213e59", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/vizf1/web/lib/useFollowedEntities.ts:26"}, "properties": {"repobilityId": "8532c5b2656c0e4f", "scanner": "scanner-primary", "fingerprint": "3c8dc50fd3213e59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bcd0026ced5a3e4b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/catalog/components/ModuleCard.tsx:42"}, "properties": {"repobilityId": "1da4ff0e743ab70d", "scanner": "scanner-primary", "fingerprint": "bcd0026ced5a3e4b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ddbae40d736e604b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/backfillColors.ts:144"}, "properties": {"repobilityId": "ff8829b38ded145d", "scanner": "scanner-primary", "fingerprint": "ddbae40d736e604b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c86683635dc998d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/ingest.ts:207"}, "properties": {"repobilityId": "55165a3423d64358", "scanner": "scanner-primary", "fingerprint": "c86683635dc998d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-259f66d486f1c176", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/recap.ts:727"}, "properties": {"repobilityId": "4b4b750cdf9d4c8a", "scanner": "scanner-primary", "fingerprint": "259f66d486f1c176", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3f96d6688d6996d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/fixtures.ts:150"}, "properties": {"repobilityId": "1ac4a4b83009dae7", "scanner": "scanner-primary", "fingerprint": "a3f96d6688d6996d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c463cb0ba278dceb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/seed.ts:65"}, "properties": {"repobilityId": "e7ca2a827a7eecef", "scanner": "scanner-primary", "fingerprint": "c463cb0ba278dceb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b3f766c28a94416", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/scores.ts:144"}, "properties": {"repobilityId": "7e47aa7e80bb057c", "scanner": "scanner-primary", "fingerprint": "2b3f766c28a94416", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-827a2c192f9c3d40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/evalFootballFilter.ts:103"}, "properties": {"repobilityId": "91432ea07bdddee1", "scanner": "scanner-primary", "fingerprint": "827a2c192f9c3d40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0ebed8fc80eaf41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/backfillImages.ts:64"}, "properties": {"repobilityId": "8768853d52b16cc5", "scanner": "scanner-primary", "fingerprint": "e0ebed8fc80eaf41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3dc915c2dbbf2279", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/seed-squads.ts:109"}, "properties": {"repobilityId": "dcbe6532e166def5", "scanner": "scanner-primary", "fingerprint": "3dc915c2dbbf2279", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a7a35fe9b62140e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/footshorts/worker/src/entityResolver.ts:119"}, "properties": {"repobilityId": "69e85cd067a65135", "scanner": "scanner-primary", "fingerprint": "1a7a35fe9b62140e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67d8994ee9373c3f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/StoryRings.tsx:65"}, "properties": {"repobilityId": "8dd4f623f2f91d2f", "scanner": "scanner-primary", "fingerprint": "67d8994ee9373c3f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c2c55eefc5ce59b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/AppShell.tsx:126"}, "properties": {"repobilityId": "6ba1e7d419fce899", "scanner": "scanner-primary", "fingerprint": "1c2c55eefc5ce59b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5af9b1b842870ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/fifa-wc26/TeamDetail.tsx:218"}, "properties": {"repobilityId": "edfc9a07ceacef8a", "scanner": "scanner-primary", "fingerprint": "b5af9b1b842870ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-342db98a6d376a44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/components/ForYouMatchFeed/CardShell.tsx:67"}, "properties": {"repobilityId": "626ac572a8ca1e24", "scanner": "scanner-primary", "fingerprint": "342db98a6d376a44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e815cfe36b3c1442", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/app/about-us/page.tsx:1136"}, "properties": {"repobilityId": "24ff065bd18081f2", "scanner": "scanner-primary", "fingerprint": "e815cfe36b3c1442", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-466adc0c3849ab89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/footshorts/web/app/story/page.tsx:201"}, "properties": {"repobilityId": "101dba98c7a40600", "scanner": "scanner-primary", "fingerprint": "466adc0c3849ab89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb571657fbad3744", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/migrate-hero-split.ts:93"}, "properties": {"repobilityId": "a2afb4f3bcc43c4a", "scanner": "scanner-primary", "fingerprint": "fb571657fbad3744", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6aff5be08ac838ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/upload-flags.ts:71"}, "properties": {"repobilityId": "687c5922413d13a5", "scanner": "scanner-primary", "fingerprint": "6aff5be08ac838ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b38a7c3355e33d62", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/populate-display-order.ts:42"}, "properties": {"repobilityId": "ad5144f6e0a1d8ea", "scanner": "scanner-primary", "fingerprint": "b38a7c3355e33d62", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03f07c31a6247857", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/heygen-generate.ts:82"}, "properties": {"repobilityId": "634f991bdceb7c50", "scanner": "scanner-primary", "fingerprint": "03f07c31a6247857", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52b51e7558c85836", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-share.ts:115"}, "properties": {"repobilityId": "92a641479bd5a26f", "scanner": "scanner-primary", "fingerprint": "52b51e7558c85836", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05ed43198180cdf5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-pdf.ts:67"}, "properties": {"repobilityId": "32913d925e950d4b", "scanner": "scanner-primary", "fingerprint": "05ed43198180cdf5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa136ab627556e70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-audio.ts:58"}, "properties": {"repobilityId": "619dc46fbbc6065c", "scanner": "scanner-primary", "fingerprint": "fa136ab627556e70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fba3e5d22164950", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/migrate-content-to-db.ts:45"}, "properties": {"repobilityId": "87a4fedbb3e0ff67", "scanner": "scanner-primary", "fingerprint": "6fba3e5d22164950", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4354647900370e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/ingest-source.ts:106"}, "properties": {"repobilityId": "296b9041511c51d4", "scanner": "scanner-primary", "fingerprint": "b4354647900370e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f641406cbf9e422", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/tag-topics.ts:80"}, "properties": {"repobilityId": "4ce6f833e581c8ad", "scanner": "scanner-primary", "fingerprint": "8f641406cbf9e422", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-905d7dce83817e28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/generate-video.ts:119"}, "properties": {"repobilityId": "1752ab3e3c48cd76", "scanner": "scanner-primary", "fingerprint": "905d7dce83817e28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-16972e3525ecb279", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/apply-delimitation-mobile-fixes.ts:58"}, "properties": {"repobilityId": "b649166bdaa86716", "scanner": "scanner-primary", "fingerprint": "16972e3525ecb279", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a5de476d6d13a20", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/ingest.ts:169"}, "properties": {"repobilityId": "bea72a1a8cd34ee1", "scanner": "scanner-primary", "fingerprint": "9a5de476d6d13a20", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84a3dee56e831a3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/check-status.ts:14"}, "properties": {"repobilityId": "680e5d9c847809f2", "scanner": "scanner-primary", "fingerprint": "84a3dee56e831a3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6eaac75f4ffa824e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/recompute-mention-counts.ts:28"}, "properties": {"repobilityId": "c240e3449b63fe01", "scanner": "scanner-primary", "fingerprint": "6eaac75f4ffa824e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f865f26422901ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/ner.ts:317"}, "properties": {"repobilityId": "7ad0824f5e617858", "scanner": "scanner-primary", "fingerprint": "4f865f26422901ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-676bf921d4d0afe7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/seed-doj-bondi.ts:76"}, "properties": {"repobilityId": "40a2a9f96e0bf2e9", "scanner": "scanner-primary", "fingerprint": "676bf921d4d0afe7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aed2146542d50027", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/sample-ocr.ts:20"}, "properties": {"repobilityId": "07cb5e55cb747b55", "scanner": "scanner-primary", "fingerprint": "aed2146542d50027", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9a4b81c2d2bfa0a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/crawl.ts:93"}, "properties": {"repobilityId": "540ca7b9c2ac88eb", "scanner": "scanner-primary", "fingerprint": "e9a4b81c2d2bfa0a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-283ee938b23c9f00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/check-entities.ts:12"}, "properties": {"repobilityId": "c14980888bfd4cb0", "scanner": "scanner-primary", "fingerprint": "283ee938b23c9f00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45704f85441c7e37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/substories.ts:136"}, "properties": {"repobilityId": "1e967d18bbd1d0ae", "scanner": "scanner-primary", "fingerprint": "45704f85441c7e37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14daa147dbe65008", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/debug-ocr.ts:18"}, "properties": {"repobilityId": "2c898aac3da50006", "scanner": "scanner-primary", "fingerprint": "14daa147dbe65008", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-787dc9d12e41e7a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/import-curated.ts:113"}, "properties": {"repobilityId": "b85793acd7eeab80", "scanner": "scanner-primary", "fingerprint": "787dc9d12e41e7a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a2c16c19b779bff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/dedupe-entities.ts:123"}, "properties": {"repobilityId": "cb3a7967d3e6647c", "scanner": "scanner-primary", "fingerprint": "4a2c16c19b779bff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-125afd995dc9aefa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/epstein/geocode.ts:138"}, "properties": {"repobilityId": "4def6b3c991e933f", "scanner": "scanner-primary", "fingerprint": "125afd995dc9aefa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac6032256fd9e37f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/fifa-wc26/import.ts:234"}, "properties": {"repobilityId": "023125f90f80ed23", "scanner": "scanner-primary", "fingerprint": "ac6032256fd9e37f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6640b087097e8436", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/social/ingest-youtube.ts:156"}, "properties": {"repobilityId": "128977d003a084b0", "scanner": "scanner-primary", "fingerprint": "6640b087097e8436", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e0f3fd77428f1f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/generate-summaries.ts:268"}, "properties": {"repobilityId": "cca27f190d48c096", "scanner": "scanner-primary", "fingerprint": "3e0f3fd77428f1f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1553980b215c3722", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-iea-oil-prices.ts:142"}, "properties": {"repobilityId": "a645d1e6d6c79fa5", "scanner": "scanner-primary", "fingerprint": "1553980b215c3722", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a28f880653f2a13a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/scrape-news.ts:124"}, "properties": {"repobilityId": "bcabfa78ee4fb271", "scanner": "scanner-primary", "fingerprint": "a28f880653f2a13a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a993eff17d686f3f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-owid.ts:130"}, "properties": {"repobilityId": "e296d83c164bbc20", "scanner": "scanner-primary", "fingerprint": "a993eff17d686f3f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5195e4deca8c21fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/import.ts:370"}, "properties": {"repobilityId": "868a8eb6074366c3", "scanner": "scanner-primary", "fingerprint": "5195e4deca8c21fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8ddf27edba38930", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/fetch-lyrics.ts:214"}, "properties": {"repobilityId": "4170a082cf51de1b", "scanner": "scanner-primary", "fingerprint": "b8ddf27edba38930", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28c1b33c7a958ec2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/vizmaya-fyi/scripts/coke-studio/extract-places.ts:487"}, "properties": {"repobilityId": "c13d8d7c31abc8f7", "scanner": "scanner-primary", "fingerprint": "28c1b33c7a958ec2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d54a45a3042e837", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/AllStoriesClient.tsx:105"}, "properties": {"repobilityId": "070e85c7de4ff09f", "scanner": "scanner-primary", "fingerprint": "0d54a45a3042e837", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e8ae6832829e78f1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/JsonLd.tsx:23"}, "properties": {"repobilityId": "aa5fbdfa5bde9c46", "scanner": "scanner-primary", "fingerprint": "e8ae6832829e78f1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-028be3595fcd64bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/MapPickerModal.tsx:285"}, "properties": {"repobilityId": "d26795e8c5949a8b", "scanner": "scanner-primary", "fingerprint": "028be3595fcd64bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5385b4e1fce004ee", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/HomeClient.tsx:391"}, "properties": {"repobilityId": "05b6a9f3275e71b8", "scanner": "scanner-primary", "fingerprint": "5385b4e1fce004ee", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-aabe8e9deb3ce0ce", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/vizmaya-fyi/components/demo/DemoPage.tsx:223"}, "properties": {"repobilityId": "f0bfd5df555193a7", "scanner": "scanner-primary", "fingerprint": "aabe8e9deb3ce0ce", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-828941ba030dcc39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/wallet-geo/BreakdownBars.tsx:24"}, "properties": {"repobilityId": "a3d7d01dcf24921b", "scanner": "scanner-primary", "fingerprint": "828941ba030dcc39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e11d223255570805", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx:1022"}, "properties": {"repobilityId": "b1f44002706ccd09", "scanner": "scanner-primary", "fingerprint": "e11d223255570805", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4abdcbfc1d4bd7e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:544"}, "properties": {"repobilityId": "934338acc76d39bd", "scanner": "scanner-primary", "fingerprint": "4abdcbfc1d4bd7e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75ba1c8706ccf0ef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/components/autoplay/AutoplayMapEditor.tsx:300"}, "properties": {"repobilityId": "b83839aaf91d4bf0", "scanner": "scanner-primary", "fingerprint": "75ba1c8706ccf0ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0cbe88761aede31c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/AirportDetail.tsx:86"}, "properties": {"repobilityId": "d3fc111afc0ecd5f", "scanner": "scanner-primary", "fingerprint": "0cbe88761aede31c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ce6255cdefc3435", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/EpsteinMap.tsx:807"}, "properties": {"repobilityId": "bb36e365aaf2e152", "scanner": "scanner-primary", "fingerprint": "9ce6255cdefc3435", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0245cddb43c6268c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:297"}, "properties": {"repobilityId": "563b4adf0fc2a671", "scanner": "scanner-primary", "fingerprint": "0245cddb43c6268c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2e81343b0fb3e70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/epstein/BlackbookDetail.tsx:160"}, "properties": {"repobilityId": "c24c495e1f0c4cb8", "scanner": "scanner-primary", "fingerprint": "a2e81343b0fb3e70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83cf2f3716780bc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/wallet-geo/CountryDetail.tsx:97"}, "properties": {"repobilityId": "ae6477a8cc73a0af", "scanner": "scanner-primary", "fingerprint": "83cf2f3716780bc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6cf9a321602c8b2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/wallet-geo/WalletGeoThemePreview.tsx:62"}, "properties": {"repobilityId": "a9167acf7c6acb61", "scanner": "scanner-primary", "fingerprint": "6cf9a321602c8b2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-799d728803730fd3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/energy-profile/CountryDetail.tsx:83"}, "properties": {"repobilityId": "c2b0d87e700cb0cf", "scanner": "scanner-primary", "fingerprint": "799d728803730fd3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f65185599e9d7f60", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/vizmaya-fyi/app/coke-studio/PlaceDetail.tsx:104"}, "properties": {"repobilityId": "7c0dc1ab5986e5da", "scanner": "scanner-primary", "fingerprint": "f65185599e9d7f60", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ccc35a85686930a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/scripts/extract-compose-source.ts:56"}, "properties": {"repobilityId": "0d4bc68f36803a66", "scanner": "scanner-primary", "fingerprint": "1ccc35a85686930a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9529c9dbabaaca71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/scripts/createAdminUser.ts:43"}, "properties": {"repobilityId": "2e934475b6065e47", "scanner": "scanner-primary", "fingerprint": "9529c9dbabaaca71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58f4c684fa5d9397", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/AssistantLauncher.tsx:369"}, "properties": {"repobilityId": "455436add5753c54", "scanner": "scanner-primary", "fingerprint": "58f4c684fa5d9397", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f50fcc0b4823957", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DeckComposerPanel.tsx:288"}, "properties": {"repobilityId": "5e176c67d46bca27", "scanner": "scanner-primary", "fingerprint": "9f50fcc0b4823957", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-785ce56288dd231f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/FileActions.tsx:61"}, "properties": {"repobilityId": "a87425d2886e03f6", "scanner": "scanner-primary", "fingerprint": "785ce56288dd231f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f8d7acc443c0bac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/ThemeEditor.tsx:237"}, "properties": {"repobilityId": "9fd4449bc42b56d7", "scanner": "scanner-primary", "fingerprint": "5f8d7acc443c0bac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70aa7eaeb2a40197", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/MapPickerModal.tsx:350"}, "properties": {"repobilityId": "b246ada9a74be5d6", "scanner": "scanner-primary", "fingerprint": "70aa7eaeb2a40197", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3fdb025f0c96c6d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DemoEditorClient.tsx:126"}, "properties": {"repobilityId": "16fb82074a97bd38", "scanner": "scanner-primary", "fingerprint": "3fdb025f0c96c6d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edcc2c076f99e7d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/EditorClient.tsx:289"}, "properties": {"repobilityId": "3730de1422b9d948", "scanner": "scanner-primary", "fingerprint": "edcc2c076f99e7d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9927385ddf628449", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/ChartEditorClient.tsx:77"}, "properties": {"repobilityId": "90826725ae2bfaa5", "scanner": "scanner-primary", "fingerprint": "9927385ddf628449", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-05123b2f627c252a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/YamlConfigEditor.tsx:70"}, "properties": {"repobilityId": "2a8039105129bffd", "scanner": "scanner-primary", "fingerprint": "05123b2f627c252a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9545e4ead85a7f08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/DraftsList.tsx:64"}, "properties": {"repobilityId": "e0113543ffdb3c7c", "scanner": "scanner-primary", "fingerprint": "9545e4ead85a7f08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc0c852295965a4a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/NarrationEditor.tsx:343"}, "properties": {"repobilityId": "e7152b7e9f7d8ead", "scanner": "scanner-primary", "fingerprint": "dc0c852295965a4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d4048e62cad56c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/AssetsPanel.tsx:201"}, "properties": {"repobilityId": "5c0a34cbbe250774", "scanner": "scanner-primary", "fingerprint": "3d4048e62cad56c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71f57df7da3b1ade", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SharePostRenderPanel.tsx:119"}, "properties": {"repobilityId": "6ed97349b5bc3f5a", "scanner": "scanner-primary", "fingerprint": "71f57df7da3b1ade", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e0ad695fc02b94e", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/components/vizmaya/social/SocialSubTabs.tsx:23"}, "properties": {"repobilityId": "9ae7f378c2bbcdcc", "scanner": "scanner-primary", "fingerprint": "1e0ad695fc02b94e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-9ee5f5699449c654", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/PostEditForm.tsx:392"}, "properties": {"repobilityId": "f1f692bcd7cfd3f7", "scanner": "scanner-primary", "fingerprint": "9ee5f5699449c654", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40b8d81b13e2a055", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SlidesPostRenderPanel.tsx:61"}, "properties": {"repobilityId": "cd5705572c257684", "scanner": "scanner-primary", "fingerprint": "40b8d81b13e2a055", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb707a74170a7dab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:217"}, "properties": {"repobilityId": "ba8e8bf7b0849821", "scanner": "scanner-primary", "fingerprint": "eb707a74170a7dab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a45475f9a1ef5c4", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:143"}, "properties": {"repobilityId": "b278651d1cc321dd", "scanner": "scanner-primary", "fingerprint": "5a45475f9a1ef5c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-e1baaf8689f625ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/vizmaya/social/VideoPostRenderPanel.tsx:103"}, "properties": {"repobilityId": "c639970f4bdc46da", "scanner": "scanner-primary", "fingerprint": "e1baaf8689f625ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7739900dfafd521f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/section/StoriesListClient.tsx:168"}, "properties": {"repobilityId": "3581ba4c349fa340", "scanner": "scanner-primary", "fingerprint": "7739900dfafd521f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16fe302dcb3ad71b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/section/StoriesManager.tsx:394"}, "properties": {"repobilityId": "8be32deb7daed8a5", "scanner": "scanner-primary", "fingerprint": "16fe302dcb3ad71b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a517e1af0d31c141", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/footshorts/sharecard/ShareCardCanvas.tsx:144"}, "properties": {"repobilityId": "75e756d8b3cac2b5", "scanner": "scanner-primary", "fingerprint": "a517e1af0d31c141", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-097fe699c439fc69", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:1215"}, "properties": {"repobilityId": "f5ba4c10bb90ec5a", "scanner": "scanner-primary", "fingerprint": "097fe699c439fc69", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84418721dd89209b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/admin/components/canvas/ChartEditPanel.tsx:211"}, "properties": {"repobilityId": "9a1cb51d4dc12945", "scanner": "scanner-primary", "fingerprint": "84418721dd89209b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2dc217edd1c0f29e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/ImageEditModal.tsx:191"}, "properties": {"repobilityId": "838cfc9ec8c618c6", "scanner": "scanner-primary", "fingerprint": "2dc217edd1c0f29e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e105052a856c4cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/FootballDataModal.tsx:222"}, "properties": {"repobilityId": "ddc1a5477955a171", "scanner": "scanner-primary", "fingerprint": "6e105052a856c4cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fafc78ca11386cea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/MaterializedSectionCard.tsx:46"}, "properties": {"repobilityId": "a33edc8382f4d89d", "scanner": "scanner-primary", "fingerprint": "fafc78ca11386cea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e243abf9ae43ff3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/ComposeFlowPanel.tsx:234"}, "properties": {"repobilityId": "7f115c4b45c45ddb", "scanner": "scanner-primary", "fingerprint": "0e243abf9ae43ff3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11266e50194124f9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/SourceLibraryModal.tsx:275"}, "properties": {"repobilityId": "b8b83de5049ff414", "scanner": "scanner-primary", "fingerprint": "11266e50194124f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d850d13a1f6c642c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/components/canvas/compose/ChartCard.tsx:37"}, "properties": {"repobilityId": "b09e506fc0d5083f", "scanner": "scanner-primary", "fingerprint": "d850d13a1f6c642c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-723bec61b372a942", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/admin/app/api/vizmaya/sign-story-links/route.ts:36"}, "properties": {"repobilityId": "0795948dd8fcee89", "scanner": "scanner-primary", "fingerprint": "723bec61b372a942", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5ca1f74c2f3165f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/app/api/vizmaya/social/posts/[id]/render-share/route.ts:113"}, "properties": {"repobilityId": "c18c573f0a00aeeb", "scanner": "scanner-primary", "fingerprint": "5ca1f74c2f3165f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e26b4df53cb19020", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/admin/app/api/vizmaya/demos/[id]/render-share/route.ts:88"}, "properties": {"repobilityId": "6d6e13cb9fbae5ad", "scanner": "scanner-primary", "fingerprint": "e26b4df53cb19020", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12e8efe98ca51747", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/apps/[slug]/page.tsx:53"}, "properties": {"repobilityId": "7a08d955d7e17e53", "scanner": "scanner-primary", "fingerprint": "12e8efe98ca51747", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d69dec8a38170f56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/apps/page.tsx:26"}, "properties": {"repobilityId": "9180360d3ed4f426", "scanner": "scanner-primary", "fingerprint": "d69dec8a38170f56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f186caffaff85b14", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/authors/page.tsx:34"}, "properties": {"repobilityId": "3cbf0de870a7defb", "scanner": "scanner-primary", "fingerprint": "f186caffaff85b14", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d01299a17efea376", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/(tabbed)/epics/page.tsx:31"}, "properties": {"repobilityId": "5308faaf9941bee1", "scanner": "scanner-primary", "fingerprint": "d01299a17efea376", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6f36ed7dda3fca3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:552"}, "properties": {"repobilityId": "cf582bca99df33c1", "scanner": "scanner-primary", "fingerprint": "d6f36ed7dda3fca3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fcc2b477ec692e70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/wallet-geo/WalletGeoThemePreview.tsx:62"}, "properties": {"repobilityId": "b6b1e9c1a80a8fa3", "scanner": "scanner-primary", "fingerprint": "fcc2b477ec692e70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e4be3083d2a409f", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 apps/admin/app/[appSlug]/(tabbed)/recaps/page.tsx:98"}, "properties": {"repobilityId": "75de0b7e1ccbdd89", "scanner": "scanner-primary", "fingerprint": "0e4be3083d2a409f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-69923622c0234b8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/admin/app/[appSlug]/(tabbed)/epics/page.tsx:43"}, "properties": {"repobilityId": "bcde299d0b4977e7", "scanner": "scanner-primary", "fingerprint": "69923622c0234b8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82aec2ff5e33adb5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/eval-entities/src/runner.ts:48"}, "properties": {"repobilityId": "dde88ceabd30efc2", "scanner": "scanner-primary", "fingerprint": "82aec2ff5e33adb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0c521fe1a9ce9ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/admin-core/src/actionToken.smoke.ts:13"}, "properties": {"repobilityId": "e0aa02781baa94e4", "scanner": "scanner-primary", "fingerprint": "e0c521fe1a9ce9ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fcf4085c1b50645", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/admin-core/src/signedUrl.smoke.ts:18"}, "properties": {"repobilityId": "18386fc4162ae377", "scanner": "scanner-primary", "fingerprint": "6fcf4085c1b50645", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fa8d40370e99e23", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 packages/admin-core/src/components/AdminTabs.tsx:31"}, "properties": {"repobilityId": "4ca236acf68a0ecb", "scanner": "scanner-primary", "fingerprint": "1fa8d40370e99e23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-b96f5ae71c2cd9ec", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/ui/src/grid/StoryGridStyles.tsx:124"}, "properties": {"repobilityId": "e3d7eb279d5f8a7d", "scanner": "scanner-primary", "fingerprint": "b96f5ae71c2cd9ec", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b49c45bff1c56098", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/content-source/src/storyAudioGenerate.ts:682"}, "properties": {"repobilityId": "66a8584826eddc80", "scanner": "scanner-primary", "fingerprint": "b49c45bff1c56098", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21cada51eaf74837", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/run.ts:105"}, "properties": {"repobilityId": "6636d9d3138d2dcb", "scanner": "scanner-primary", "fingerprint": "21cada51eaf74837", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-631d2650c5785f4e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/dumpPrompts.ts:41"}, "properties": {"repobilityId": "50fdf185a21dd892", "scanner": "scanner-primary", "fingerprint": "631d2650c5785f4e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2be6f5c7aba14262", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/recapForeground.test.ts:63"}, "properties": {"repobilityId": "806e734d54e8fa7b", "scanner": "scanner-primary", "fingerprint": "2be6f5c7aba14262", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b43ae8bd91dcb55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/mapStoryGuards.test.ts:12"}, "properties": {"repobilityId": "cf2dfedd177c8e00", "scanner": "scanner-primary", "fingerprint": "2b43ae8bd91dcb55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a915c8271f90af5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/packs.test.ts:39"}, "properties": {"repobilityId": "29e234b64dac4598", "scanner": "scanner-primary", "fingerprint": "9a915c8271f90af5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ce30f2c1536733a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/pinRepair.test.ts:15"}, "properties": {"repobilityId": "3d695acf0d078549", "scanner": "scanner-primary", "fingerprint": "6ce30f2c1536733a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-980008a70e4d82b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/evalOutline.ts:126"}, "properties": {"repobilityId": "0fb4400e3d93748c", "scanner": "scanner-primary", "fingerprint": "980008a70e4d82b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e512f424f8299ba3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/recapGenShapes.test.ts:100"}, "properties": {"repobilityId": "10167d1318e59325", "scanner": "scanner-primary", "fingerprint": "e512f424f8299ba3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4eef9a42ce015d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/subsections.test.ts:32"}, "properties": {"repobilityId": "33f5610d44499678", "scanner": "scanner-primary", "fingerprint": "f4eef9a42ce015d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-257444e2be90f155", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/story-pipeline/src/__fixtures__/buildSample.ts:62"}, "properties": {"repobilityId": "b33116e82e0d34e6", "scanner": "scanner-primary", "fingerprint": "257444e2be90f155", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4a040efa7359a20", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/MatchTile.tsx:97"}, "properties": {"repobilityId": "309cbd83d601a670", "scanner": "scanner-primary", "fingerprint": "f4a040efa7359a20", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3c226799309e60a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/StandingsTable.tsx:55"}, "properties": {"repobilityId": "de10e9a980e7edf5", "scanner": "scanner-primary", "fingerprint": "3c226799309e60a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fd14b524c77ad40", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/footshorts-viz/src/web/BracketTree.tsx:587"}, "properties": {"repobilityId": "8462d055936e5bc6", "scanner": "scanner-primary", "fingerprint": "0fd14b524c77ad40", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-969e4fa34a9b0d1a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 verticals/footshorts-viz/src/web/BracketTree.tsx:631"}, "properties": {"repobilityId": "820ef498273243c3", "scanner": "scanner-primary", "fingerprint": "969e4fa34a9b0d1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bbcbaf5392baf3ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/import-glb.ts:45"}, "properties": {"repobilityId": "de66d0ba02b4c22c", "scanner": "scanner-primary", "fingerprint": "bbcbaf5392baf3ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43632a7c1ded2ad0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/convert-starship-assets.ts:95"}, "properties": {"repobilityId": "a590cde943ebecce", "scanner": "scanner-primary", "fingerprint": "43632a7c1ded2ad0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c25d26bcd04a616", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/inspect-source-stls.ts:31"}, "properties": {"repobilityId": "07930d8523a7066c", "scanner": "scanner-primary", "fingerprint": "0c25d26bcd04a616", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0697324cb0465477", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verticals/starship-viz/scripts/inspect-glb.ts:30"}, "properties": {"repobilityId": "ee77134dedfa8b9e", "scanner": "scanner-primary", "fingerprint": "0697324cb0465477", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fb603b3cb39f700", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verticals/kidzovo-viz/src/index.ts:31"}, "properties": {"repobilityId": "99305aa18f5eac12", "scanner": "scanner-primary", "fingerprint": "1fb603b3cb39f700", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-350db5023ce16446", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verticals/kidzovo-viz/src/__fixtures__/riveInputSchema.test.ts:11"}, "properties": {"repobilityId": "cd73ff67d9ba333d", "scanner": "scanner-primary", "fingerprint": "350db5023ce16446", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db36964a63159562", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 verticals/f1-viz/src/index.ts:36"}, "properties": {"repobilityId": "70f707068eaca248", "scanner": "scanner-primary", "fingerprint": "db36964a63159562", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e4d072a9cdf4a5f5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 verticals/f1-viz/src/types.ts:105"}, "properties": {"repobilityId": "770fc7c114c53f7f", "scanner": "scanner-primary", "fingerprint": "e4d072a9cdf4a5f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d98cab67da65e3e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/PositionChart.tsx:50"}, "properties": {"repobilityId": "5f8b207551ba0a57", "scanner": "scanner-primary", "fingerprint": "d98cab67da65e3e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e32883aa590fc33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/DriverStandings.tsx:43"}, "properties": {"repobilityId": "a0430c258768577c", "scanner": "scanner-primary", "fingerprint": "1e32883aa590fc33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ddfb19bfaa881c98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/RaceRow.tsx:53"}, "properties": {"repobilityId": "e594d21be9fd2dff", "scanner": "scanner-primary", "fingerprint": "ddfb19bfaa881c98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-632777e3607967f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/replay/DriverToggleList.tsx:115"}, "properties": {"repobilityId": "e1e1c66e26d382e3", "scanner": "scanner-primary", "fingerprint": "632777e3607967f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e9f3d3dc58865db2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 verticals/f1-viz/src/web/replay/FocusedDriverCard.tsx:65"}, "properties": {"repobilityId": "72c00ff4c934d116", "scanner": "scanner-primary", "fingerprint": "e9f3d3dc58865db2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc4a3cd236a28d9e", "level": "error", "message": {"text": "Possible secret in f1_backend/Frontend/src/config/firebase.ts"}, "properties": {"repobilityId": "57da824370f0b666", "scanner": "scanner-primary", "fingerprint": "fc4a3cd236a28d9e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/Frontend/src/config/firebase.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-732927a97a033c45", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/AllStoriesClient.tsx:105"}, "properties": {"repobilityId": "7a4e93ba9e1edc03", "scanner": "scanner-primary", "fingerprint": "732927a97a033c45", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/components/AllStoriesClient.tsx"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-af33ea4d04252ba9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/JsonLd.tsx:23"}, "properties": {"repobilityId": "b6266218e00979b8", "scanner": "scanner-primary", "fingerprint": "af33ea4d04252ba9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/components/JsonLd.tsx"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-6499c3d33517932f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/HomeClient.tsx:391"}, "properties": {"repobilityId": "db92871d8aa125d2", "scanner": "scanner-primary", "fingerprint": "6499c3d33517932f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/components/HomeClient.tsx"}, "region": {"startLine": 391}}}]}, {"ruleId": "scanner-44257e70ce3cd205", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/vizmaya-fyi/components/demo/DemoPage.tsx:223"}, "properties": {"repobilityId": "2f876d14e60b9162", "scanner": "scanner-primary", "fingerprint": "44257e70ce3cd205", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/components/demo/DemoPage.tsx"}, "region": {"startLine": 223}}}]}, {"ruleId": "scanner-4aceaab03c813688", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/vizmaya-fyi/lib/storyVideoRender.ts:20"}, "properties": {"repobilityId": "6c788537a7ba760a", "scanner": "scanner-primary", "fingerprint": "4aceaab03c813688", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/lib/storyVideoRender.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-ebb5ebc0c5318ff7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/mcp/src/tools/renderStoryVideo.ts:17"}, "properties": {"repobilityId": "44dd07bde4b703a9", "scanner": "scanner-primary", "fingerprint": "ebb5ebc0c5318ff7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mcp/src/tools/renderStoryVideo.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-b4997d35f620e94a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/ui/src/grid/StoryGridStyles.tsx:124"}, "properties": {"repobilityId": "c8e2e78ae4735d3a", "scanner": "scanner-primary", "fingerprint": "b4997d35f620e94a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/src/grid/StoryGridStyles.tsx"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-d6bb8763ddb456cb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/content-source/src/storyAudioGenerate.ts:35"}, "properties": {"repobilityId": "2dc2f88af9bb1e3c", "scanner": "scanner-primary", "fingerprint": "d6bb8763ddb456cb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/content-source/src/storyAudioGenerate.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-8d71bbbc397218e8", "level": "note", "message": {"text": "Very large file: f1_backend/AI/app/pipelines/telemetry_graph.py (2049 lines)"}, "properties": {"repobilityId": "49e04a4eb87ec0c9", "scanner": "scanner-primary", "fingerprint": "8d71bbbc397218e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-560b4a48cfa4b606", "level": "note", "message": {"text": "Very large file: f1_backend/AI/app/routes/ingest.py (1225 lines)"}, "properties": {"repobilityId": "611b4254982c286e", "scanner": "scanner-primary", "fingerprint": "560b4a48cfa4b606", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b21d0b61595f36ae", "level": "note", "message": {"text": "Very large file: apps/vizmaya-fyi/components/map-edit/MapEditShell.tsx (1524 lines)"}, "properties": {"repobilityId": "8ef9d65a813611af", "scanner": "scanner-primary", "fingerprint": "b21d0b61595f36ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ff9fd0bdc8da9201", "level": "note", "message": {"text": "Very large file: apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx (1284 lines)"}, "properties": {"repobilityId": "75e64c996ec4769d", "scanner": "scanner-primary", "fingerprint": "ff9fd0bdc8da9201", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-01f533e47c8c9b42", "level": "note", "message": {"text": "Very large file: apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx (1349 lines)"}, "properties": {"repobilityId": "6db35dbd64a9e8ed", "scanner": "scanner-primary", "fingerprint": "01f533e47c8c9b42", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-407399e0583ade44", "level": "note", "message": {"text": "Very large file: apps/admin/components/canvas/CanvasClient.tsx (4977 lines)"}, "properties": {"repobilityId": "6a6d3d108c50af4b", "scanner": "scanner-primary", "fingerprint": "407399e0583ade44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "2679d7354500d10c", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-7b1467a2d46057d2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/vizf1/brand/package.json"}, "properties": {"repobilityId": "2510a2dd87931763", "scanner": "scanner-primary", "fingerprint": "7b1467a2d46057d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizf1/brand/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e422ca11a9a39a47", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/vizf1/worker/package.json"}, "properties": {"repobilityId": "2e63cf1fc1e8016d", "scanner": "scanner-primary", "fingerprint": "e422ca11a9a39a47", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizf1/worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a5cb2d395593363", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/vizf1/web/package.json"}, "properties": {"repobilityId": "d6c55177bbb65a37", "scanner": "scanner-primary", "fingerprint": "1a5cb2d395593363", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizf1/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26ef93114638c40f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/kidzovo/web/package.json"}, "properties": {"repobilityId": "36df8995ba8b9312", "scanner": "scanner-primary", "fingerprint": "26ef93114638c40f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/kidzovo/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-61f1ebc8bd817a98", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/catalog/package.json"}, "properties": {"repobilityId": "9172dd58819e49d2", "scanner": "scanner-primary", "fingerprint": "61f1ebc8bd817a98", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/catalog/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-34b6e10a474d80c9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/brand/package.json"}, "properties": {"repobilityId": "b236c794f8130bb1", "scanner": "scanner-primary", "fingerprint": "34b6e10a474d80c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/footshorts/brand/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b1a9a8d8c9919545", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/shared/package.json"}, "properties": {"repobilityId": "8e6aa0d1857eb0b4", "scanner": "scanner-primary", "fingerprint": "b1a9a8d8c9919545", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/footshorts/shared/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-081b7d4df7a66238", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/worker/package.json"}, "properties": {"repobilityId": "d8b02fd0424aa9d7", "scanner": "scanner-primary", "fingerprint": "081b7d4df7a66238", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/footshorts/worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a30c47ff0da6f7e8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/mobile/package.json"}, "properties": {"repobilityId": "7f30357e9727f347", "scanner": "scanner-primary", "fingerprint": "a30c47ff0da6f7e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/footshorts/mobile/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d9e871cae377e9f0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/footshorts/web/package.json"}, "properties": {"repobilityId": "bb9f3e7045b8b0eb", "scanner": "scanner-primary", "fingerprint": "d9e871cae377e9f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/footshorts/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac995121dee32f35", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/vizmaya-fyi/package.json"}, "properties": {"repobilityId": "7f4482bce081e62c", "scanner": "scanner-primary", "fingerprint": "ac995121dee32f35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c30f715681a4005", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/admin/package.json"}, "properties": {"repobilityId": "17d56c8f05bdd359", "scanner": "scanner-primary", "fingerprint": "5c30f715681a4005", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/admin/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-52a9d70913546778", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/story-reader/package.json"}, "properties": {"repobilityId": "b403f91bf026679a", "scanner": "scanner-primary", "fingerprint": "52a9d70913546778", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/story-reader/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6055a25046540cbc", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/eval-entities/package.json"}, "properties": {"repobilityId": "304ec9feb08aa64a", "scanner": "scanner-primary", "fingerprint": "6055a25046540cbc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/eval-entities/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e20fb9513afe363f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/admin-core/package.json"}, "properties": {"repobilityId": "d65da5682a2e3ed5", "scanner": "scanner-primary", "fingerprint": "e20fb9513afe363f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/admin-core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b9c03e4b51641936", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/mcp/package.json"}, "properties": {"repobilityId": "7b57a55f1ea73746", "scanner": "scanner-primary", "fingerprint": "b9c03e4b51641936", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mcp/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-209ffc0ce582f80f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/story-embed/package.json"}, "properties": {"repobilityId": "66c3ff266db3eac9", "scanner": "scanner-primary", "fingerprint": "209ffc0ce582f80f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/story-embed/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2d6ddb5772eeb54", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/viz-engine/package.json"}, "properties": {"repobilityId": "7d5a3a54dd7b5b5a", "scanner": "scanner-primary", "fingerprint": "c2d6ddb5772eeb54", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/viz-engine/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-23030c4e1f1f245c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/content-source/package.json"}, "properties": {"repobilityId": "874980252abf74e9", "scanner": "scanner-primary", "fingerprint": "23030c4e1f1f245c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/content-source/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-11b0da057f17c055", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/verticals/package.json"}, "properties": {"repobilityId": "b937548feb237ee3", "scanner": "scanner-primary", "fingerprint": "11b0da057f17c055", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/verticals/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a9b79a1dd2898980", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ai-gateway/package.json"}, "properties": {"repobilityId": "c7a14be2b332e6bb", "scanner": "scanner-primary", "fingerprint": "a9b79a1dd2898980", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-gateway/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7d9d621191281d04", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/viz-admin/package.json"}, "properties": {"repobilityId": "3dbb5e5013f78da2", "scanner": "scanner-primary", "fingerprint": "7d9d621191281d04", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/viz-admin/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dabdff6f1141eb31", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/story-pipeline/package.json"}, "properties": {"repobilityId": "13504e401509be6f", "scanner": "scanner-primary", "fingerprint": "dabdff6f1141eb31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/story-pipeline/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1d86c43d91fe52ee", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: verticals/footshorts-viz/package.json"}, "properties": {"repobilityId": "8c15ad1e24a88c0a", "scanner": "scanner-primary", "fingerprint": "1d86c43d91fe52ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verticals/footshorts-viz/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1afa1239f472da09", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: verticals/starship-viz/package.json"}, "properties": {"repobilityId": "a9710d1c05b75d36", "scanner": "scanner-primary", "fingerprint": "1afa1239f472da09", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verticals/starship-viz/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f380abc85e3fa493", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: verticals/kidzovo-viz/package.json"}, "properties": {"repobilityId": "a97af99d72b63947", "scanner": "scanner-primary", "fingerprint": "f380abc85e3fa493", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verticals/kidzovo-viz/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2bcedb8f78413901", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: verticals/f1-viz/package.json"}, "properties": {"repobilityId": "1556809b200e6cc0", "scanner": "scanner-primary", "fingerprint": "2bcedb8f78413901", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "verticals/f1-viz/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "35e452b80e78d068", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "00e95c012650bdf1", "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": "e943680a11400975", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "b2a565567b921130", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "46b1b5e7368e065e", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "9bed7a1265ca2bc1", "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": "a5312443a548acb9", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-9bc56ab88643e075", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: apps/vizmaya-fyi/CLAUDE.md"}, "properties": {"repobilityId": "8f0535f6fe62ae80", "scanner": "scanner-primary", "fingerprint": "9bc56ab88643e075", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-672a67dcfc528d58", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: apps/vizmaya-fyi/.claude/launch.json"}, "properties": {"repobilityId": "6ad459875a748e1b", "scanner": "scanner-primary", "fingerprint": "672a67dcfc528d58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/vizmaya-fyi/.claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1cff612762882acb", "level": "none", "message": {"text": "Commented-code block (5 lines) in f1_backend/AI/app/main.py:347"}, "properties": {"repobilityId": "2e288b4ad944dcbc", "scanner": "scanner-primary", "fingerprint": "1cff612762882acb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eae8532fd82dc0eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in f1_backend/AI/app/pipelines/story_crew.py:228"}, "properties": {"repobilityId": "155f9df0cab9cd9b", "scanner": "scanner-primary", "fingerprint": "eae8532fd82dc0eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67db48d255b859d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/RunsPanel.tsx:29"}, "properties": {"repobilityId": "8bd308ab18759e8a", "scanner": "scanner-primary", "fingerprint": "67db48d255b859d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-11c8226287a21bc2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/WorkflowPanel.tsx:523"}, "properties": {"repobilityId": "e9d7a53d60835ffa", "scanner": "scanner-primary", "fingerprint": "11c8226287a21bc2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19d1e7a43366c942", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/components/admin/shared.tsx:34"}, "properties": {"repobilityId": "fa056cdf459b1984", "scanner": "scanner-primary", "fingerprint": "19d1e7a43366c942", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35e36abf4bc5f322", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 f1_backend/Frontend/src/contexts/AuthContext.tsx:71"}, "properties": {"repobilityId": "7fbbb6b4d613ff64", "scanner": "scanner-primary", "fingerprint": "35e36abf4bc5f322", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c915d0486ff2d5d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizf1/worker/src/openf1.ts:40"}, "properties": {"repobilityId": "538894f3094ff2b8", "scanner": "scanner-primary", "fingerprint": "c915d0486ff2d5d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a32a720d667a396", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizf1/worker/src/captureReplayFixture.ts:46"}, "properties": {"repobilityId": "5fddb8dbeeed6670", "scanner": "scanner-primary", "fingerprint": "4a32a720d667a396", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a6de9eadff0bb018", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizf1/web/components/RaceCardExpandable.tsx:58"}, "properties": {"repobilityId": "44128732a9484eef", "scanner": "scanner-primary", "fingerprint": "a6de9eadff0bb018", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d76d3523dea6b092", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizf1/web/lib/useFollowedEntities.ts:30"}, "properties": {"repobilityId": "8789a18fc96baf9e", "scanner": "scanner-primary", "fingerprint": "d76d3523dea6b092", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96dda91fa3850c8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/catalog/components/ModuleCard.tsx:27"}, "properties": {"repobilityId": "9f8a379781d85b83", "scanner": "scanner-primary", "fingerprint": "96dda91fa3850c8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdb29128c758c711", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/shared/src/editorial.ts:132"}, "properties": {"repobilityId": "1d494f9bb80ff5e5", "scanner": "scanner-primary", "fingerprint": "cdb29128c758c711", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc543fc895f9aff6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/backfillColors.ts:122"}, "properties": {"repobilityId": "cbe434b41081cddf", "scanner": "scanner-primary", "fingerprint": "fc543fc895f9aff6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c2d33f06fa2d357", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/footshorts/worker/src/recap.ts:503"}, "properties": {"repobilityId": "4c68197165a81ec6", "scanner": "scanner-primary", "fingerprint": "1c2d33f06fa2d357", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ac8823dcd8cd259", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/footshorts/worker/src/fixtures.ts:218"}, "properties": {"repobilityId": "e85bddbc86e6d46a", "scanner": "scanner-primary", "fingerprint": "2ac8823dcd8cd259", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95d3a6e9b96c1b34", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/fixtures.ts:32"}, "properties": {"repobilityId": "a5b35d752bd7d721", "scanner": "scanner-primary", "fingerprint": "95d3a6e9b96c1b34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-846c6fe7662ca10d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/seed.ts:52"}, "properties": {"repobilityId": "51ea673b3b4e49e3", "scanner": "scanner-primary", "fingerprint": "846c6fe7662ca10d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82e15432b19ce86c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/scores.ts:52"}, "properties": {"repobilityId": "09269136966b753c", "scanner": "scanner-primary", "fingerprint": "82e15432b19ce86c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9a1f24313b472151", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/squads/adapters/press-release.ts:15"}, "properties": {"repobilityId": "df9882b593f53786", "scanner": "scanner-primary", "fingerprint": "9a1f24313b472151", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54313be81e94370a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/worker/src/squads/adapters/wikipedia.ts:25"}, "properties": {"repobilityId": "daf6223093f3df9c", "scanner": "scanner-primary", "fingerprint": "54313be81e94370a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9456284fda1f933a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/tailwind.config.ts:9"}, "properties": {"repobilityId": "71151fd47f59bfad", "scanner": "scanner-primary", "fingerprint": "9456284fda1f933a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7874ff1a10955248", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/footshorts/mobile/babel-plugins/skip-codegen-for-screens.js:1"}, "properties": {"repobilityId": "0205d7c4e460c853", "scanner": "scanner-primary", "fingerprint": "7874ff1a10955248", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8be25f8b3e88a148", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/components/AuraBackground.tsx:5"}, "properties": {"repobilityId": "7bd2566387ff17b9", "scanner": "scanner-primary", "fingerprint": "8be25f8b3e88a148", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90fafa9a8da5e509", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/components/ForYouMatchFeed.tsx:745"}, "properties": {"repobilityId": "7e9d50d47bbe2c9c", "scanner": "scanner-primary", "fingerprint": "90fafa9a8da5e509", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0d51b288280bfef", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/lib/useFollowedFixtures.ts:43"}, "properties": {"repobilityId": "efc4357ae18f49ef", "scanner": "scanner-primary", "fingerprint": "b0d51b288280bfef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bbe96bec8164478", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/mobile/src/lib/useEntities.ts:32"}, "properties": {"repobilityId": "b48fff409d726671", "scanner": "scanner-primary", "fingerprint": "3bbe96bec8164478", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2603f9d75c3e3344", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/web/components/fifa-wc26/FifaWc26Landing.tsx:314"}, "properties": {"repobilityId": "e5c097e1bd358989", "scanner": "scanner-primary", "fingerprint": "2603f9d75c3e3344", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c81971b30ec7ab9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/footshorts/web/components/fifa-wc26/FifaWc26EpicLanding.tsx:14"}, "properties": {"repobilityId": "cd6d45fe1fc03eca", "scanner": "scanner-primary", "fingerprint": "9c81971b30ec7ab9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1626184cc71f680f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/web/components/ForYouMatchFeed/FixturesBlock.tsx:35"}, "properties": {"repobilityId": "deaa3d9eb6ae1973", "scanner": "scanner-primary", "fingerprint": "1626184cc71f680f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ed9b5fe2d605bd0", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/footshorts/web/components/ForYouMatchFeed/CardShell.tsx:6"}, "properties": {"repobilityId": "e0d3e88a0759e15f", "scanner": "scanner-primary", "fingerprint": "4ed9b5fe2d605bd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfbcd7f325b96b32", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/footshorts/web/app/onboarding/leagues/page.tsx:32"}, "properties": {"repobilityId": "77374c38e6b5c117", "scanner": "scanner-primary", "fingerprint": "dfbcd7f325b96b32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67c4abd19c8f67c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/useFollowedFixtures.ts:45"}, "properties": {"repobilityId": "d2433ca99ad3be77", "scanner": "scanner-primary", "fingerprint": "67c4abd19c8f67c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31d61850298a2e83", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/footshorts/web/lib/useEntities.ts:39"}, "properties": {"repobilityId": "0c65d7b23567714e", "scanner": "scanner-primary", "fingerprint": "31d61850298a2e83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a9a0b4daea786ca", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/fifaWc26.ts:182"}, "properties": {"repobilityId": "a104dcfff1e1219b", "scanner": "scanner-primary", "fingerprint": "5a9a0b4daea786ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14a9f256cf7af982", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/AuthModalProvider.tsx:71"}, "properties": {"repobilityId": "0421618a6329d8e3", "scanner": "scanner-primary", "fingerprint": "14a9f256cf7af982", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f97bbec222ec2be2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/storyboards/carrick-united.ts:4"}, "properties": {"repobilityId": "8ac514c54f7f1b12", "scanner": "scanner-primary", "fingerprint": "f97bbec222ec2be2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4e10a9572314502", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/footshorts/web/lib/storyboards/types.ts:1"}, "properties": {"repobilityId": "a1acedafdf186272", "scanner": "scanner-primary", "fingerprint": "d4e10a9572314502", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c122323120191598", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/next.config.ts:14"}, "properties": {"repobilityId": "3398325b53fd1986", "scanner": "scanner-primary", "fingerprint": "c122323120191598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63c163905c938cd6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/ingest.ts:111"}, "properties": {"repobilityId": "119b5e5ea6ef474d", "scanner": "scanner-primary", "fingerprint": "63c163905c938cd6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-311426d3ec361dec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/crawl.ts:58"}, "properties": {"repobilityId": "5a92ac457d257d62", "scanner": "scanner-primary", "fingerprint": "311426d3ec361dec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50b114af68f073aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/epstein/debug-ocr.ts:8"}, "properties": {"repobilityId": "ea57c3b9e735aae2", "scanner": "scanner-primary", "fingerprint": "50b114af68f073aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8eba17133f457276", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/energy-profile/scrape-news.ts:39"}, "properties": {"repobilityId": "ac20951d6430cb69", "scanner": "scanner-primary", "fingerprint": "8eba17133f457276", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a485283575d1b8ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/energy-profile/import-owid.ts:131"}, "properties": {"repobilityId": "7c241259184d1248", "scanner": "scanner-primary", "fingerprint": "a485283575d1b8ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99bf72547e2d96f3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/scripts/coke-studio/import.ts:231"}, "properties": {"repobilityId": "9ae0ff73abd1a826", "scanner": "scanner-primary", "fingerprint": "99bf72547e2d96f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98159fb5801d25f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/fetch-lyrics.ts:178"}, "properties": {"repobilityId": "8f79dfb9ff756a88", "scanner": "scanner-primary", "fingerprint": "98159fb5801d25f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb54cfbcca8296fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/lyricstranslate.ts:131"}, "properties": {"repobilityId": "0b7a58cfef112c4c", "scanner": "scanner-primary", "fingerprint": "fb54cfbcca8296fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0af34ebd4c027b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/genius.ts:25"}, "properties": {"repobilityId": "67683f5e006b900e", "scanner": "scanner-primary", "fingerprint": "b0af34ebd4c027b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4c4145214999c2c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/scripts/coke-studio/sources/utils.ts:65"}, "properties": {"repobilityId": "ca74d65ec7043762", "scanner": "scanner-primary", "fingerprint": "d4c4145214999c2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41a13647bcf835ac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/utils.ts:100"}, "properties": {"repobilityId": "7c7dfad26970f67c", "scanner": "scanner-primary", "fingerprint": "41a13647bcf835ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2680fbce70cca62d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/youtube.ts:227"}, "properties": {"repobilityId": "635d2a08dd1ffc8c", "scanner": "scanner-primary", "fingerprint": "2680fbce70cca62d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dee5f251d1ecc733", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/scripts/coke-studio/sources/types.ts:49"}, "properties": {"repobilityId": "11cef3766f316f98", "scanner": "scanner-primary", "fingerprint": "dee5f251d1ecc733", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-269fbfe1fede4dda", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/vizmaya-fyi/components/HomeClient.tsx:303"}, "properties": {"repobilityId": "80dcffceb2605eed", "scanner": "scanner-primary", "fingerprint": "269fbfe1fede4dda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c41667244f7ca57", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/demo/StoryPreview.tsx:229"}, "properties": {"repobilityId": "ab9289dceadebd9a", "scanner": "scanner-primary", "fingerprint": "8c41667244f7ca57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2202975be95125f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/share/ShareDeckForeground.tsx:180"}, "properties": {"repobilityId": "9902116413f1ba93", "scanner": "scanner-primary", "fingerprint": "c2202975be95125f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06c1d23d4e39c2b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareShell.tsx:82"}, "properties": {"repobilityId": "6b069110ef2df848", "scanner": "scanner-primary", "fingerprint": "06c1d23d4e39c2b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-678f9a2deca950ca", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareMapBg.tsx:18"}, "properties": {"repobilityId": "af641194a1ce69d9", "scanner": "scanner-primary", "fingerprint": "678f9a2deca950ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-297975ee1d872f2c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareEditDrawer.tsx:107"}, "properties": {"repobilityId": "5cde4a8ed4a9811b", "scanner": "scanner-primary", "fingerprint": "297975ee1d872f2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef220af460f30025", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/share/ShareCard.tsx:166"}, "properties": {"repobilityId": "d4af35b954606c65", "scanner": "scanner-primary", "fingerprint": "ef220af460f30025", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7555182aae19f182", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:414"}, "properties": {"repobilityId": "289b37a59085d232", "scanner": "scanner-primary", "fingerprint": "7555182aae19f182", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d180197bd67114e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/pdf/SlidesShell.tsx:94"}, "properties": {"repobilityId": "c851c130ecd96e01", "scanner": "scanner-primary", "fingerprint": "d180197bd67114e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fb727738b81c6cf", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/pdf/ReportShell.tsx:83"}, "properties": {"repobilityId": "55925f28b124338d", "scanner": "scanner-primary", "fingerprint": "3fb727738b81c6cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03842ef6619c9a26", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/components/autoplay/AutoplayMapEditor.tsx:216"}, "properties": {"repobilityId": "b8d8618f81d62b50", "scanner": "scanner-primary", "fingerprint": "03842ef6619c9a26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b30b1ccacb10e34", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/components/autoplay/AutoplayShell.tsx:127"}, "properties": {"repobilityId": "aa5485d73da17181", "scanner": "scanner-primary", "fingerprint": "0b30b1ccacb10e34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-118e2cad028b73b3", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/vizmaya-fyi/app/demo/[clientSlug]/page.tsx:35"}, "properties": {"repobilityId": "eb6b55991282028f", "scanner": "scanner-primary", "fingerprint": "118e2cad028b73b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f76809fe0d139c00", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/theme-preview/page.tsx:134"}, "properties": {"repobilityId": "2b549a6875e9085f", "scanner": "scanner-primary", "fingerprint": "f76809fe0d139c00", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4903d7733a5f4fc2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/api/mapbox-bg/route.ts:24"}, "properties": {"repobilityId": "b237d6544af81701", "scanner": "scanner-primary", "fingerprint": "4903d7733a5f4fc2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c90c581f6010441d", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/vizmaya-fyi/app/api/story-video/[slug]/route.ts:11"}, "properties": {"repobilityId": "2e178acf08df6730", "scanner": "scanner-primary", "fingerprint": "c90c581f6010441d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10565948397f3bef", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/api/story-pdf/[slug]/route.ts:11"}, "properties": {"repobilityId": "41e1c2061b0f1d0f", "scanner": "scanner-primary", "fingerprint": "10565948397f3bef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0913dc989c09de3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/api/coke-studio/place/[canonical]/route.ts:6"}, "properties": {"repobilityId": "d1d5f33b563c357d", "scanner": "scanner-primary", "fingerprint": "f0913dc989c09de3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98fc9046f322a5d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/epstein/page.tsx:146"}, "properties": {"repobilityId": "cff85b1c61611910", "scanner": "scanner-primary", "fingerprint": "98fc9046f322a5d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2d3e435efe41616", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:72"}, "properties": {"repobilityId": "f9394e99d28f7404", "scanner": "scanner-primary", "fingerprint": "e2d3e435efe41616", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-adc9f403369afdcb", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/app/reports/[slug]/page.tsx:62"}, "properties": {"repobilityId": "37851746d3de9c6a", "scanner": "scanner-primary", "fingerprint": "adc9f403369afdcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-156f287972b924a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/vizmaya-fyi/app/energy-profile/EnergyProfileLanding.tsx:85"}, "properties": {"repobilityId": "ba6491c36bd274dc", "scanner": "scanner-primary", "fingerprint": "156f287972b924a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8022776a900e708c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/story/[slug]/page.tsx:98"}, "properties": {"repobilityId": "39a5c20aece192b4", "scanner": "scanner-primary", "fingerprint": "8022776a900e708c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a0acba4353b51a1", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/app/story/[slug]/canvas-frame/[id]/page.tsx:70"}, "properties": {"repobilityId": "f6fa387d0ff24006", "scanner": "scanner-primary", "fingerprint": "7a0acba4353b51a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc5e2546a6d997e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/app/story/[slug]/autoplay/page.tsx:58"}, "properties": {"repobilityId": "ae0beb1b76a49914", "scanner": "scanner-primary", "fingerprint": "cc5e2546a6d997e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d71c7cf5d4df3020", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/vizmaya-fyi/lib/storyReportConfig.ts:322"}, "properties": {"repobilityId": "440085aae4b8d739", "scanner": "scanner-primary", "fingerprint": "d71c7cf5d4df3020", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-524c28391d1d0b85", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/vizmaya-fyi/lib/storyPdfRender.ts:60"}, "properties": {"repobilityId": "95a18f5b7a028d14", "scanner": "scanner-primary", "fingerprint": "524c28391d1d0b85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1457848bd7ee765e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/vizmaya-fyi/lib/storyVideoRender.ts:185"}, "properties": {"repobilityId": "95fe5914822fb42c", "scanner": "scanner-primary", "fingerprint": "1457848bd7ee765e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d8b795783ff8e6b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/vizmaya-fyi/lib/storyVideoRender.ts:103"}, "properties": {"repobilityId": "43b26dca427a42be", "scanner": "scanner-primary", "fingerprint": "1d8b795783ff8e6b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d1de6203187eb6da", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/vizmaya-fyi/lib/wallet-geo/countries.ts:3"}, "properties": {"repobilityId": "54f5674c4c10b878", "scanner": "scanner-primary", "fingerprint": "d1de6203187eb6da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-155b4cb1d3045ec3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/middleware.ts:74"}, "properties": {"repobilityId": "77f74bfb208735f0", "scanner": "scanner-primary", "fingerprint": "155b4cb1d3045ec3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-872213a2bbcfe28a", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/next.config.ts:4"}, "properties": {"repobilityId": "af9bea3bdbbb5b67", "scanner": "scanner-primary", "fingerprint": "872213a2bbcfe28a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dc00422ca4f6861", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/DemosListClient.tsx:49"}, "properties": {"repobilityId": "195fe0575dd81289", "scanner": "scanner-primary", "fingerprint": "1dc00422ca4f6861", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d14028c0b4ef866f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/components/vizmaya/MapPickerModal.tsx:108"}, "properties": {"repobilityId": "7734d74573c02666", "scanner": "scanner-primary", "fingerprint": "d14028c0b4ef866f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-637ea6c272314004", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/EditorClient.tsx:510"}, "properties": {"repobilityId": "681c002d22e4fab1", "scanner": "scanner-primary", "fingerprint": "637ea6c272314004", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7889e3bd95cd211d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/social/PostEditForm.tsx:143"}, "properties": {"repobilityId": "17973717fdacc2dd", "scanner": "scanner-primary", "fingerprint": "7889e3bd95cd211d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eebb6d7e633be7d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/vizmaya/social/SocialInbox.tsx:69"}, "properties": {"repobilityId": "ffa33d27f030e8ec", "scanner": "scanner-primary", "fingerprint": "eebb6d7e633be7d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bca15b5919e7007a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/section/StoriesListClient.tsx:59"}, "properties": {"repobilityId": "5439513450b5e4d7", "scanner": "scanner-primary", "fingerprint": "bca15b5919e7007a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41e4db54d62676b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/components/section/StoriesManager.tsx:107"}, "properties": {"repobilityId": "6c41828e3a57f8b7", "scanner": "scanner-primary", "fingerprint": "41e4db54d62676b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edc93e7a1d53e875", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/components/footshorts/sharecard/useCapture.ts:40"}, "properties": {"repobilityId": "a37d0435813040e6", "scanner": "scanner-primary", "fingerprint": "edc93e7a1d53e875", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41f9a46f0630f728", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/canvasEditing.ts:47"}, "properties": {"repobilityId": "f805a8fda29bc1c6", "scanner": "scanner-primary", "fingerprint": "41f9a46f0630f728", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c95cc975f7fff7a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/canvasSlotAdd.ts:261"}, "properties": {"repobilityId": "0e04d64b53318a6b", "scanner": "scanner-primary", "fingerprint": "c95cc975f7fff7a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf9923da9a1e273e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/FixPanel.tsx:86"}, "properties": {"repobilityId": "3d4dde5c9ee453f1", "scanner": "scanner-primary", "fingerprint": "cf9923da9a1e273e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-034341879e68edc8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/components/canvas/ImageEditModal.tsx:93"}, "properties": {"repobilityId": "620d746de784948b", "scanner": "scanner-primary", "fingerprint": "034341879e68edc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-059f2aeb4ffbc149", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/admin/components/canvas/EditorPanel.tsx:78"}, "properties": {"repobilityId": "5e60657c177e96fe", "scanner": "scanner-primary", "fingerprint": "059f2aeb4ffbc149", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ebb80f8b55cd6e5", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/admin/components/canvas/canvasInputs.ts:286"}, "properties": {"repobilityId": "1a88cc48ac6ee322", "scanner": "scanner-primary", "fingerprint": "0ebb80f8b55cd6e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a83bdaf1962ff06c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/components/canvas/CanvasClient.tsx:329"}, "properties": {"repobilityId": "7964dc73f3f53724", "scanner": "scanner-primary", "fingerprint": "a83bdaf1962ff06c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1268e72c38b841a5", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/components/canvas/CanvasPage.tsx:52"}, "properties": {"repobilityId": "68910f73e6c2e666", "scanner": "scanner-primary", "fingerprint": "1268e72c38b841a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5510c4ad370947ee", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/components/canvas/compose/useComposeFlow.ts:475"}, "properties": {"repobilityId": "96bfa87350a498bb", "scanner": "scanner-primary", "fingerprint": "5510c4ad370947ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bc0431497fc8860", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/api/footshorts/share/proxy-image/route.ts:35"}, "properties": {"repobilityId": "51135806e44b11b2", "scanner": "scanner-primary", "fingerprint": "9bc0431497fc8860", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ad08f604630ca2d", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/admin/app/api/stories/[slug]/route.ts:103"}, "properties": {"repobilityId": "958e46b80658dd33", "scanner": "scanner-primary", "fingerprint": "5ad08f604630ca2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b115c6de855baaf6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/app/api/stories/[slug]/canvas/compose/section/route.ts:234"}, "properties": {"repobilityId": "cc219a68d30cdb5b", "scanner": "scanner-primary", "fingerprint": "b115c6de855baaf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04a9b1f008934ba5", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/admin/app/api/stories/[slug]/canvas/compose/materialize/route.ts:55"}, "properties": {"repobilityId": "d22518416d353c67", "scanner": "scanner-primary", "fingerprint": "04a9b1f008934ba5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20e8af3d95f1eea3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/app/api/stories/[slug]/canvas/generate/route.ts:107"}, "properties": {"repobilityId": "777a18249e233f20", "scanner": "scanner-primary", "fingerprint": "20e8af3d95f1eea3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-178197867b544140", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:100"}, "properties": {"repobilityId": "af4f4781e121d2ff", "scanner": "scanner-primary", "fingerprint": "178197867b544140", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34ff170f90f24729", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:123"}, "properties": {"repobilityId": "7f47c8654322d44b", "scanner": "scanner-primary", "fingerprint": "34ff170f90f24729", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f872ba61d7d5198", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/app/[appSlug]/(tabbed)/page.tsx:11"}, "properties": {"repobilityId": "269ccf174b4c303f", "scanner": "scanner-primary", "fingerprint": "0f872ba61d7d5198", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62a707d0e28c5e47", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/lib/publicSite.ts:10"}, "properties": {"repobilityId": "87077dab22925a67", "scanner": "scanner-primary", "fingerprint": "62a707d0e28c5e47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4256ae7c10cce51", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/admin/lib/supabaseServer.ts:44"}, "properties": {"repobilityId": "24ba138ce855982d", "scanner": "scanner-primary", "fingerprint": "c4256ae7c10cce51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba1f2aaca6a6b6d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/admin/lib/vizmayaModuleTypes.ts:22"}, "properties": {"repobilityId": "10a4e2c44e1ddba3", "scanner": "scanner-primary", "fingerprint": "ba1f2aaca6a6b6d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0a5e8e905c91c87", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/story-reader/src/index.ts:1"}, "properties": {"repobilityId": "678c09ab08faa2b7", "scanner": "scanner-primary", "fingerprint": "c0a5e8e905c91c87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf683f0628b3fb82", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/story-reader/src/components/story/StoryShell.tsx:135"}, "properties": {"repobilityId": "4e1e0f49fc7b0d0f", "scanner": "scanner-primary", "fingerprint": "cf683f0628b3fb82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-add3181a09978401", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/story-reader/src/components/story/DeckProgress.tsx:20"}, "properties": {"repobilityId": "19226aa23f06db2c", "scanner": "scanner-primary", "fingerprint": "add3181a09978401", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb614c0a73f9b0b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/story-reader/src/components/story/MapStorySection.tsx:132"}, "properties": {"repobilityId": "e7b7376a3c03189e", "scanner": "scanner-primary", "fingerprint": "cb614c0a73f9b0b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e43fcd6ef20accef", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/story-reader/src/components/story/ClientECharts.tsx:5"}, "properties": {"repobilityId": "2e653b2c787546cf", "scanner": "scanner-primary", "fingerprint": "e43fcd6ef20accef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e687f74b729639dc", "level": "none", "message": {"text": "Commented-code block (11 lines) in packages/story-reader/src/components/story/ThemeProvider.tsx:74"}, "properties": {"repobilityId": "75de26bc90bc4c3b", "scanner": "scanner-primary", "fingerprint": "e687f74b729639dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a0b036af54b6894", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/middleware.ts:21"}, "properties": {"repobilityId": "c62e072fe599daa4", "scanner": "scanner-primary", "fingerprint": "5a0b036af54b6894", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-063819717b2cd55d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/components/LogoutButton.tsx:27"}, "properties": {"repobilityId": "b8d9f223cd491a3d", "scanner": "scanner-primary", "fingerprint": "063819717b2cd55d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-daa2affd1889e26b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/admin-core/src/components/LoginForm.tsx:28"}, "properties": {"repobilityId": "83900d6e9665ddce", "scanner": "scanner-primary", "fingerprint": "daa2affd1889e26b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a6b249a5001dd74e", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/ForegroundVizSlot.tsx:117"}, "properties": {"repobilityId": "89fa64fb31a580fd", "scanner": "scanner-primary", "fingerprint": "a6b249a5001dd74e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fecfec4835012383", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/viz-engine/src/ForegroundLayoutSlot.tsx:102"}, "properties": {"repobilityId": "4418cf58179bef84", "scanner": "scanner-primary", "fingerprint": "fecfec4835012383", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bee53bde057b8f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/BackgroundVizSlot.tsx:220"}, "properties": {"repobilityId": "7755e86274f1062e", "scanner": "scanner-primary", "fingerprint": "9bee53bde057b8f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78927132648f36f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/foregroundLayouts.ts:228"}, "properties": {"repobilityId": "8ddaf9099e849d16", "scanner": "scanner-primary", "fingerprint": "78927132648f36f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf31c8bfdd2c0f63", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/viz-engine/src/charts/GenericChart.tsx:139"}, "properties": {"repobilityId": "90a990b6495633d2", "scanner": "scanner-primary", "fingerprint": "bf31c8bfdd2c0f63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb192adf63ed23a7", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/viz-engine/src/charts/StoryEChart.tsx:74"}, "properties": {"repobilityId": "8dd2558aca3879fe", "scanner": "scanner-primary", "fingerprint": "bb192adf63ed23a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf3be4a8437b6cb9", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/charts/MapboxBackground.tsx:561"}, "properties": {"repobilityId": "dddb927b8d29cb95", "scanner": "scanner-primary", "fingerprint": "bf3be4a8437b6cb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45c57ef1c54e22e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/lib/logoPalette.ts:1"}, "properties": {"repobilityId": "6b001e95bef314c6", "scanner": "scanner-primary", "fingerprint": "45c57ef1c54e22e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b8be5f4820fd0e9", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/viz-engine/src/lib/yamlMapPatch.ts:209"}, "properties": {"repobilityId": "6f92c7d0266f2dfd", "scanner": "scanner-primary", "fingerprint": "0b8be5f4820fd0e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58e20019da2e29a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/lib/storyReadiness.ts:36"}, "properties": {"repobilityId": "122e195d9ebc4eda", "scanner": "scanner-primary", "fingerprint": "58e20019da2e29a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a93d5d554ee98ab2", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/viz-engine/src/lib/resolveSlots.ts:125"}, "properties": {"repobilityId": "167d4bb64e6f6795", "scanner": "scanner-primary", "fingerprint": "a93d5d554ee98ab2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4cdbef2ad53f090", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/rive/Component.tsx:269"}, "properties": {"repobilityId": "92c2ac167d405654", "scanner": "scanner-primary", "fingerprint": "f4cdbef2ad53f090", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0eac8214aa53cb8", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/image/index.ts:47"}, "properties": {"repobilityId": "114fbe8bf6234743", "scanner": "scanner-primary", "fingerprint": "d0eac8214aa53cb8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78ed68b17615e6f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/image/Component.tsx:29"}, "properties": {"repobilityId": "4f525fb3057cb50c", "scanner": "scanner-primary", "fingerprint": "78ed68b17615e6f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-283f82db824d667d", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/modules/bigStat/Component.tsx:84"}, "properties": {"repobilityId": "77cdcaa34ee4d586", "scanner": "scanner-primary", "fingerprint": "283f82db824d667d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ddbf8a180af1020", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/modules/chart/Component.tsx:21"}, "properties": {"repobilityId": "cf5f4cc73c3937cc", "scanner": "scanner-primary", "fingerprint": "8ddbf8a180af1020", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdd9b74ba7a539dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/viz-engine/src/modules/map/index.ts:78"}, "properties": {"repobilityId": "a7c05376dcf75e3a", "scanner": "scanner-primary", "fingerprint": "bdd9b74ba7a539dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37c5374987b2a4fe", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/viz-engine/src/modules/map/PersistentComponent.tsx:77"}, "properties": {"repobilityId": "5694488b695d69a7", "scanner": "scanner-primary", "fingerprint": "37c5374987b2a4fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdc96018225a7ca1", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/viz-engine/src/modules/video/Component.tsx:52"}, "properties": {"repobilityId": "bd0fd5a6bacde104", "scanner": "scanner-primary", "fingerprint": "cdc96018225a7ca1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4e00d4abd0cf755", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/content-source/src/resolveUnits.ts:198"}, "properties": {"repobilityId": "29473040dfec0910", "scanner": "scanner-primary", "fingerprint": "a4e00d4abd0cf755", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4046e3068afa16b", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/content-source/src/usePollVideoRender.ts:24"}, "properties": {"repobilityId": "d6a06edae245bfd2", "scanner": "scanner-primary", "fingerprint": "a4046e3068afa16b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bdea4aa077ea9d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyAudioDispatch.ts:33"}, "properties": {"repobilityId": "974b92aca572425c", "scanner": "scanner-primary", "fingerprint": "3bdea4aa077ea9d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4db238e4c70452ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyVideoDispatch.ts:55"}, "properties": {"repobilityId": "e893231f88a7e875", "scanner": "scanner-primary", "fingerprint": "4db238e4c70452ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0d9c22885f2e381c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/content-source/src/storyTts.ts:105"}, "properties": {"repobilityId": "56c63a7b1c52b357", "scanner": "scanner-primary", "fingerprint": "0d9c22885f2e381c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc024c7f0761ee8a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyShareDispatch.ts:36"}, "properties": {"repobilityId": "79a482940b8730aa", "scanner": "scanner-primary", "fingerprint": "fc024c7f0761ee8a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58b69a7bf63b5d17", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/recapDispatch.ts:43"}, "properties": {"repobilityId": "37ac758ae52360c3", "scanner": "scanner-primary", "fingerprint": "58b69a7bf63b5d17", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e379dc87c6c963e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/heygenTemplateDispatch.ts:56"}, "properties": {"repobilityId": "89ecb9f4062122ec", "scanner": "scanner-primary", "fingerprint": "e379dc87c6c963e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-499a3ddb948ae76a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storyPdfDispatch.ts:43"}, "properties": {"repobilityId": "59c28f310256262a", "scanner": "scanner-primary", "fingerprint": "499a3ddb948ae76a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87c276996e181223", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/heygenTemplate.ts:79"}, "properties": {"repobilityId": "f8a672a2ad071259", "scanner": "scanner-primary", "fingerprint": "87c276996e181223", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69936bb9af407a51", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/content-source/src/storyConfig.ts:138"}, "properties": {"repobilityId": "a71be1fdfd8a0469", "scanner": "scanner-primary", "fingerprint": "69936bb9af407a51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0abf7a4b79273e7a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/footshortsData.ts:255"}, "properties": {"repobilityId": "dd9822ef72d9134c", "scanner": "scanner-primary", "fingerprint": "0abf7a4b79273e7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a87782670fb491c2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/content-source/src/storySourceExtractDispatch.ts:37"}, "properties": {"repobilityId": "c6743504ca50ed71", "scanner": "scanner-primary", "fingerprint": "a87782670fb491c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e50c228fbf6c2b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/content-source/src/contentSource.ts:114"}, "properties": {"repobilityId": "89314fa4aee399a0", "scanner": "scanner-primary", "fingerprint": "7e50c228fbf6c2b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a027fa55584d2ba4", "level": "note", "message": {"text": "Legacy-named symbol `previewLegacy` in packages/content-source/src/handlers/storyVideo.ts:109"}, "properties": {"repobilityId": "a0db241071d4fad3", "scanner": "scanner-primary", "fingerprint": "a027fa55584d2ba4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1f0fd41da4ccd308", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ai-gateway/src/client.ts:48"}, "properties": {"repobilityId": "040ffadc7e6a8933", "scanner": "scanner-primary", "fingerprint": "1f0fd41da4ccd308", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5a3464aa0d2988d", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/story-pipeline/src/ai.ts:9"}, "properties": {"repobilityId": "164f91af51bf7e90", "scanner": "scanner-primary", "fingerprint": "e5a3464aa0d2988d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7e6c45118d8d08c", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/story-pipeline/src/schema.ts:205"}, "properties": {"repobilityId": "dd418fd4c7ddf99c", "scanner": "scanner-primary", "fingerprint": "d7e6c45118d8d08c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-644d55b272491a75", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/story-pipeline/src/lintLayout.ts:174"}, "properties": {"repobilityId": "4662be8086bb8ef8", "scanner": "scanner-primary", "fingerprint": "644d55b272491a75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-315dc41a074302b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/story-pipeline/src/cover.ts:143"}, "properties": {"repobilityId": "cf8b75dcfb084127", "scanner": "scanner-primary", "fingerprint": "315dc41a074302b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb7f645d57e7b01c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/story-pipeline/src/validate.ts:98"}, "properties": {"repobilityId": "ea007624a3836dc1", "scanner": "scanner-primary", "fingerprint": "eb7f645d57e7b01c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-779c31dcc148b70c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/story-pipeline/src/ingest/index.ts:12"}, "properties": {"repobilityId": "66f9b761dc23e407", "scanner": "scanner-primary", "fingerprint": "779c31dcc148b70c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe93a8356e1d5a6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/story-pipeline/src/viz-engine-stubs/genSchema.d.ts:3"}, "properties": {"repobilityId": "ec300590198853ce", "scanner": "scanner-primary", "fingerprint": "fe93a8356e1d5a6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-819b7c0480d49f31", "level": "none", "message": {"text": "Commented-code block (6 lines) in verticals/footshorts-viz/src/modules/standings-over-matchdays/Component.tsx:18"}, "properties": {"repobilityId": "a570875df1e25284", "scanner": "scanner-primary", "fingerprint": "819b7c0480d49f31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-132fa1205578faa6", "level": "none", "message": {"text": "Commented-code block (5 lines) in verticals/footshorts-viz/src/modules/standings-over-matchdays/sample.ts:3"}, "properties": {"repobilityId": "0f29cff612b88595", "scanner": "scanner-primary", "fingerprint": "132fa1205578faa6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56f62489cf3b4692", "level": "none", "message": {"text": "Commented-code block (7 lines) in verticals/footshorts-viz/src/web/MatchRow.tsx:64"}, "properties": {"repobilityId": "bc6061c9d3c6b872", "scanner": "scanner-primary", "fingerprint": "56f62489cf3b4692", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-796ed59347fabf9a", "level": "none", "message": {"text": "Commented-code block (6 lines) in verticals/footshorts-viz/src/web/StandingsOverMatchdays.tsx:77"}, "properties": {"repobilityId": "7606e33a239f5dd7", "scanner": "scanner-primary", "fingerprint": "796ed59347fabf9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53b19a8ee84e6868", "level": "none", "message": {"text": "Commented-code block (5 lines) in verticals/footshorts-viz/src/web/StandingsTable.tsx:7"}, "properties": {"repobilityId": "81f36cd2fad7a60f", "scanner": "scanner-primary", "fingerprint": "53b19a8ee84e6868", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa5a4e3cf751e7e1", "level": "none", "message": {"text": "Commented-code block (7 lines) in verticals/footshorts-viz/src/web/BracketTree.tsx:406"}, "properties": {"repobilityId": "3b858738bea893ba", "scanner": "scanner-primary", "fingerprint": "fa5a4e3cf751e7e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4427da0354b22da5", "level": "none", "message": {"text": "Commented-code block (5 lines) in verticals/footshorts-viz/src/native/MatchRow.tsx:64"}, "properties": {"repobilityId": "b5369e4acb21fade", "scanner": "scanner-primary", "fingerprint": "4427da0354b22da5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25e84ae9be11a340", "level": "none", "message": {"text": "Commented-code block (7 lines) in verticals/starship-viz/scripts/import-glb.ts:75"}, "properties": {"repobilityId": "93593b4820195d48", "scanner": "scanner-primary", "fingerprint": "25e84ae9be11a340", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58638f2b84b23031", "level": "none", "message": {"text": "Commented-code block (5 lines) in verticals/starship-viz/scripts/convert-starship-assets.ts:31"}, "properties": {"repobilityId": "eebc794814462fd4", "scanner": "scanner-primary", "fingerprint": "58638f2b84b23031", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe28309d7c0d5573", "level": "none", "message": {"text": "Commented-code block (5 lines) in verticals/starship-viz/src/modules/starship/Component.tsx:26"}, "properties": {"repobilityId": "3612fb63895366d9", "scanner": "scanner-primary", "fingerprint": "fe28309d7c0d5573", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db17aaa6c9ce159c", "level": "none", "message": {"text": "Commented-code block (7 lines) in verticals/starship-viz/src/web/StarshipScene.tsx:283"}, "properties": {"repobilityId": "b072a6ddbbc01732", "scanner": "scanner-primary", "fingerprint": "db17aaa6c9ce159c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8d1b0a8144dde9c", "level": "none", "message": {"text": "Commented-code block (5 lines) in verticals/kidzovo-viz/src/modules/character/index.ts:112"}, "properties": {"repobilityId": "efc9067768d5fa1d", "scanner": "scanner-primary", "fingerprint": "e8d1b0a8144dde9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-817a96c946f4f9d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in verticals/kidzovo-viz/src/modules/character/Component.tsx:142"}, "properties": {"repobilityId": "dfa495075ce69b0a", "scanner": "scanner-primary", "fingerprint": "817a96c946f4f9d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12b6a2edef42e2e5", "level": "note", "message": {"text": "75 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "214afaef4508f972", "scanner": "scanner-primary", "fingerprint": "12b6a2edef42e2e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3ab5fe3099d4ed84", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "476186fc48d2650f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "09043ec38372988d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8bdf0db55c2854c2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "acb6305412811a03", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ed343dd28338d5bd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e7189f74dc10ef28", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-e6df46b275bfea24", "level": "error", "message": {"text": "FastAPI POST `run_telemetry_analysis` without auth dependency \u2014 f1_backend/AI/app/main.py:505"}, "properties": {"repobilityId": "3594dd84a4cdbdb2", "scanner": "scanner-primary", "fingerprint": "e6df46b275bfea24", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/main.py"}, "region": {"startLine": 505}}}]}, {"ruleId": "scanner-0296223c3060c10d", "level": "error", "message": {"text": "FastAPI POST `run_angle_discovery` without auth dependency \u2014 f1_backend/AI/app/main.py:523"}, "properties": {"repobilityId": "c4cbe09dec3c1013", "scanner": "scanner-primary", "fingerprint": "0296223c3060c10d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/main.py"}, "region": {"startLine": 523}}}]}, {"ruleId": "scanner-b1f18743ddf41e38", "level": "error", "message": {"text": "FastAPI POST `run_story_generation` without auth dependency \u2014 f1_backend/AI/app/main.py:541"}, "properties": {"repobilityId": "cf0c714cde837d6b", "scanner": "scanner-primary", "fingerprint": "b1f18743ddf41e38", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/main.py"}, "region": {"startLine": 541}}}]}, {"ruleId": "scanner-364366217623575f", "level": "error", "message": {"text": "FastAPI POST `ingest_session` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:950"}, "properties": {"repobilityId": "4e0137a02eba6fa3", "scanner": "scanner-primary", "fingerprint": "364366217623575f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/routes/ingest.py"}, "region": {"startLine": 950}}}]}, {"ruleId": "scanner-4ae993d38021c0aa", "level": "error", "message": {"text": "FastAPI POST `enrich_only` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:1126"}, "properties": {"repobilityId": "edafe9e2dceef3f5", "scanner": "scanner-primary", "fingerprint": "4ae993d38021c0aa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/routes/ingest.py"}, "region": {"startLine": 1126}}}]}, {"ruleId": "scanner-6e38909e1cea2619", "level": "error", "message": {"text": "FastAPI POST `enrich_positions` without auth dependency \u2014 f1_backend/AI/app/routes/ingest.py:1147"}, "properties": {"repobilityId": "fa742acfba5471a5", "scanner": "scanner-primary", "fingerprint": "6e38909e1cea2619", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "f1_backend/AI/app/routes/ingest.py"}, "region": {"startLine": 1147}}}]}, {"ruleId": "scanner-3763a1226d85bfbb", "level": "error", "message": {"text": "Dangling fetch: POST /api/demo/${clientSlug}/auth (apps/vizmaya-fyi/components/demo/DemoLoginForm.tsx:21)"}, "properties": {"repobilityId": "79e6279963aab32c", "scanner": "scanner-primary", "fingerprint": "3763a1226d85bfbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ed2ca6cf3c9a94ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/story-pdf/${storySlug}?format=${format} (apps/vizmaya-fyi/components/demo/PdfGallery.tsx:99)"}, "properties": {"repobilityId": "e03cb84cc5867c4b", "scanner": "scanner-primary", "fingerprint": "ed2ca6cf3c9a94ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f71206e928b4d600", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/configs (apps/vizmaya-fyi/components/map-edit/MapEditShell.tsx:996)"}, "properties": {"repobilityId": "875acef8f17df4fc", "scanner": "scanner-primary", "fingerprint": "f71206e928b4d600", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3cd10a54e1892d47", "level": "error", "message": {"text": "Dangling fetch: POST /api/story-report-config/${slug} (apps/vizmaya-fyi/components/reports/ReportsBuilder.tsx:404)"}, "properties": {"repobilityId": "592ef34f47929f9a", "scanner": "scanner-primary", "fingerprint": "3cd10a54e1892d47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d7ad6d674ab8dac", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/themes (apps/vizmaya-fyi/app/theme-preview/page.tsx:134)"}, "properties": {"repobilityId": "36c638245d34d187", "scanner": "scanner-primary", "fingerprint": "5d7ad6d674ab8dac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d7e2f067cc86725", "level": "error", "message": {"text": "Dangling fetch: GET /api/epstein/curated/airport/${encodeURIComponent(iata)} (apps/vizmaya-fyi/app/epstein/AirportDetail.tsx:54)"}, "properties": {"repobilityId": "69dab2237b3791ba", "scanner": "scanner-primary", "fingerprint": "6d7e2f067cc86725", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ebe30ec976568f07", "level": "error", "message": {"text": "Dangling fetch: GET /api/epstein/curated/person/${encodeURIComponent(personId)} (apps/vizmaya-fyi/app/epstein/PersonDetail.tsx:72)"}, "properties": {"repobilityId": "59a86990fe0860da", "scanner": "scanner-primary", "fingerprint": "ebe30ec976568f07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62c774f5faf1f520", "level": "error", "message": {"text": "Dangling fetch: GET /api/epstein/curated/blackbook/${encodeURIComponent(String(blackbookId))} (apps/vizmaya-fyi/app/epstein/BlackbookDetail.tsx:47)"}, "properties": {"repobilityId": "f906bd291225059c", "scanner": "scanner-primary", "fingerprint": "62c774f5faf1f520", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5fb53b2727aa9555", "level": "error", "message": {"text": "Dangling fetch: GET /api/wallet-geo/country/${encodeURIComponent(code)} (apps/vizmaya-fyi/app/wallet-geo/CountryDetail.tsx:30)"}, "properties": {"repobilityId": "7179970f313edafa", "scanner": "scanner-primary", "fingerprint": "5fb53b2727aa9555", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd90cc1ccc2a5c1e", "level": "error", "message": {"text": "Dangling fetch: GET /api/energy-profile/country/${encodeURIComponent(code)} (apps/vizmaya-fyi/app/energy-profile/CountryDetail.tsx:29)"}, "properties": {"repobilityId": "1190974421336c5f", "scanner": "scanner-primary", "fingerprint": "fd90cc1ccc2a5c1e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ed002dff16813e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/coke-studio/place/${encodeURIComponent(canonical)} (apps/vizmaya-fyi/app/coke-studio/PlaceDetail.tsx:30)"}, "properties": {"repobilityId": "cab98642519ad925", "scanner": "scanner-primary", "fingerprint": "1ed002dff16813e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-020798a907dc2058", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/assistant/conversations (apps/admin/components/AssistantLauncher.tsx:119)"}, "properties": {"repobilityId": "a02556c16ba75b87", "scanner": "scanner-primary", "fingerprint": "020798a907dc2058", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-302cbc15470aaad4", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/assistant/conversations/${id} (apps/admin/components/AssistantLauncher.tsx:143)"}, "properties": {"repobilityId": "ffb4f2746f0f1194", "scanner": "scanner-primary", "fingerprint": "302cbc15470aaad4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b73fec7034b6288f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/vizmaya/assistant/conversations/${id} (apps/admin/components/AssistantLauncher.tsx:166)"}, "properties": {"repobilityId": "5d076aaf1db7d5b3", "scanner": "scanner-primary", "fingerprint": "b73fec7034b6288f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cf7f0f8931d4930", "level": "error", "message": {"text": "Dangling fetch: POST /api/vizmaya/assistant (apps/admin/components/AssistantLauncher.tsx:221)"}, "properties": {"repobilityId": "6e89afffa1e065d8", "scanner": "scanner-primary", "fingerprint": "6cf7f0f8931d4930", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99df0f1f8f84752c", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/compose (apps/admin/components/compose/ComposeCreateEntry.tsx:34)"}, "properties": {"repobilityId": "ae40e2c7fb246a27", "scanner": "scanner-primary", "fingerprint": "99df0f1f8f84752c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a46ac9907aa9eec9", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${slug}/assets/generate (apps/admin/components/vizmaya/GenerateImagePanel.tsx:55)"}, "properties": {"repobilityId": "1f119a0ac5d3600c", "scanner": "scanner-primary", "fingerprint": "a46ac9907aa9eec9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3787bc1eabb139c", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories (apps/admin/components/vizmaya/DemosListClient.tsx:27)"}, "properties": {"repobilityId": "6bee2f11c1e333eb", "scanner": "scanner-primary", "fingerprint": "a3787bc1eabb139c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e88ced9c10eb54bb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/vizmaya/demos/${id} (apps/admin/components/vizmaya/DemosListClient.tsx:49)"}, "properties": {"repobilityId": "3c2f46dce82cdd4e", "scanner": "scanner-primary", "fingerprint": "e88ced9c10eb54bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38e1bc65fe140480", "level": "error", "message": {"text": "Dangling fetch: POST /api/vizmaya/demos (apps/admin/components/vizmaya/DemosListClient.tsx:176)"}, "properties": {"repobilityId": "fed310f2081c8080", "scanner": "scanner-primary", "fingerprint": "38e1bc65fe140480", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30e85239c8e1a756", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/apps (apps/admin/components/vizmaya/MoveStoryControl.tsx:14)"}, "properties": {"repobilityId": "2f4c045d951e4c24", "scanner": "scanner-primary", "fingerprint": "30e85239c8e1a756", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c21a8fffb5068b1f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug}/app (apps/admin/components/vizmaya/MoveStoryControl.tsx:57)"}, "properties": {"repobilityId": "33380ce8bd519d48", "scanner": "scanner-primary", "fingerprint": "c21a8fffb5068b1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec255a44f9659a31", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/demos/${demoId} (apps/admin/components/vizmaya/DemoEditorClient.tsx:89)"}, "properties": {"repobilityId": "05e27ee9d5b4c5be", "scanner": "scanner-primary", "fingerprint": "ec255a44f9659a31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-086fb036a9d9cc2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/demos/${demoId}/cards (apps/admin/components/vizmaya/DemoEditorClient.tsx:363)"}, "properties": {"repobilityId": "ddbf664b7cea5258", "scanner": "scanner-primary", "fingerprint": "086fb036a9d9cc2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aecc080d78396616", "level": "error", "message": {"text": "Dangling fetch: POST /api/vizmaya/demos/${demoId}/render-share (apps/admin/components/vizmaya/DemoEditorClient.tsx:391)"}, "properties": {"repobilityId": "95dd2932c8554455", "scanner": "scanner-primary", "fingerprint": "aecc080d78396616", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f737102d5f83be7", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/vizmaya/EditorClient.tsx:170)"}, "properties": {"repobilityId": "66af376bf49652bd", "scanner": "scanner-primary", "fingerprint": "3f737102d5f83be7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5224fafaa6603aeb", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/vizmaya/EditorClient.tsx:220)"}, "properties": {"repobilityId": "220faa25b8dcc3f0", "scanner": "scanner-primary", "fingerprint": "5224fafaa6603aeb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05085e52e57f3b0e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:247)"}, "properties": {"repobilityId": "96552f8bfeb0786c", "scanner": "scanner-primary", "fingerprint": "05085e52e57f3b0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f13fd2d252d44eed", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:510)"}, "properties": {"repobilityId": "b4c10daeda76e175", "scanner": "scanner-primary", "fingerprint": "f13fd2d252d44eed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd915b586c00cdfe", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:545)"}, "properties": {"repobilityId": "004cfe228c4ffcc0", "scanner": "scanner-primary", "fingerprint": "fd915b586c00cdfe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e5d72bad3cdbc36", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/vizmaya/EditorClient.tsx:574)"}, "properties": {"repobilityId": "2d668a66be9e3ce3", "scanner": "scanner-primary", "fingerprint": "2e5d72bad3cdbc36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-945b6ff28e5ceb55", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${slug}/canvas/compose/start (apps/admin/components/vizmaya/EditorClient.tsx:689)"}, "properties": {"repobilityId": "ef1fb24249cec34b", "scanner": "scanner-primary", "fingerprint": "945b6ff28e5ceb55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb4313c370e6b47d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${chartId} (apps/admin/components/vizmaya/ChartEditorClient.tsx:55)"}, "properties": {"repobilityId": "898e76e9c787d1bd", "scanner": "scanner-primary", "fingerprint": "cb4313c370e6b47d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6caed6edccf8d3a7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/stories/${s.slug} (apps/admin/components/vizmaya/DraftsList.tsx:30)"}, "properties": {"repobilityId": "52c7993ec8b84e90", "scanner": "scanner-primary", "fingerprint": "6caed6edccf8d3a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfbe4761d820f209", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug}/tts (apps/admin/components/vizmaya/NarrationEditor.tsx:141)"}, "properties": {"repobilityId": "0c35ae3da2df0ba3", "scanner": "scanner-primary", "fingerprint": "dfbe4761d820f209", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d82be07f9e20d07", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${slug}/audio/regen (apps/admin/components/vizmaya/NarrationEditor.tsx:164)"}, "properties": {"repobilityId": "6102d306325e28a4", "scanner": "scanner-primary", "fingerprint": "5d82be07f9e20d07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-319db15950fbd73b", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/${slug}/assets (apps/admin/components/vizmaya/AssetsPanel.tsx:47)"}, "properties": {"repobilityId": "d313951a139a0d82", "scanner": "scanner-primary", "fingerprint": "319db15950fbd73b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-115e110a5bbceef6", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${slug}/assets/sign-upload (apps/admin/components/vizmaya/AssetsPanel.tsx:73)"}, "properties": {"repobilityId": "7b924ec6e155cc6c", "scanner": "scanner-primary", "fingerprint": "115e110a5bbceef6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3dc6cd9a599d590", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/stories/${slug}/assets/${encodeURIComponent(filename)} (apps/admin/components/vizmaya/AssetsPanel.tsx:164)"}, "properties": {"repobilityId": "dc4040b44fa5df3c", "scanner": "scanner-primary", "fingerprint": "b3dc6cd9a599d590", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b277409f870009c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/social/share-cards/${draft.storySlug} (apps/admin/components/vizmaya/social/PostEditForm.tsx:143)"}, "properties": {"repobilityId": "1f15839af7b587f5", "scanner": "scanner-primary", "fingerprint": "b277409f870009c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f24f793ccb597d7", "level": "error", "message": {"text": "Dangling fetch: POST /api/vizmaya/social/preview-text (apps/admin/components/vizmaya/social/PostEditForm.tsx:161)"}, "properties": {"repobilityId": "6b3eb453ce6b68e2", "scanner": "scanner-primary", "fingerprint": "3f24f793ccb597d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c393e831682f8f9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostCard.tsx:44)"}, "properties": {"repobilityId": "0804e5ea023e568c", "scanner": "scanner-primary", "fingerprint": "7c393e831682f8f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-738de3abd040ea42", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostCard.tsx:59)"}, "properties": {"repobilityId": "2658f2d4c3eae223", "scanner": "scanner-primary", "fingerprint": "738de3abd040ea42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7eafe99c14b1d1e2", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/social/${id} (apps/admin/components/vizmaya/social/SocialInbox.tsx:69)"}, "properties": {"repobilityId": "6e7d5befc0b4f78c", "scanner": "scanner-primary", "fingerprint": "7eafe99c14b1d1e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28082c597c54ad47", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/social?status=new (apps/admin/components/vizmaya/social/SocialInbox.tsx:78)"}, "properties": {"repobilityId": "e88d89e823321648", "scanner": "scanner-primary", "fingerprint": "28082c597c54ad47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3fb28dd83425af5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostPanel.tsx:71)"}, "properties": {"repobilityId": "efb3a3c9c675e6df", "scanner": "scanner-primary", "fingerprint": "c3fb28dd83425af5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d20bce5175f28cb5", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/vizmaya/social/posts/${post.id} (apps/admin/components/vizmaya/social/PostPanel.tsx:87)"}, "properties": {"repobilityId": "dc1be257be645c43", "scanner": "scanner-primary", "fingerprint": "d20bce5175f28cb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e2010f6fd0b067a", "level": "error", "message": {"text": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}?aspect=${encodeURIComponent(aspect)} (apps/admin/components/vizmaya/social/VideoPostRenderPanel.tsx:25)"}, "properties": {"repobilityId": "ee762ddffed83075", "scanner": "scanner-primary", "fingerprint": "7e2010f6fd0b067a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b33f7cf04e223a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}/timeline (apps/admin/components/vizmaya/video/RangeRenderPanel.tsx:86)"}, "properties": {"repobilityId": "7650e21ed769ad85", "scanner": "scanner-primary", "fingerprint": "8b33f7cf04e223a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fff4297b180b5dce", "level": "error", "message": {"text": "Dangling fetch: GET /api/story-video/${encodeURIComponent(slug)}?${params.toString()} (apps/admin/components/vizmaya/video/RangeRenderPanel.tsx:171)"}, "properties": {"repobilityId": "2b40ea47b7bc8026", "scanner": "scanner-primary", "fingerprint": "fff4297b180b5dce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bbdd68cff21cb2d1", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/storyUpload.tsx:118)"}, "properties": {"repobilityId": "e54b58444b2a3ae3", "scanner": "scanner-primary", "fingerprint": "bbdd68cff21cb2d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-483c1040ad1f0408", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug}/charts/${id} (apps/admin/components/section/storyUpload.tsx:158)"}, "properties": {"repobilityId": "07b1b41a7cd46264", "scanner": "scanner-primary", "fingerprint": "483c1040ad1f0408", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f638357ec4a68097", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesListClient.tsx:86)"}, "properties": {"repobilityId": "df68e3e835020523", "scanner": "scanner-primary", "fingerprint": "f638357ec4a68097", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0925e4d86e55f0ac", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:107)"}, "properties": {"repobilityId": "61d119b7bb84cfe3", "scanner": "scanner-primary", "fingerprint": "0925e4d86e55f0ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-feaaf64472d49fd2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:119)"}, "properties": {"repobilityId": "3d65c90f7b766ecd", "scanner": "scanner-primary", "fingerprint": "feaaf64472d49fd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6682c9a0b738ff66", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${slug} (apps/admin/components/section/StoriesManager.tsx:138)"}, "properties": {"repobilityId": "e17659e64415e952", "scanner": "scanner-primary", "fingerprint": "6682c9a0b738ff66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97af03d39e2c91a6", "level": "error", "message": {"text": "Dangling fetch: POST /api/footshorts/trigger-recap (apps/admin/components/footshorts/TriggerRecapButton.tsx:29)"}, "properties": {"repobilityId": "7662b7cf2d7bde37", "scanner": "scanner-primary", "fingerprint": "97af03d39e2c91a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90eb24cecd81062b", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/standings?${qs} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:198)"}, "properties": {"repobilityId": "bd8f2ce07c519b5b", "scanner": "scanner-primary", "fingerprint": "90eb24cecd81062b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c7b4ccb4e771267", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/fixtures?${qs} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:220)"}, "properties": {"repobilityId": "bad15b7ddbe5be72", "scanner": "scanner-primary", "fingerprint": "6c7b4ccb4e771267", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b67c590dd226ef0b", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/news?limit=${newsLimit} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:261)"}, "properties": {"repobilityId": "f5d0286e8387177d", "scanner": "scanner-primary", "fingerprint": "b67c590dd226ef0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cacdd6f78d54153", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/share/cards (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:426)"}, "properties": {"repobilityId": "74f0c6f7c14563d3", "scanner": "scanner-primary", "fingerprint": "0cacdd6f78d54153", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b363d880bef63341", "level": "error", "message": {"text": "Dangling fetch: POST /api/footshorts/share/cards (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:482)"}, "properties": {"repobilityId": "e00c89d433da9323", "scanner": "scanner-primary", "fingerprint": "b363d880bef63341", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26af9433b733090a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/footshorts/share/cards/${id} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:535)"}, "properties": {"repobilityId": "01af4559d79f6b7e", "scanner": "scanner-primary", "fingerprint": "26af9433b733090a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af3e24dae03b137d", "level": "error", "message": {"text": "Dangling fetch: POST /api/footshorts/share/generate-image (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:552)"}, "properties": {"repobilityId": "4cc672b101088bea", "scanner": "scanner-primary", "fingerprint": "af3e24dae03b137d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf13750acd2a7b94", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/share/proxy-image?url=${encodeURIComponent(url)} (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:596)"}, "properties": {"repobilityId": "005e94ca4fd78985", "scanner": "scanner-primary", "fingerprint": "cf13750acd2a7b94", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecfe9938f2258528", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/entities?q=${encodeURIComponent(badgeQuery.trim())}&limit=40 (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:618)"}, "properties": {"repobilityId": "60f7f9075a416b0b", "scanner": "scanner-primary", "fingerprint": "ecfe9938f2258528", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f43262561bef1f24", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/flags (apps/admin/components/footshorts/sharecard/ShareCardCreator.tsx:634)"}, "properties": {"repobilityId": "0e77273051b2f33d", "scanner": "scanner-primary", "fingerprint": "f43262561bef1f24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8a6d00766a5deb8", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/transform (apps/admin/components/canvas/SelectionAiOverlay.tsx:193)"}, "properties": {"repobilityId": "d0757f36457c4264", "scanner": "scanner-primary", "fingerprint": "d8a6d00766a5deb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbc30e0e98570615", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/generation-feedback (apps/admin/components/canvas/GenerationFeedback.tsx:39)"}, "properties": {"repobilityId": "2cd1068ea50ce73f", "scanner": "scanner-primary", "fingerprint": "cbc30e0e98570615", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-16db574cc6279ad7", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/components/canvas/ChartEditPanel.tsx:68)"}, "properties": {"repobilityId": "803f8527e47f447e", "scanner": "scanner-primary", "fingerprint": "16db574cc6279ad7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd414f69aadfd243", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)}/generate (apps/admin/components/canvas/ChartEditPanel.tsx:111)"}, "properties": {"repobilityId": "9abfac5d99a1ccce", "scanner": "scanner-primary", "fingerprint": "cd414f69aadfd243", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62a85a8556c2512f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${encodeURIComponent(slug)} (apps/admin/components/canvas/canvasSlotEditing.ts:212)"}, "properties": {"repobilityId": "f4b9f2d99d74613a", "scanner": "scanner-primary", "fingerprint": "62a85a8556c2512f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5583e06a542d421e", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/generate (apps/admin/components/canvas/PromptBar.tsx:134)"}, "properties": {"repobilityId": "ba2d8a3c6b12d842", "scanner": "scanner-primary", "fingerprint": "5583e06a542d421e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c7ae8c5c682aa2ac", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/fix (apps/admin/components/canvas/FixPanel.tsx:59)"}, "properties": {"repobilityId": "0211e999cac2cae5", "scanner": "scanner-primary", "fingerprint": "c7ae8c5c682aa2ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7428372b8dd13aad", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/assets (apps/admin/components/canvas/ImageEditModal.tsx:127)"}, "properties": {"repobilityId": "8471e262d1115384", "scanner": "scanner-primary", "fingerprint": "7428372b8dd13aad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cccd9836fa63ccdd", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/competitions (apps/admin/components/canvas/FootballDataModal.tsx:85)"}, "properties": {"repobilityId": "34c56a85a7d594a9", "scanner": "scanner-primary", "fingerprint": "cccd9836fa63ccdd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45cf68839dd7a0b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/standings?${qs} (apps/admin/components/canvas/FootballDataModal.tsx:120)"}, "properties": {"repobilityId": "21b063da8311863c", "scanner": "scanner-primary", "fingerprint": "45cf68839dd7a0b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c9a9f68f5cf0673", "level": "error", "message": {"text": "Dangling fetch: GET /api/footshorts/data/fixtures?${qs}${extra} (apps/admin/components/canvas/FootballDataModal.tsx:127)"}, "properties": {"repobilityId": "2ee6c20a2405e55d", "scanner": "scanner-primary", "fingerprint": "7c9a9f68f5cf0673", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9bfbccd5e1956d7", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/evaluate (apps/admin/components/canvas/EvaluatorPanel.tsx:64)"}, "properties": {"repobilityId": "d122a6d19e97bc6e", "scanner": "scanner-primary", "fingerprint": "b9bfbccd5e1956d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d38d770fa3e8de02", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${slug}/canvas/compose/start (apps/admin/components/canvas/CanvasClient.tsx:727)"}, "properties": {"repobilityId": "3c315986273853de", "scanner": "scanner-primary", "fingerprint": "d38d770fa3e8de02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf5866632862279e", "level": "error", "message": {"text": "Dangling fetch: GET /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/components/canvas/CanvasClient.tsx:2490)"}, "properties": {"repobilityId": "a759edac44dd2854", "scanner": "scanner-primary", "fingerprint": "bf5866632862279e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12a0855ebd94d79b", "level": "error", "message": {"text": "Dangling fetch: POST /api/stories/${encodeURIComponent(slug)}/canvas/generate-section (apps/admin/components/canvas/CanvasClient.tsx:3343)"}, "properties": {"repobilityId": "92845af4500417b7", "scanner": "scanner-primary", "fingerprint": "12a0855ebd94d79b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4927e768ecaba379", "level": "error", "message": {"text": "Dangling fetch: PUT /api/stories/${encodeURIComponent(slug)}/charts/${encodeURIComponent(chartId)} (apps/admin/components/canvas/CanvasClient.tsx:3639)"}, "properties": {"repobilityId": "aab57118e1213ae8", "scanner": "scanner-primary", "fingerprint": "4927e768ecaba379", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd2ece8257f3d44a", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/ai-models (apps/admin/app/vizmaya/ai-models/page.tsx:35)"}, "properties": {"repobilityId": "8882597392a973d8", "scanner": "scanner-primary", "fingerprint": "dd2ece8257f3d44a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5b0776ec62ac41d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/ai-models (apps/admin/app/vizmaya/ai-models/page.tsx:54)"}, "properties": {"repobilityId": "3b4283c7efc622a3", "scanner": "scanner-primary", "fingerprint": "d5b0776ec62ac41d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff9d48330c06e937", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:43)"}, "properties": {"repobilityId": "e788f7c6b3303e67", "scanner": "scanner-primary", "fingerprint": "ff9d48330c06e937", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c83aa01533890614", "level": "error", "message": {"text": "Dangling fetch: POST /api/vizmaya/authors (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:95)"}, "properties": {"repobilityId": "7ee1dc5310679852", "scanner": "scanner-primary", "fingerprint": "c83aa01533890614", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f1680119c3d11ff", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:100)"}, "properties": {"repobilityId": "e282c302bf280446", "scanner": "scanner-primary", "fingerprint": "9f1680119c3d11ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57d47a4c2918f8dc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/vizmaya/authors/${slug} (apps/admin/app/vizmaya/authors/[slug]/AuthorEditorClient.tsx:119)"}, "properties": {"repobilityId": "9d6d1d0a45cfa8c1", "scanner": "scanner-primary", "fingerprint": "57d47a4c2918f8dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4db56c449cbba21e", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/epics/${slug}/theme (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:123)"}, "properties": {"repobilityId": "81787885f627215f", "scanner": "scanner-primary", "fingerprint": "4db56c449cbba21e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13f4a436ebad10a7", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:124)"}, "properties": {"repobilityId": "8318155bc4199560", "scanner": "scanner-primary", "fingerprint": "13f4a436ebad10a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7369794cc88d9a85", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/apps (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:157)"}, "properties": {"repobilityId": "d857ad3d15311c7a", "scanner": "scanner-primary", "fingerprint": "7369794cc88d9a85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dc469c08afc461d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/show-on-home (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:229)"}, "properties": {"repobilityId": "3dc63a019b0886f7", "scanner": "scanner-primary", "fingerprint": "2dc469c08afc461d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e62443e2dfe176a", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/app (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:248)"}, "properties": {"repobilityId": "1bd3bc1ac74fc1b5", "scanner": "scanner-primary", "fingerprint": "1e62443e2dfe176a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d10ab4657db7d51", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/theme (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:333)"}, "properties": {"repobilityId": "679ba2daa43f4474", "scanner": "scanner-primary", "fingerprint": "0d10ab4657db7d51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c01dae5884a74b44", "level": "error", "message": {"text": "Dangling fetch: PUT /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:344)"}, "properties": {"repobilityId": "5fa5d29f6f9eddc3", "scanner": "scanner-primary", "fingerprint": "c01dae5884a74b44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1c1e844da9439b1", "level": "error", "message": {"text": "Dangling fetch: GET /api/vizmaya/epics/${slug}/stories (apps/admin/app/vizmaya/epics/[slug]/EpicEditorClient.tsx:359)"}, "properties": {"repobilityId": "bfe74def26f832b6", "scanner": "scanner-primary", "fingerprint": "d1c1e844da9439b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b9446b1aac366c1", "level": "error", "message": {"text": "Dangling fetch: POST /api/vizmaya/sign-story-links (apps/admin/lib/useSignedStoryLinks.ts:29)"}, "properties": {"repobilityId": "49832fc4e5a54438", "scanner": "scanner-primary", "fingerprint": "5b9446b1aac366c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81a258685c1f8309", "level": "error", "message": {"text": "Dangling fetch: GET /api/chart-data/${slug}/${id} (packages/viz-engine/src/charts/GenericChart.tsx:106)"}, "properties": {"repobilityId": "11e4fe0a700ae666", "scanner": "scanner-primary", "fingerprint": "81a258685c1f8309", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e16cd519c35069f1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyAudioDispatch.ts:33)"}, "properties": {"repobilityId": "2dbe54bd733a26fa", "scanner": "scanner-primary", "fingerprint": "e16cd519c35069f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac15ddaee46a7890", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyVideoDispatch.ts:55)"}, "properties": {"repobilityId": "8e4d652b1382d0d6", "scanner": "scanner-primary", "fingerprint": "ac15ddaee46a7890", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-436b4a65f90754c3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyShareDispatch.ts:36)"}, "properties": {"repobilityId": "de361204f02b0e8e", "scanner": "scanner-primary", "fingerprint": "436b4a65f90754c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f105818718835e5c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/recapDispatch.ts:43)"}, "properties": {"repobilityId": "de4192d7102f918c", "scanner": "scanner-primary", "fingerprint": "f105818718835e5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efa7bbd5849d10f4", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/heygenTemplateDispatch.ts:56)"}, "properties": {"repobilityId": "5f15018ace8bfd20", "scanner": "scanner-primary", "fingerprint": "efa7bbd5849d10f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b73ea668e5a67a8", "level": "error", "message": {"text": "Dangling fetch: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent?key=${ctx.apiKey} (packages/content-source/src/storyAudioGenerate.ts:211)"}, "properties": {"repobilityId": "f37be221c6bd4a3c", "scanner": "scanner-primary", "fingerprint": "4b73ea668e5a67a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6036d9ebc3f602da", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storyPdfDispatch.ts:43)"}, "properties": {"repobilityId": "6e080fb89064e492", "scanner": "scanner-primary", "fingerprint": "6036d9ebc3f602da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e221bb6c67fe5e29", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/social/posts/${encodeURIComponent(postId)}/render-share (packages/content-source/src/usePollShareRender.ts:45)"}, "properties": {"repobilityId": "ae6647fc42c7bf08", "scanner": "scanner-primary", "fingerprint": "e221bb6c67fe5e29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e04809506e5e329", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/social/posts/${encodeURIComponent(postId)}/render-share (packages/content-source/src/usePollShareRender.ts:77)"}, "properties": {"repobilityId": "056682fb18c93f25", "scanner": "scanner-primary", "fingerprint": "3e04809506e5e329", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8dd0bef2667a47f8", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/actions/workflows/${WORKFLOW_FILE}/dispatches (packages/content-source/src/storySourceExtractDispatch.ts:37)"}, "properties": {"repobilityId": "9c6edaad0e961f7c", "scanner": "scanner-primary", "fingerprint": "8dd0bef2667a47f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b95fecd8f16ac6a", "level": "note", "message": {"text": "Unused endpoint: POST /run/telemetry-analysis"}, "properties": {"repobilityId": "389db484332555eb", "scanner": "scanner-primary", "fingerprint": "0b95fecd8f16ac6a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53ee3b6483489ba1", "level": "note", "message": {"text": "Unused endpoint: POST /run/angle-discovery"}, "properties": {"repobilityId": "9f5a876f5fefef7e", "scanner": "scanner-primary", "fingerprint": "53ee3b6483489ba1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b1b59c0256c7478", "level": "note", "message": {"text": "Unused endpoint: POST /run/story-generation"}, "properties": {"repobilityId": "58cd48ff092f9f75", "scanner": "scanner-primary", "fingerprint": "5b1b59c0256c7478", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95faf5285003383b", "level": "note", "message": {"text": "Unused endpoint: GET /run/{run_id}/status"}, "properties": {"repobilityId": "991e806801bd5192", "scanner": "scanner-primary", "fingerprint": "95faf5285003383b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e7e028d5add90a4a", "level": "note", "message": {"text": "Unused endpoint: POST /ingest/session"}, "properties": {"repobilityId": "ce4046586675013d", "scanner": "scanner-primary", "fingerprint": "e7e028d5add90a4a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fade69cf284c99f6", "level": "note", "message": {"text": "Unused endpoint: POST /ingest/enrich-only"}, "properties": {"repobilityId": "414cad0d4060b56f", "scanner": "scanner-primary", "fingerprint": "fade69cf284c99f6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9767c4421b7a155", "level": "note", "message": {"text": "Unused endpoint: POST /ingest/enrich-positions"}, "properties": {"repobilityId": "bbac600b58baca60", "scanner": "scanner-primary", "fingerprint": "c9767c4421b7a155", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e892a1fb00ea0c0a", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/available"}, "properties": {"repobilityId": "100b35641a81e29c", "scanner": "scanner-primary", "fingerprint": "e892a1fb00ea0c0a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6eb452fbfb454d20", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth"}, "properties": {"repobilityId": "1b2eb112e619732e", "scanner": "scanner-primary", "fingerprint": "6eb452fbfb454d20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d23a060528c7d8b7", "level": "note", "message": {"text": "Unused endpoint: USE /api/stories"}, "properties": {"repobilityId": "6d2bb3c1cedf9599", "scanner": "scanner-primary", "fingerprint": "d23a060528c7d8b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d2d069b7da50f78", "level": "note", "message": {"text": "Unused endpoint: USE /api/signals"}, "properties": {"repobilityId": "56b2d4425980aad0", "scanner": "scanner-primary", "fingerprint": "7d2d069b7da50f78", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5562774db22a7db8", "level": "note", "message": {"text": "Unused endpoint: USE /api/telemetry"}, "properties": {"repobilityId": "e95c97cf21969c87", "scanner": "scanner-primary", "fingerprint": "5562774db22a7db8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-21fc584ff580c3c7", "level": "note", "message": {"text": "Unused endpoint: USE /api/graphs"}, "properties": {"repobilityId": "71aa25048d3f836b", "scanner": "scanner-primary", "fingerprint": "21fc584ff580c3c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d93a530ce10d47d9", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin"}, "properties": {"repobilityId": "b99d79f2cc4995a9", "scanner": "scanner-primary", "fingerprint": "d93a530ce10d47d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a42af606c831d48", "level": "note", "message": {"text": "Unused endpoint: USE /api/analysis-angles"}, "properties": {"repobilityId": "1982ad14bbecd0e8", "scanner": "scanner-primary", "fingerprint": "6a42af606c831d48", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "b4a8f8fe8a8cd5c1", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "93db423097d7190b", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a61c112b611f4bb", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id"}, "properties": {"repobilityId": "144027bc61aa79d5", "scanner": "scanner-primary", "fingerprint": "7a61c112b611f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd71dfa1d0356c5b", "level": "note", "message": {"text": "Unused endpoint: GET /:slug"}, "properties": {"repobilityId": "8ba91d7e72fe2206", "scanner": "scanner-primary", "fingerprint": "dd71dfa1d0356c5b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fbc954f63526821", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id"}, "properties": {"repobilityId": "cbae3d11b1857ea4", "scanner": "scanner-primary", "fingerprint": "5fbc954f63526821", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6d589fc537557405", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id/publish"}, "properties": {"repobilityId": "e4acb93b141f1117", "scanner": "scanner-primary", "fingerprint": "6d589fc537557405", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0af9e12649346595", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id/permanent"}, "properties": {"repobilityId": "def197f5980f0f7f", "scanner": "scanner-primary", "fingerprint": "0af9e12649346595", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34524fad82f5fab0", "level": "note", "message": {"text": "Unused endpoint: POST /:id/generate"}, "properties": {"repobilityId": "f587d3fb2067be08", "scanner": "scanner-primary", "fingerprint": "34524fad82f5fab0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8e62709a71e8eb9", "level": "note", "message": {"text": "Unused endpoint: GET /:id/run-status"}, "properties": {"repobilityId": "00929d7a1d560c7e", "scanner": "scanner-primary", "fingerprint": "f8e62709a71e8eb9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa413208496243a5", "level": "note", "message": {"text": "Unused endpoint: POST /sync"}, "properties": {"repobilityId": "ed913f80055061e3", "scanner": "scanner-primary", "fingerprint": "fa413208496243a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "b96cd8b035ca3864", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea575b61c121b733", "level": "note", "message": {"text": "Unused endpoint: PATCH /me"}, "properties": {"repobilityId": "6cbd014f1fa5a09c", "scanner": "scanner-primary", "fingerprint": "ea575b61c121b733", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-841e50bf821e4158", "level": "note", "message": {"text": "Unused endpoint: GET /users"}, "properties": {"repobilityId": "25378fd1a9ae1b17", "scanner": "scanner-primary", "fingerprint": "841e50bf821e4158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01b5d572dd285e2c", "level": "note", "message": {"text": "Unused endpoint: PATCH /users/:id/role"}, "properties": {"repobilityId": "962a7e6690eee4d6", "scanner": "scanner-primary", "fingerprint": "01b5d572dd285e2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3be912c6187ea599", "level": "note", "message": {"text": "Unused endpoint: GET /runs"}, "properties": {"repobilityId": "961a497b1fad1548", "scanner": "scanner-primary", "fingerprint": "3be912c6187ea599", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4bf9a993455c2376", "level": "note", "message": {"text": "Unused endpoint: GET /runs/:id"}, "properties": {"repobilityId": "43622e802f418cad", "scanner": "scanner-primary", "fingerprint": "4bf9a993455c2376", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-451f3af47cd5130f", "level": "note", "message": {"text": "Unused endpoint: DELETE /runs/:id"}, "properties": {"repobilityId": "bd0640819f618e02", "scanner": "scanner-primary", "fingerprint": "451f3af47cd5130f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9daeb7b1a43e9733", "level": "note", "message": {"text": "Unused endpoint: POST /runs"}, "properties": {"repobilityId": "46d12256755bc2f6", "scanner": "scanner-primary", "fingerprint": "9daeb7b1a43e9733", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1e3a9371ae299f2d", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey/summary"}, "properties": {"repobilityId": "20f3fb63b1168d94", "scanner": "scanner-primary", "fingerprint": "1e3a9371ae299f2d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-00d297d86aa253fe", "level": "note", "message": {"text": "Unused endpoint: GET /audit"}, "properties": {"repobilityId": "2211ba5f5fd72684", "scanner": "scanner-primary", "fingerprint": "00d297d86aa253fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf8908b63906089b", "level": "note", "message": {"text": "Unused endpoint: POST /bulk-select"}, "properties": {"repobilityId": "280915c6ae276a45", "scanner": "scanner-primary", "fingerprint": "cf8908b63906089b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "eda84d649e217720", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90631dcf4fb49f54", "level": "note", "message": {"text": "Unused endpoint: POST /bulk"}, "properties": {"repobilityId": "c1b76289aa18dc90", "scanner": "scanner-primary", "fingerprint": "90631dcf4fb49f54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b15d518d538de57d", "level": "note", "message": {"text": "Unused endpoint: GET /sessions"}, "properties": {"repobilityId": "903e39d391022d79", "scanner": "scanner-primary", "fingerprint": "b15d518d538de57d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-45537717c2619b5c", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey/status"}, "properties": {"repobilityId": "921ec95705164c88", "scanner": "scanner-primary", "fingerprint": "45537717c2619b5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9643484d78438d16", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey"}, "properties": {"repobilityId": "62a86ee50260b4c9", "scanner": "scanner-primary", "fingerprint": "9643484d78438d16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e68e0fc4f788b543", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey/laps"}, "properties": {"repobilityId": "67d41281277d8d4c", "scanner": "scanner-primary", "fingerprint": "e68e0fc4f788b543", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5856cdcb5d0b993d", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey/positions"}, "properties": {"repobilityId": "574d123408ad524a", "scanner": "scanner-primary", "fingerprint": "5856cdcb5d0b993d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-75d4669cf1f3a210", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey/positions/:driverNumber"}, "properties": {"repobilityId": "3c7c5ce2d56e9607", "scanner": "scanner-primary", "fingerprint": "75d4669cf1f3a210", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8841b825665db659", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey/aggregates"}, "properties": {"repobilityId": "1798e750827941b1", "scanner": "scanner-primary", "fingerprint": "8841b825665db659", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9569ad041a819464", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:sessionKey/sector-bests"}, "properties": {"repobilityId": "323270fbe50ea183", "scanner": "scanner-primary", "fingerprint": "9569ad041a819464", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7dfb00bb68f29e3", "level": "note", "message": {"text": "Unused endpoint: GET /circuits/:circuitKey"}, "properties": {"repobilityId": "f6403ee5a5cb4a12", "scanner": "scanner-primary", "fingerprint": "d7dfb00bb68f29e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65a667bcc38fb792", "level": "note", "message": {"text": "Unused endpoint: POST /ingest"}, "properties": {"repobilityId": "d0f93e72baf6e42c", "scanner": "scanner-primary", "fingerprint": "65a667bcc38fb792", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fad0f9d75a1e96c5", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:sessionKey/retry"}, "properties": {"repobilityId": "a5f0d86bf2940b94", "scanner": "scanner-primary", "fingerprint": "fad0f9d75a1e96c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cfd7b9eded27642", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:sessionKey/retry-positions"}, "properties": {"repobilityId": "17f65b44cdb8d889", "scanner": "scanner-primary", "fingerprint": "1cfd7b9eded27642", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}