{"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": "foundry_assumption_check", "name": "Foundry mined assumption checks: wisdomproto/dflo", "shortDescription": {"text": "Foundry mined assumption checks: wisdomproto/dflo"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: wisdomproto/dflo\nThread: wisdomproto/dflo#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: wisdomproto/dflo#1\nRepo: wisdomproto/dflo\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 100\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'docs_or_claims': 5, 'source_or_other': 61, 'schema_or_data': 13, 'api_or_backend': 1, 'ui_or_frontend': 20}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-015521a07d099e0f\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \""}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: wisdomproto/dflo", "shortDescription": {"text": "Foundry mined schema ui api mismatch: wisdomproto/dflo"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: wisdomproto/dflo\nThread: wisdomproto/dflo#1\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: wisdomproto/dflo\nThread: wisdomproto/dflo#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: wisdomproto/dflo#1\nRepo: wisdomproto/dflo\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 110\nEdges: 136\nNode types: {'pr_file': 100, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 100,"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "scanner-8d9c2ee4c208180e", "name": "Possibly dead Python function: process_image", "shortDescription": {"text": "Possibly dead Python function: process_image"}, "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-4d42103d2d005e35", "name": "Possibly dead Python function: gender_long", "shortDescription": {"text": "Possibly dead Python function: gender_long"}, "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-66151d546b9f347f", "name": "Stray `console.log` in TS/JS \u2014 ai-server/src/index.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ai-server/src/index.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2dbbbb61e507a8e5", "name": "Stray `console.log` in TS/JS \u2014 ai-server/src/services/scheduler.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ai-server/src/services/scheduler.ts:53"}, "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-efaaef2bfa0880d7", "name": "TODO/FIXME marker in shipping code \u2014 ai-server/src/services/publishPush.ts:55", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 ai-server/src/services/publishPush.ts:55"}, "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-ac37de5ff8c29e86", "name": "Stray `console.log` in TS/JS \u2014 ai-server/src/services/deployHook.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ai-server/src/services/deployHook.ts:38"}, "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-01163c4098dc7515", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/shared/components/Layout.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/shared/components/Layout.tsx:87"}, "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-c9f2800e40a2c007", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/shared/components/MeasurementTable.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/shared/components/MeasurementTable.tsx:117"}, "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-3b225f6f625932e3", "name": "Stray `console.log` in TS/JS \u2014 v4/src/shared/lib/logger.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 v4/src/shared/lib/logger.ts:5"}, "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-146de38c2d875939", "name": "Icon-only button without accessible name \u2014 v4/src/pages/HomePage.tsx:382", "shortDescription": {"text": "Icon-only button without accessible name \u2014 v4/src/pages/HomePage.tsx:382"}, "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-f850e0bfda3a1f52", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/RecipesListPage.tsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/RecipesListPage.tsx:52"}, "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-bf21ba84aac96b03", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/InfoPage.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/InfoPage.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9dc4974c5dd83cb9", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/admin/AdminPatientsPage.tsx:708", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/admin/AdminPatientsPage.tsx:708"}, "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-3d3873b369d3e1d9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/website/components/HeightCalculator.tsx:160", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/website/components/HeightCalculator.tsx:160"}, "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-183d5789e89b57e1", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/website/components/ShareSheet.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/website/components/ShareSheet.tsx:128"}, "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-c86b30a60c9f9a83", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/website/pages/AdminAnalyticsPage.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/website/pages/AdminAnalyticsPage.tsx:100"}, "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-c28f070cc80416a3", "name": "TODO/FIXME marker in shipping code \u2014 v4/src/features/website/pages/IntakeDiagnosisPage.tsx:127", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 v4/src/features/website/pages/IntakeDiagnosisPage.tsx:127"}, "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-e2d556480c5982f8", "name": "Stray `console.log` in TS/JS \u2014 v4/src/features/website/pages/IntakeDiagnosisPage.tsx:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 v4/src/features/website/pages/IntakeDiagnosisPage.tsx: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-ed43c742254e7e23", "name": "Icon-only button without accessible name \u2014 v4/src/features/hospital/components/SimilarCasesModal.tsx:81", "shortDescription": {"text": "Icon-only button without accessible name \u2014 v4/src/features/hospital/components/SimilarCasesModal.tsx:81"}, "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-e8d6a51b3c10f7bd", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/VisitDetailPanel.tsx:954", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/VisitDetailPanel.tsx:954"}, "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-494af66ed2265baf", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/PrescriptionsBlock.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/PrescriptionsBlock.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-a25ad89818bf7831", "name": "\"active\" state uses light bg in a dark theme \u2014 v4/src/features/hospital/components/LifestylePanel.tsx:324", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 v4/src/features/hospital/components/LifestylePanel.tsx:324"}, "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-826c530dc24f5f66", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/intake/SectionCard.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/intake/SectionCard.tsx:57"}, "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-7e8b078e466de6c8", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/intake/IntakeClinicalSection.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/intake/IntakeClinicalSection.tsx:357"}, "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-6ea4cd4bfbcd0933", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ChannelTrafficTab.tsx:19", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ChannelTrafficTab.tsx:19"}, "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-c535a451aab23530", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/CompetitorsPage.tsx:138", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/CompetitorsPage.tsx:138"}, "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-ee5647eca45dd4af", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ChannelRegistryTab.tsx:423", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ChannelRegistryTab.tsx:423"}, "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-0ff6dd3b47d21bfc", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/PublishCalendar.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/PublishCalendar.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-61d7a6ae2f2ec1ae", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/MentionCard.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/MentionCard.tsx:140"}, "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-15b8651860b88857", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/marketing/components/BlogPreviewPage.tsx:44", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/marketing/components/BlogPreviewPage.tsx:44"}, "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-ebaf53681e6f94b3", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/CampaignEditor.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/CampaignEditor.tsx:241"}, "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-3b5e2def398e6fb0", "name": "Icon-only button without accessible name \u2014 v4/src/features/marketing/components/ads/CreativePicker.tsx:66", "shortDescription": {"text": "Icon-only button without accessible name \u2014 v4/src/features/marketing/components/ads/CreativePicker.tsx:66"}, "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-a9da556d997682fa", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/ChannelFeedTab.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/ChannelFeedTab.tsx:164"}, "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-ec0747de2c082751", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/AudienceTargeting.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/AudienceTargeting.tsx:131"}, "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-3f4ba0f5948386b0", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/DirectUploadTab.tsx:199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/DirectUploadTab.tsx:199"}, "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-0309ae521df2dd72", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/marketing/components/content/BlogSeoEditor.tsx:111", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/marketing/components/content/BlogSeoEditor.tsx:111"}, "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-56273b92514cb7bc", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/ContentListPanel.tsx:8", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/ContentListPanel.tsx:85"}, "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-bc42ae6b3f8755fe", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/BlogPreviewModal.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/BlogPreviewModal.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-b0873a18c051d8a0", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/reelEditor/RenderJobWi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/reelEditor/RenderJobWidget.tsx:185"}, "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-70bd49eb529da3de", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/reelEditor/ReelTimelin", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/reelEditor/ReelTimeline.tsx:93"}, "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-b7004b4b1dd2d7ad", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/PatientStoryModal.tsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/PatientStoryModal.tsx:51"}, "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-df89678ce4ff5b84", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/IntakeSubmissionDetail.tsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/IntakeSubmissionDetail.tsx:266"}, "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-448de6a4eaa17c98", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/AdminLayout.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/AdminLayout.tsx:242"}, "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-c65118d9c333df16", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/records/components/PatientHeaderCard.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/records/components/PatientHeaderCard.tsx:54"}, "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-b589273e9d1f30d7", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/records/components/VisitTimelineCard.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/records/components/VisitTimelineCard.tsx:192"}, "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-291ce0d082bdc31e", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/intake/components/StepUploads.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/intake/components/StepUploads.tsx:113"}, "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-b129ee046e99ce5f", "name": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/content/components/RecipeSwipeCard.tsx:27", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/content/components/RecipeSwipeCard.tsx:27"}, "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-c8c4cd5ba07d540d", "name": "Runtime dotenv file present in repo: v4/.env.production", "shortDescription": {"text": "Runtime dotenv file present in repo: v4/.env.production"}, "fullDescription": {"text": "`v4/.env.production` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14c3bd2b6ba878cf", "name": "Possible secret in cases/import_patient_roster.mjs", "shortDescription": {"text": "Possible secret in cases/import_patient_roster.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-237143697565dfcc", "name": "Insecure pattern 'direct_innerhtml_assignment' in cases/select_case_candidates.mjs:335", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cases/select_case_candidates.mjs:335"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21b746a7ded87e84", "name": "Insecure pattern 'direct_innerhtml_assignment' in cases/gen_case_profiles.mjs:739", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cases/gen_case_profiles.mjs:739"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-18d14311653052a9", "name": "Possible secret in cases/upsert_children_from_labs.mjs", "shortDescription": {"text": "Possible secret in cases/upsert_children_from_labs.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5bbec79aceb09e7c", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/cardnews/build-html.mjs:82", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/cardnews/build-html.mjs:82"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8659a6c156e8e1aa", "name": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-sync.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-sync.mjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a982723dc90f4c20", "name": "Insecure pattern 'node_child_process' in remotion/scripts/build-mainclip-warp.mjs:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/build-mainclip-warp.mjs:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d21aa52d5fe9d95", "name": "Insecure pattern 'node_child_process' in remotion/scripts/make-presenter-base.mjs:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/make-presenter-base.mjs:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fb1e9c9dc57144b6", "name": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-sync-ko.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-sync-ko.mjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d45f3665fa225a3", "name": "Insecure pattern 'node_child_process' in remotion/scripts/prep-lipsync.mjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/prep-lipsync.mjs:4"}, "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-47e088ceb2a47d78", "name": "Insecure pattern 'node_child_process' in remotion/scripts/reel-worker.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/reel-worker.mjs:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-feab030798c93540", "name": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-short.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-short.mjs:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a18c3c990596b098", "name": "Insecure pattern 'node_child_process' in remotion/scripts/gen-mainclip-tts.mjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-mainclip-tts.mjs:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-040fe0b26433a82d", "name": "Insecure pattern 'node_child_process' in remotion/scripts/make-contact-sheets.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/make-contact-sheets.mjs:3"}, "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-ff6ccfffde7f8328", "name": "Insecure pattern 'direct_innerhtml_assignment' in marketing/\uc5f0\uc138\uc0c8\ubd04\uc758\uc6d0_\ub9c8\ucf00\ud305\uc804\ub7b5 260323.html:1380", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in marketing/\uc5f0\uc138\uc0c8\ubd04\uc758\uc6d0_\ub9c8\ucf00\ud305\uc804\ub7b5 260323.html:1380"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85f0601f05522d9a", "name": "Possible secret in v4/scripts/create_admin.mjs", "shortDescription": {"text": "Possible secret in v4/scripts/create_admin.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-fa41755a15a1cc5c", "name": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/consulting.html:604", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/consulting.html:604"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9a17fa235342968", "name": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/_shell.js:184", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/_shell.js:184"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c9814dcfca10b6f9", "name": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/case-charts.js:3", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/case-charts.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1ff42f16c65aab3", "name": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/youtube-analysis.html:592", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/youtube-analysis.html:592"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c74cbb3f474a8e80", "name": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/domestic-strategy.html:1380", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/domestic-strategy.html:1380"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-69ce0b6252410d25", "name": "Insecure pattern 'local_storage_auth_token' in v4/src/shared/components/Layout.tsx:35", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in v4/src/shared/components/Layout.tsx:35"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7acf9bcca2e9c822", "name": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/website/components/HeightCalculator.tsx:160", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/website/components/HeightCalculator.tsx:160"}, "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-be7ad4e3daa9c194", "name": "Insecure pattern 'local_storage_auth_token' in v4/src/features/website/pages/AdminAnalyticsPage.tsx:70", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in v4/src/features/website/pages/AdminAnalyticsPage.tsx:70"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e71009f37640620", "name": "Insecure pattern 'local_storage_auth_token' in v4/src/features/website/pages/AdminWebsitePage.tsx:151", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in v4/src/features/website/pages/AdminWebsitePage.tsx:151"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0cfc7495744f7961", "name": "Insecure pattern 'direct_innerhtml_assignment' in v4/src/features/hospital/lib/caseChartsStandalone.ts:143", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/src/features/hospital/lib/caseChartsStandalone.ts:143"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aba7306053deeffc", "name": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/marketing/components/BlogPreviewPage.tsx:44", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/marketing/components/BlogPreviewPage.tsx:44"}, "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-3957fd4babaed608", "name": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/marketing/components/content/BlogSeoEditor.tsx:111", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/marketing/components/content/BlogSeoEditor.tsx:111"}, "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9a29d765cba7f986", "name": "Very large file: cases/gen_case_profiles.mjs (965 lines)", "shortDescription": {"text": "Very large file: cases/gen_case_profiles.mjs (965 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-eeea302969d5ca3e", "name": "Very large file: v4/src/features/website/components/SectionCarousel.tsx (1389 lines)", "shortDescription": {"text": "Very large file: v4/src/features/website/components/SectionCarousel.tsx (1389 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-99f0f780ac9ba800", "name": "Very large file: v4/src/features/guide/components/SectionRenderer.tsx (1781 lines)", "shortDescription": {"text": "Very large file: v4/src/features/guide/components/SectionRenderer.tsx (1781 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": "45 test file(s) for 654 source file(s) (ratio 0.07). 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-dbef5a20e01dfb62", "name": "Node manifest has dependencies but no lockfile: migration/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: migration/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 784 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 258 placeholder/mock markers across 71 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, 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": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, 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-5d7c2d14f748dffa", "name": "Commented-code block (5 lines) in cases/generate_patient_stories.mjs:6", "shortDescription": {"text": "Commented-code block (5 lines) in cases/generate_patient_stories.mjs: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-e2665010ef53fede", "name": "Commented-code block (7 lines) in cases/insert_prescriptions.mjs:6", "shortDescription": {"text": "Commented-code block (7 lines) in cases/insert_prescriptions.mjs: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-bc1b3c75d002e5e5", "name": "Commented-code block (6 lines) in cases/import_patient_roster.mjs:3", "shortDescription": {"text": "Commented-code block (6 lines) in cases/import_patient_roster.mjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c26310f04a2907f1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cases/select_case_candidates.mjs:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/select_case_candidates.mjs: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-e66ef87dc37668c8", "name": "Commented-code block (5 lines) in cases/upsert_patient_story.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in cases/upsert_patient_story.mjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbdc27cf9ae29392", "name": "Commented-code block (6 lines) in cases/import_ocr_measurements.mjs:6", "shortDescription": {"text": "Commented-code block (6 lines) in cases/import_ocr_measurements.mjs: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-e825170a9fc644d7", "name": "Commented-code block (5 lines) in cases/gen_case_profiles.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in cases/gen_case_profiles.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b4808ef40e023d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cases/gen_case_profiles.mjs:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/gen_case_profiles.mjs: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-ae16e0ddbb95b821", "name": "Commented-code block (5 lines) in cases/recode_medications.mjs:3", "shortDescription": {"text": "Commented-code block (5 lines) in cases/recode_medications.mjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a9e6afff0e9885f", "name": "Commented-code block (5 lines) in cases/r2_upload_website.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in cases/r2_upload_website.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2b298d193d41738", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cases/r2_upload_website.mjs:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/r2_upload_website.mjs: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-79a50bdbe14301c0", "name": "Commented-code block (5 lines) in cases/backfill_measurement_pah.mjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in cases/backfill_measurement_pah.mjs: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-8d8a71b27c8075c1", "name": "Commented-code block (6 lines) in cases/parse_eone.py:456", "shortDescription": {"text": "Commented-code block (6 lines) in cases/parse_eone.py:456"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75d1ee21456cdc58", "name": "Commented-code block (5 lines) in cases/import_intake_surveys.mjs:6", "shortDescription": {"text": "Commented-code block (5 lines) in cases/import_intake_surveys.mjs: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-bbb758b6a9ad86ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cases/verify_demo_login.mjs:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/verify_demo_login.mjs:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d24ebc39987e9698", "name": "Commented-code block (5 lines) in cases/parse_prescriptions.py:7", "shortDescription": {"text": "Commented-code block (5 lines) in cases/parse_prescriptions.py: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-7a909059f4af3240", "name": "Commented-code block (5 lines) in cases/remap_labs_to_clinical_visits.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in cases/remap_labs_to_clinical_visits.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93de26ac3a9878a9", "name": "Commented-code block (7 lines) in cases/upsert_children_from_labs.mjs:4", "shortDescription": {"text": "Commented-code block (7 lines) in cases/upsert_children_from_labs.mjs: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-6957491021e78426", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/export-ko-for-zh.mjs:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/export-ko-for-zh.mjs: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-3f01638d9c5b065e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/fetch-sources.mjs:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/fetch-sources.mjs:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb19ce7ec775fca0", "name": "Commented-code block (5 lines) in docs/blog/import-to-db.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/blog/import-to-db.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfe07d66ae9e644e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/import-to-db.mjs:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/import-to-db.mjs:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80547f00f5e27ad5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/import-zh-blog.mjs:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/import-zh-blog.mjs: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-7f2cdb06337cffc2", "name": "Commented-code block (6 lines) in docs/blog/build-preview.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/blog/build-preview.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e5629c33fff8c33", "name": "Commented-code block (6 lines) in docs/blog/lib/seo-check.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/blog/lib/seo-check.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8f18fb44739538e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/import-to-db.mjs:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/import-to-db.mjs: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-4db63e250011762e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/export-ch-for-cn.mjs:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/export-ch-for-cn.mjs: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-c34b2e41106050ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/import-cn-cardnews.mjs:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/import-cn-cardnews.mjs:13"}, "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-76108b450c6a4ae4", "name": "Commented-code block (5 lines) in remotion/scripts/render-thumbs.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in remotion/scripts/render-thumbs.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2e95ba36760d6c7", "name": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-sync.mjs:16", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-sync.mjs:16"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01d73fc686f504cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-sync.mjs:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-sync.mjs:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31098c91839ad3b1", "name": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-seq.mjs:20", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-seq.mjs:20"}, "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-516f3d08cdc7fa5a", "name": "Commented-code block (5 lines) in remotion/scripts/gen-tts-seq.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in remotion/scripts/gen-tts-seq.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8689e0695dbbd326", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-seq.mjs:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-seq.mjs: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-b125c9b4c4f9ee5a", "name": "Commented-code block (7 lines) in remotion/scripts/build-mainclip-warp.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in remotion/scripts/build-mainclip-warp.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd195db7e709437f", "name": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-sync-ko.mjs:14", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-sync-ko.mjs:14"}, "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-fe4e9b99a06a1930", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-sync-ko.mjs:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-sync-ko.mjs: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-1d2077f4bd17f9b1", "name": "Commented-code block (5 lines) in remotion/scripts/gen-tts.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in remotion/scripts/gen-tts.mjs: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-c1f5bec99d856440", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts.mjs:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts.mjs:94"}, "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-f1a623a8c704707d", "name": "Legacy-named symbol `multilingual_v2` in remotion/scripts/gen-tts-line.mjs:19", "shortDescription": {"text": "Legacy-named symbol `multilingual_v2` in remotion/scripts/gen-tts-line.mjs:19"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2422528d195b2878", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-line.mjs:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-line.mjs:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17144d0bd6d33ce1", "name": "Legacy-named symbol `multilingual_v2` in remotion/scripts/gen-tts-short.mjs:22", "shortDescription": {"text": "Legacy-named symbol `multilingual_v2` in remotion/scripts/gen-tts-short.mjs:22"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a8916fc1792a58c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-short.mjs:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-short.mjs: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-8c5074b755ed0aaa", "name": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-mainclip-tts.mjs:23", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-mainclip-tts.mjs:23"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc3d703f6337972c", "name": "Commented-code block (8 lines) in remotion/scripts/gen-mainclip-tts.mjs:1", "shortDescription": {"text": "Commented-code block (8 lines) in remotion/scripts/gen-mainclip-tts.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-709fc8c160a20e63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-mainclip-tts.mjs:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-mainclip-tts.mjs: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-d671d5a7de29ed34", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/storyboard-to-reel.mjs:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/storyboard-to-reel.mjs:88"}, "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-ccf4c73896d39406", "name": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/lib/reelDb.mjs:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/lib/reelDb.mjs: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-b2efa3175e4dd43d", "name": "Commented-code block (7 lines) in remotion/src/mainclip/overlays.tsx:207", "shortDescription": {"text": "Commented-code block (7 lines) in remotion/src/mainclip/overlays.tsx:207"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f8d9d3e2048c485", "name": "Commented-code block (5 lines) in remotion/src/shorts/_shared/StackedShort.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in remotion/src/shorts/_shared/StackedShort.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f5bbbee76e3bea5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 migration/scripts/export-website.mjs:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 migration/scripts/export-website.mjs: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-c95c7473ebe0742b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/set-fb-photos.mjs:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/set-fb-photos.mjs:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-addf3d6e149bc5ef", "name": "Commented-code block (7 lines) in ai-server/scripts/ingest-evidence.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in ai-server/scripts/ingest-evidence.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5acd7303bc112353", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/check-fb-about.mjs:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/check-fb-about.mjs: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-8c8b0d850dcfd860", "name": "Commented-code block (10 lines) in ai-server/scripts/backfill-embeddings.mjs:1", "shortDescription": {"text": "Commented-code block (10 lines) in ai-server/scripts/backfill-embeddings.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-916761e389f53d8a", "name": "Commented-code block (5 lines) in ai-server/scripts/validate-evidence-search.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/scripts/validate-evidence-search.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-423d4d158d5fef01", "name": "Commented-code block (6 lines) in ai-server/scripts/attach-references.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in ai-server/scripts/attach-references.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0788f4a65f5892f", "name": "Commented-code block (8 lines) in ai-server/scripts/setup-ga4-oauth.mjs:3", "shortDescription": {"text": "Commented-code block (8 lines) in ai-server/scripts/setup-ga4-oauth.mjs:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-465d88f348f189f2", "name": "Commented-code block (5 lines) in ai-server/scripts/set-fb-about.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/scripts/set-fb-about.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c72816bca1c81a10", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/set-fb-about.mjs:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/set-fb-about.mjs:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e23be91066d99ae2", "name": "Commented-code block (6 lines) in ai-server/src/middleware/marketingAuth.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in ai-server/src/middleware/marketingAuth.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-cbba214412f35228", "name": "Commented-code block (5 lines) in ai-server/src/routes/coaching.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/src/routes/coaching.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-819788283f40cd8b", "name": "Commented-code block (6 lines) in ai-server/src/routes/patientAnalysis.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in ai-server/src/routes/patientAnalysis.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-6405aa17f7d89613", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaFeed.ts:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaFeed.ts:105"}, "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-3c81361e6c7b4081", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/openalex.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/openalex.ts:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5201fcba039b2b6e", "name": "Commented-code block (12 lines) in ai-server/src/services/metaAds.ts:1", "shortDescription": {"text": "Commented-code block (12 lines) in ai-server/src/services/metaAds.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-d9f54e20632fd6df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaAds.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaAds.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-dd3c774c7fc10632", "name": "Commented-code block (6 lines) in ai-server/src/services/seoAudit.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in ai-server/src/services/seoAudit.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-8a66eb535a87320e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/seoAudit.ts:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/seoAudit.ts:96"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d79121a0b167a29a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaPublish.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaPublish.ts:5"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1dd39b65a90a53f", "name": "Commented-code block (5 lines) in ai-server/src/services/competitorAnalyzer.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/src/services/competitorAnalyzer.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-b6dc8411e40ed61f", "name": "Commented-code block (5 lines) in ai-server/src/services/ga4.ts:222", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/src/services/ga4.ts:222"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0811050de0dc2d21", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaAudiences.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaAudiences.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-43431a81833efe98", "name": "Commented-code block (5 lines) in ai-server/src/services/keywordIdeas.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/src/services/keywordIdeas.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-34b3fff2fb5cb431", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaTargeting.ts:213", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaTargeting.ts:213"}, "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-8702086c8a23c0ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/pubmed.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/pubmed.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-9c012f0c6396fd31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaOAuth.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaOAuth.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-f36f7f31c6bfebe0", "name": "Commented-code block (5 lines) in ai-server/src/services/contentPrompts.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/src/services/contentPrompts.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-55482aa52e285d96", "name": "Commented-code block (5 lines) in ai-server/src/services/publishPush.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in ai-server/src/services/publishPush.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-312922afaabbd795", "name": "Commented-code block (5 lines) in v4/vite.config.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in v4/vite.config.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1218c78bf100eca4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/build-i18n.mjs:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/build-i18n.mjs: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-87caf96c359966c7", "name": "Commented-code block (6 lines) in v4/scripts/upload-reel-covers.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in v4/scripts/upload-reel-covers.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2104aaaf867ca50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/upload-reel-covers.mjs:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/upload-reel-covers.mjs: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-dde92e07b9f0cd30", "name": "Commented-code block (5 lines) in v4/scripts/create_admin.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/scripts/create_admin.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-789e87066f6d55b6", "name": "Commented-code block (5 lines) in v4/scripts/setup_storage.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/scripts/setup_storage.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9a049ab2d4d4178", "name": "Commented-code block (5 lines) in v4/scripts/lib/img-attrs.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/scripts/lib/img-attrs.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e9027410fa50b4e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/lib/fetch-contentflow-posts.mjs:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/lib/fetch-contentflow-posts.mjs:6"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8a9beaae799fb20", "name": "Commented-code block (5 lines) in v4/public/_shell.js:261", "shortDescription": {"text": "Commented-code block (5 lines) in v4/public/_shell.js: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-75f86b21b52cd706", "name": "Commented-code block (6 lines) in v4/src/stores/authStore.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/stores/authStore.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-68b0df9278902937", "name": "Commented-code block (6 lines) in v4/src/shared/components/BottomNav.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/shared/components/BottomNav.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98425a3538003525", "name": "Commented-code block (5 lines) in v4/src/shared/components/GrowthChart.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/shared/components/GrowthChart.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac6ce8254765ca20", "name": "Commented-code block (5 lines) in v4/src/shared/components/MeasurementTable.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/shared/components/MeasurementTable.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc9bf1415be05e81", "name": "Commented-code block (5 lines) in v4/src/reel-stubs/shorts/_shared/PresenterShort.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/reel-stubs/shorts/_shared/PresenterShort.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb3b4048ac3b2241", "name": "Commented-code block (11 lines) in v4/src/app/router.tsx:9", "shortDescription": {"text": "Commented-code block (11 lines) in v4/src/app/router.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c65526a334712bc", "name": "Commented-code block (6 lines) in v4/src/pages/RoutinePage.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/pages/RoutinePage.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-027d73e5d0e1df69", "name": "Commented-code block (8 lines) in v4/src/pages/admin/AdminAppHomePage.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in v4/src/pages/admin/AdminAppHomePage.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca79556a009094b4", "name": "Commented-code block (6 lines) in v4/src/pages/admin/AdminPatientDetailPage.tsx:78", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/pages/admin/AdminPatientDetailPage.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-fe08374412f53cd6", "name": "Commented-code block (5 lines) in v4/src/features/auth/components/LoginPage.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/auth/components/LoginPage.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-9ef5739663a96770", "name": "Commented-code block (5 lines) in v4/src/features/auth/components/AdminLoginPage.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/auth/components/AdminLoginPage.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-aae08154eccd8417", "name": "Commented-code block (6 lines) in v4/src/features/website/pages/AdminAnalyticsPage.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/features/website/pages/AdminAnalyticsPage.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-abd0bd637678b0c0", "name": "Commented-code block (5 lines) in v4/src/features/website/pages/IntakeDiagnosisPage.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/website/pages/IntakeDiagnosisPage.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f327b54fcaf43e78", "name": "Commented-code block (5 lines) in v4/src/features/website/services/websiteSectionService.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/website/services/websiteSectionService.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53c91eec25103288", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/website/services/analyticsService.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/website/services/analyticsService.ts:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8bdbf21dce9f2297", "name": "Commented-code block (5 lines) in v4/src/features/hospital/components/AdminPatientGrowthChart.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/components/AdminPatientGrowthChart.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5efeaba66b653036", "name": "Commented-code block (5 lines) in v4/src/features/hospital/components/VisitDetailPanel.tsx:112", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/components/VisitDetailPanel.tsx: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-e47bf799e4b32830", "name": "Commented-code block (5 lines) in v4/src/features/hospital/components/XrayPanel.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/components/XrayPanel.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32b1cd9b4abe359d", "name": "Commented-code block (5 lines) in v4/src/features/hospital/lib/caseChartsStandalone.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/lib/caseChartsStandalone.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-4a6695c83f45e731", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/hospital/services/patientAnalysisService.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/hospital/services/patientAnalysisService.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-bd9eefe34ac671a6", "name": "Commented-code block (6 lines) in v4/src/features/marketing/types.ts:132", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/features/marketing/types.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-7adbd620cfad9f3b", "name": "Commented-code block (6 lines) in v4/src/features/marketing/utils/goldenScore.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/features/marketing/utils/goldenScore.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-2893d9dcc6d8dfc3", "name": "Commented-code block (6 lines) in v4/src/features/marketing/components/ads/CreativePicker.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/features/marketing/components/ads/CreativePicker.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdbe984ea0104552", "name": "Commented-code block (5 lines) in v4/src/features/marketing/components/content/reelEditor/CanvasDragLayer.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/marketing/components/content/reelEditor/CanvasDragLayer.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9ef6d08ad2aa4b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/routine/components/CoachingCard.tsx:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/routine/components/CoachingCard.tsx: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-0015abce3ae10f3d", "name": "Commented-code block (5 lines) in v4/src/features/admin/utils/patientCategories.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/admin/utils/patientCategories.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4848c159c15f94d9", "name": "Commented-code block (6 lines) in v4/src/features/admin/utils/region.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in v4/src/features/admin/utils/region.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-a80a42e7800e220f", "name": "Commented-code block (5 lines) in v4/src/features/admin/components/IntakeSubmissionDetail.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/admin/components/IntakeSubmissionDetail.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca11ed3b49a6f378", "name": "Commented-code block (5 lines) in v4/src/features/admin/components/ImageUploader.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/admin/components/ImageUploader.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c96b361a95d2a563", "name": "Commented-code block (5 lines) in v4/src/features/admin/services/adminService.ts:143", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/admin/services/adminService.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-631366b8a4805211", "name": "Commented-code block (5 lines) in v4/src/features/bone-age/lib/growthStandard.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/bone-age/lib/growthStandard.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-e985859b07ed7b14", "name": "Commented-code block (7 lines) in v4/src/features/bone-age/lib/growthStandardCN.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in v4/src/features/bone-age/lib/growthStandardCN.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-a54be607d74bfd51", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/bone-age/lib/atlas.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/bone-age/lib/atlas.ts:7"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58b23f4fb5bf8f14", "name": "Commented-code block (5 lines) in v4/src/features/bone-age/lib/growthPrediction.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/bone-age/lib/growthPrediction.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-8520193cc28aeaa6", "name": "Commented-code block (5 lines) in v4/src/features/records/components/ConsultationRecordView.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in v4/src/features/records/components/ConsultationRecordView.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6cbd7e1c9ddab9c7", "name": "Commented-code block (7 lines) in v4/src/features/records/services/patientRecordsService.ts:12", "shortDescription": {"text": "Commented-code block (7 lines) in v4/src/features/records/services/patientRecordsService.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3f7bcd5d63aa9d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/records/services/patientRecordsService.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/records/services/patientRecordsService.ts:72"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c41bb1a1f430bd6", "name": "39 env vars used in code but missing from .env.example", "shortDescription": {"text": "39 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AI_SERVER_URL`, `CONTENTFLOW_API_URL`, `CONTENTFLOW_PROJECT_ID`, `DEV`, `ELEVEN_MODEL`, `GA_MEASUREMENT_ID`, `GOOGLE_API_KEY`, `GROUP_GAP` + 31 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:\ncases/clean_cases.py:get_percentile, cases/clean_cases.py:get_height_at_percentile\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-817fd6248f021092", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scrip", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scripts/gen-tts-seq.mjs:39)"}, "fullDescription": {"text": "`remotion/scripts/gen-tts-seq.mjs:39` calls `POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128` 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.elevenlabs.io/v1/text-to-speech/<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-6774848a882048a5", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scrip", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scripts/gen-tts-line.mjs:22)"}, "fullDescription": {"text": "`remotion/scripts/gen-tts-line.mjs:22` calls `POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128` 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.elevenlabs.io/v1/text-to-speech/<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-353e77797bf5f196", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scrip", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scripts/gen-mainclip-tts.mjs:69)"}, "fullDescription": {"text": "`remotion/scripts/gen-mainclip-tts.mjs:69` calls `POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128` 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.elevenlabs.io/v1/text-to-speech/<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-88cac7efe6bdd1e5", "name": "Dangling fetch: GET https://graph.facebook.com/v21.0/1162825793580038?fields=about,description&access_token=${page.pageA", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v21.0/1162825793580038?fields=about,description&access_token=${page.pageAccessToken} (ai-server/scripts/check-fb-about.mjs:12)"}, "fullDescription": {"text": "`ai-server/scripts/check-fb-about.mjs:12` calls `GET https://graph.facebook.com/v21.0/1162825793580038?fields=about,description&access_token=${page.pageAccessToken}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v21.0/<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-ea2ce530bd6cf2de", "name": "Dangling fetch: GET /storyboards/index.json (v4/src/features/marketing/components/content/ReelsPanel.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /storyboards/index.json (v4/src/features/marketing/components/content/ReelsPanel.tsx:31)"}, "fullDescription": {"text": "`v4/src/features/marketing/components/content/ReelsPanel.tsx:31` calls `GET /storyboards/index.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storyboards/index.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62609e9424b57c50", "name": "Dangling fetch: GET /storyboards/infographics.json (v4/src/features/marketing/components/content/InfographicAssetsPanel.", "shortDescription": {"text": "Dangling fetch: GET /storyboards/infographics.json (v4/src/features/marketing/components/content/InfographicAssetsPanel.tsx:20)"}, "fullDescription": {"text": "`v4/src/features/marketing/components/content/InfographicAssetsPanel.tsx:20` calls `GET /storyboards/infographics.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storyboards/infographics.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7156cce7794854a7", "name": "Dangling fetch: GET /atlas.json (v4/src/features/bone-age/lib/atlas.ts:7)", "shortDescription": {"text": "Dangling fetch: GET /atlas.json (v4/src/features/bone-age/lib/atlas.ts:7)"}, "fullDescription": {"text": "`v4/src/features/bone-age/lib/atlas.ts:7` calls `GET /atlas.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/atlas.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b2357c2b3e8cd7e", "name": "Unused endpoint: USE /api/analyze", "shortDescription": {"text": "Unused endpoint: USE /api/analyze"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/analyze` 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-aecde4e5e16006b0", "name": "Unused endpoint: USE /api/r2", "shortDescription": {"text": "Unused endpoint: USE /api/r2"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/r2` 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-2ae6cd8d183fa156", "name": "Unused endpoint: USE /api/patient-analysis", "shortDescription": {"text": "Unused endpoint: USE /api/patient-analysis"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/patient-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-d803e7e5650befd4", "name": "Unused endpoint: USE /api/analytics", "shortDescription": {"text": "Unused endpoint: USE /api/analytics"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/analytics` 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-209ee5992d490f8f", "name": "Unused endpoint: USE /api/embeddings", "shortDescription": {"text": "Unused endpoint: USE /api/embeddings"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/embeddings` 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-db09d358dc62ee13", "name": "Unused endpoint: USE /api/similar-cases", "shortDescription": {"text": "Unused endpoint: USE /api/similar-cases"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/similar-cases` 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-0e76e800612b093e", "name": "Unused endpoint: USE /api/coaching", "shortDescription": {"text": "Unused endpoint: USE /api/coaching"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/coaching` 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-4d2feab9ea8ddbb8", "name": "Unused endpoint: USE /api/marketing", "shortDescription": {"text": "Unused endpoint: USE /api/marketing"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/marketing` 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-0c1b6ce2fd726244", "name": "Unused endpoint: USE /api/knowledge", "shortDescription": {"text": "Unused endpoint: USE /api/knowledge"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/knowledge` 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-fbb8dd0fabdde7e4", "name": "Unused endpoint: USE /api/auth/meta", "shortDescription": {"text": "Unused endpoint: USE /api/auth/meta"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/auth/meta` 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-5f1c638065e0fa59", "name": "Unused endpoint: USE /api/case-story", "shortDescription": {"text": "Unused endpoint: USE /api/case-story"}, "fullDescription": {"text": "`ai-server/src/index.ts` declares `USE /api/case-story` 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-08de4c97836d0b4c", "name": "Unused endpoint: POST /allergy", "shortDescription": {"text": "Unused endpoint: POST /allergy"}, "fullDescription": {"text": "`ai-server/src/routes/allergy.ts` declares `POST /allergy` 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": "`ai-server/src/routes/metaAuth.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-cdfb578618cf2542", "name": "Unused endpoint: GET /callback", "shortDescription": {"text": "Unused endpoint: GET /callback"}, "fullDescription": {"text": "`ai-server/src/routes/metaAuth.ts` declares `GET /callback` 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-2274134cf96af478", "name": "Unused endpoint: POST /data-deletion", "shortDescription": {"text": "Unused endpoint: POST /data-deletion"}, "fullDescription": {"text": "`ai-server/src/routes/metaAuth.ts` declares `POST /data-deletion` 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-ac2f552bf9d967ce", "name": "Unused endpoint: GET /overview", "shortDescription": {"text": "Unused endpoint: GET /overview"}, "fullDescription": {"text": "`ai-server/src/routes/analytics.ts` declares `GET /overview` 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-e0b9bdc04b58bea3", "name": "Unused endpoint: GET /channels", "shortDescription": {"text": "Unused endpoint: GET /channels"}, "fullDescription": {"text": "`ai-server/src/routes/analytics.ts` declares `GET /channels` 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-d4363015d572fd17", "name": "Unused endpoint: GET /site-breakdown", "shortDescription": {"text": "Unused endpoint: GET /site-breakdown"}, "fullDescription": {"text": "`ai-server/src/routes/analytics.ts` declares `GET /site-breakdown` 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-937081020dff853d", "name": "Unused endpoint: POST /build/:childId", "shortDescription": {"text": "Unused endpoint: POST /build/:childId"}, "fullDescription": {"text": "`ai-server/src/routes/embeddings.ts` declares `POST /build/:childId` 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-9ac87fc73137b628", "name": "Unused endpoint: POST /build-all", "shortDescription": {"text": "Unused endpoint: POST /build-all"}, "fullDescription": {"text": "`ai-server/src/routes/embeddings.ts` declares `POST /build-all` 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-9a09fa41c8e8138e", "name": "Unused endpoint: POST /meal", "shortDescription": {"text": "Unused endpoint: POST /meal"}, "fullDescription": {"text": "`ai-server/src/routes/meal.ts` declares `POST /meal` 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-17a164638609b114", "name": "Unused endpoint: POST /search", "shortDescription": {"text": "Unused endpoint: POST /search"}, "fullDescription": {"text": "`ai-server/src/routes/knowledge.ts` declares `POST /search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56abbd7c8861c53e", "name": "Unused endpoint: POST /rx-recommend", "shortDescription": {"text": "Unused endpoint: POST /rx-recommend"}, "fullDescription": {"text": "`ai-server/src/routes/knowledge.ts` declares `POST /rx-recommend` 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-4f209aa00f50322c", "name": "Unused endpoint: GET /:childId", "shortDescription": {"text": "Unused endpoint: GET /:childId"}, "fullDescription": {"text": "`ai-server/src/routes/coaching.ts` declares `GET /:childId` 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-6650fa676bba0c2d", "name": "Unused endpoint: POST /:childId", "shortDescription": {"text": "Unused endpoint: POST /:childId"}, "fullDescription": {"text": "`ai-server/src/routes/coaching.ts` declares `POST /:childId` 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-6be31713cc29667f", "name": "Unused endpoint: GET /website", "shortDescription": {"text": "Unused endpoint: GET /website"}, "fullDescription": {"text": "`ai-server/src/routes/r2.ts` declares `GET /website` 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-87f35d6d5e2c102d", "name": "Unused endpoint: PUT /website", "shortDescription": {"text": "Unused endpoint: PUT /website"}, "fullDescription": {"text": "`ai-server/src/routes/r2.ts` declares `PUT /website` 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-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`ai-server/src/routes/r2.ts` declares `POST /upload` 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-109c8f7a0f49ba28", "name": "Unused endpoint: GET /public-url", "shortDescription": {"text": "Unused endpoint: GET /public-url"}, "fullDescription": {"text": "`ai-server/src/routes/r2.ts` declares `GET /public-url` 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-864a0c44e452e9ce", "name": "Unused endpoint: GET /:chart", "shortDescription": {"text": "Unused endpoint: GET /:chart"}, "fullDescription": {"text": "`ai-server/src/routes/caseStory.ts` declares `GET /:chart` 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": "`ai-server/src/routes/caseStory.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-5bc896a78c6b44cc", "name": "Unused endpoint: POST /body", "shortDescription": {"text": "Unused endpoint: POST /body"}, "fullDescription": {"text": "`ai-server/src/routes/body.ts` declares `POST /body` 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-3f56e59e5cf20860", "name": "Unused endpoint: POST /generate-article", "shortDescription": {"text": "Unused endpoint: POST /generate-article"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /generate-article` 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-748cb812c74c9fc4", "name": "Unused endpoint: POST /naver-keywords", "shortDescription": {"text": "Unused endpoint: POST /naver-keywords"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /naver-keywords` 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-b54570ff08c2340e", "name": "Unused endpoint: POST /google-keywords", "shortDescription": {"text": "Unused endpoint: POST /google-keywords"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /google-keywords` 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-63a5e42a5593d63d", "name": "Unused endpoint: POST /seo-audit", "shortDescription": {"text": "Unused endpoint: POST /seo-audit"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /seo-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-604f269b6c694a05", "name": "Unused endpoint: POST /seo-suggest", "shortDescription": {"text": "Unused endpoint: POST /seo-suggest"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /seo-suggest` 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-9bb8d86af8297e1c", "name": "Unused endpoint: POST /youtube-channel", "shortDescription": {"text": "Unused endpoint: POST /youtube-channel"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /youtube-channel` 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-bd35293fbdb7fd9a", "name": "Unused endpoint: POST /competitor-analysis", "shortDescription": {"text": "Unused endpoint: POST /competitor-analysis"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /competitor-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-c41a12ec0b77e69f", "name": "Unused endpoint: POST /publish-push", "shortDescription": {"text": "Unused endpoint: POST /publish-push"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /publish-push` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09fc614072c4a5da", "name": "Unused endpoint: POST /comment-draft", "shortDescription": {"text": "Unused endpoint: POST /comment-draft"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /comment-draft` 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-6c28a94522b2a149", "name": "Unused endpoint: POST /ads-insights", "shortDescription": {"text": "Unused endpoint: POST /ads-insights"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /ads-insights` 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-e5d341c2044fdf7d", "name": "Unused endpoint: POST /keyword-ideas", "shortDescription": {"text": "Unused endpoint: POST /keyword-ideas"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /keyword-ideas` 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-63eee11a6e2191d0", "name": "Unused endpoint: POST /base-article", "shortDescription": {"text": "Unused endpoint: POST /base-article"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /base-article` 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-95d0619d95e761f1", "name": "Unused endpoint: POST /topics", "shortDescription": {"text": "Unused endpoint: POST /topics"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /topics` 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-7f2b52e64a5b9841", "name": "Unused endpoint: POST /blog-generate", "shortDescription": {"text": "Unused endpoint: POST /blog-generate"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /blog-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-e02f9c498884d876", "name": "Unused endpoint: POST /blog-seo-outline", "shortDescription": {"text": "Unused endpoint: POST /blog-seo-outline"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /blog-seo-outline` 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-682053886d4f79f9", "name": "Unused endpoint: POST /blog-seo-body", "shortDescription": {"text": "Unused endpoint: POST /blog-seo-body"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /blog-seo-body` 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-b3de525026fc8db1", "name": "Unused endpoint: POST /rewrite", "shortDescription": {"text": "Unused endpoint: POST /rewrite"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /rewrite` 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-dd733b9f0655496b", "name": "Unused endpoint: POST /translate", "shortDescription": {"text": "Unused endpoint: POST /translate"}, "fullDescription": {"text": "`ai-server/src/routes/marketing.ts` declares `POST /translate` 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/22828"}, "properties": {"repository": "wisdomproto/dflo", "repoUrl": "https://github.com/wisdomproto/dflo", "branch": "main"}, "results": [{"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: wisdomproto/dflo"}, "properties": {"repobilityId": 440142, "scanner": "foundry_dataset", "fingerprint": "9fe09a22d47769d627a78da5fb681e6910c63f26e91383d95d30ac3d1c146906", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "wisdomproto/dflo#1", "human_labels": ["api_or_backend", "docs_or_claims", "human_feedback_general", "schema_or_data", "source_or_other", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.6, "repo_full_name": "wisdomproto/dflo", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-5b631002bd032247", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 5, "designs": 1, "schemas": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 100, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "docs_or_claims": 5, "schema_or_data": 13, "ui_or_frontend": 20, "source_or_other": 61}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 3}, "text": "Comment chain pattern product: assumption_checks\nRepo: wisdomproto/dflo\nThread: wisdomproto/dflo#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: wisdomproto/dflo#1\nRepo: wisdomproto/dflo\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 100\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'docs_or_claims': 5, 'source_or_other': 61, 'schema_or_data': 13, 'api_or_backend': 1, 'ui_or_frontend': 20}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-015521a07d099e0f\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/wisdomproto/dflo/pull/1\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: wisdomproto/dflo\\nAuthor: wisdomproto (User)\\nURL: https://github.com/wisdomproto/dflo/pull/1\\nTitle: Feat/patient db unification\\nBody:\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-d7ef3ad59ce294fc\",\n    \"filename\": \"CLAUDE.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"modified\",\n    \"additions\": 20,\n    \"deletions\": 0,\n    \"changes\": 20,\n    \"blob_url\": \"https://github.com/wisdomproto/dflo/blob/6dd1045e36b670bc27a11d1bd8b0f98b39ec9aaa/CLAUDE.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-d9d7c7cd0311775c\",\n    \"filename\": \"cases/gen_seed_sql.py\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 85,\n    \"deletions\": 0,\n    \"changes\": 85,\n    \"blob_url\": \"https://github.com/wisdomproto/dflo/blob/6dd1045e36b670bc27a11d1bd8b0f98b39ec9aaa/cases%2Fgen_seed_sql.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-f78b306f56db0171\",\n    \"filename\": \"cases/gen_xray_seed.py\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 114,\n    \"deletions\": 0,\n    \"changes\": 114,\n    \"blob_url\": \"https://github.com/wisdomproto/dflo/blob/6dd1045e36b670bc27a11d1bd8b0f98b39ec9aaa/cases%2Fgen_xray_seed.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-edc00c6896309d71\",\n    \"filename\": \"cases/parse_patients.py\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 95,\n    \"deletions\": 0,\n    \"changes\": 95,\n    \"blob_url\": \"https://github.com/wisdomproto/dflo/blob/6dd1045e36b670bc27a11d1bd8b0f98b39ec9aaa/cases%2Fparse_patients.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-801f6d8d04bf5fc0\",\n    \"filename\": \"docs/superpowers/plans/2026-04-15-patient-db-unification.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 2461,\n    \"deletions\": 0,\n    \"changes\": 2461,\n    \"blob_url\": \"https://github\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/wisdomproto/dflo", "source_id": "comment-chain-pattern-assumption_checks-37ea76d59dee9a33", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "wisdomproto/dflo", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: wisdomproto/dflo"}, "properties": {"repobilityId": 454075, "scanner": "foundry_dataset", "fingerprint": "26ac135775198fae3b84fa12e98169bf5e7cb8bf3c3b84294c929d02ed83a886", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"ui_workflow": 1, "api_or_backend": 1, "docs_or_claims": 5, "schema_or_data": 13, "ui_or_frontend": 20, "source_or_other": 61, "human_feedback_general": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3, "comment_has_related_commit_context": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 136, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 100, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 110, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 100, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "wisdomproto/dflo#1", "issue_number": "1", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "wisdomproto/dflo", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-7ca88d5d3286cfdd", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 4, "docs_or_claims": 20, "schema_or_data": 52, "ui_or_frontend": 80, "source_or_other": 244}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: wisdomproto/dflo\nThread: wisdomproto/dflo#1\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: wisdomproto/dflo\nThread: wisdomproto/dflo#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: wisdomproto/dflo#1\nRepo: wisdomproto/dflo\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 110\nEdges: 136\nNode types: {'pr_file': 100, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 100, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 61, 'ui_or_frontend': 20, 'schema_or_data': 13, 'docs_or_claims': 5, 'ambiguous_needs_more_evidence': 3, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'api_or_backend': 1, 'comment_has_related_commit_context': 1, 'ui_workflow': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/wisdomproto/dflo", "source_id": "graph-query-motif_query-7d8dd386578701a4", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "wisdomproto/dflo", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "scanner-8d9c2ee4c208180e", "level": "note", "message": {"text": "Possibly dead Python function: process_image"}, "properties": {"repobilityId": "8624286eb53905dd", "scanner": "scanner-primary", "fingerprint": "8d9c2ee4c208180e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cases/gemini_ocr_pandokmun.py:110"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4d42103d2d005e35", "level": "note", "message": {"text": "Possibly dead Python function: gender_long"}, "properties": {"repobilityId": "6959d98e60a269dc", "scanner": "scanner-primary", "fingerprint": "4d42103d2d005e35", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cases/gen_xray_seed.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-66151d546b9f347f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ai-server/src/index.ts:74"}, "properties": {"repobilityId": "f5f14d69cfad11bf", "scanner": "scanner-primary", "fingerprint": "66151d546b9f347f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2dbbbb61e507a8e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ai-server/src/services/scheduler.ts:53"}, "properties": {"repobilityId": "a88c4689badb51a6", "scanner": "scanner-primary", "fingerprint": "2dbbbb61e507a8e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efaaef2bfa0880d7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 ai-server/src/services/publishPush.ts:55"}, "properties": {"repobilityId": "440f974766db7216", "scanner": "scanner-primary", "fingerprint": "efaaef2bfa0880d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ac37de5ff8c29e86", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ai-server/src/services/deployHook.ts:38"}, "properties": {"repobilityId": "0651992fe6c87911", "scanner": "scanner-primary", "fingerprint": "ac37de5ff8c29e86", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01163c4098dc7515", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/shared/components/Layout.tsx:87"}, "properties": {"repobilityId": "1579ecfcb700a198", "scanner": "scanner-primary", "fingerprint": "01163c4098dc7515", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c9f2800e40a2c007", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/shared/components/MeasurementTable.tsx:117"}, "properties": {"repobilityId": "8a5a89c7acf20cf0", "scanner": "scanner-primary", "fingerprint": "c9f2800e40a2c007", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b225f6f625932e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 v4/src/shared/lib/logger.ts:5"}, "properties": {"repobilityId": "5adfdb36901ef91c", "scanner": "scanner-primary", "fingerprint": "3b225f6f625932e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-146de38c2d875939", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 v4/src/pages/HomePage.tsx:382"}, "properties": {"repobilityId": "03f7031849948d1b", "scanner": "scanner-primary", "fingerprint": "146de38c2d875939", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f850e0bfda3a1f52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/RecipesListPage.tsx:52"}, "properties": {"repobilityId": "582d081de9e4686f", "scanner": "scanner-primary", "fingerprint": "f850e0bfda3a1f52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf21ba84aac96b03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/InfoPage.tsx:82"}, "properties": {"repobilityId": "9f9029dd5cd083c4", "scanner": "scanner-primary", "fingerprint": "bf21ba84aac96b03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9dc4974c5dd83cb9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/pages/admin/AdminPatientsPage.tsx:708"}, "properties": {"repobilityId": "6a05aa470c7a42db", "scanner": "scanner-primary", "fingerprint": "9dc4974c5dd83cb9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d3873b369d3e1d9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/website/components/HeightCalculator.tsx:160"}, "properties": {"repobilityId": "9f76588c3f142af5", "scanner": "scanner-primary", "fingerprint": "3d3873b369d3e1d9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-183d5789e89b57e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/website/components/ShareSheet.tsx:128"}, "properties": {"repobilityId": "47de868e1b5e54be", "scanner": "scanner-primary", "fingerprint": "183d5789e89b57e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c86b30a60c9f9a83", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/website/pages/AdminAnalyticsPage.tsx:100"}, "properties": {"repobilityId": "6391702bc3ad18fc", "scanner": "scanner-primary", "fingerprint": "c86b30a60c9f9a83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c28f070cc80416a3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 v4/src/features/website/pages/IntakeDiagnosisPage.tsx:127"}, "properties": {"repobilityId": "a393836a897f4dee", "scanner": "scanner-primary", "fingerprint": "c28f070cc80416a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e2d556480c5982f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 v4/src/features/website/pages/IntakeDiagnosisPage.tsx:136"}, "properties": {"repobilityId": "4038cff9a0b45f7d", "scanner": "scanner-primary", "fingerprint": "e2d556480c5982f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed43c742254e7e23", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 v4/src/features/hospital/components/SimilarCasesModal.tsx:81"}, "properties": {"repobilityId": "d303d3e94782826c", "scanner": "scanner-primary", "fingerprint": "ed43c742254e7e23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e8d6a51b3c10f7bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/VisitDetailPanel.tsx:954"}, "properties": {"repobilityId": "65e8f68b2658c343", "scanner": "scanner-primary", "fingerprint": "e8d6a51b3c10f7bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-494af66ed2265baf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/PrescriptionsBlock.tsx:77"}, "properties": {"repobilityId": "52c72b8d6555e48a", "scanner": "scanner-primary", "fingerprint": "494af66ed2265baf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a25ad89818bf7831", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 v4/src/features/hospital/components/LifestylePanel.tsx:324"}, "properties": {"repobilityId": "87f4f792ff93501e", "scanner": "scanner-primary", "fingerprint": "a25ad89818bf7831", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-826c530dc24f5f66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/intake/SectionCard.tsx:57"}, "properties": {"repobilityId": "fdcfc8eb867e64d1", "scanner": "scanner-primary", "fingerprint": "826c530dc24f5f66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e8b078e466de6c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/hospital/components/intake/IntakeClinicalSection.tsx:357"}, "properties": {"repobilityId": "deaf3f31fb561c90", "scanner": "scanner-primary", "fingerprint": "7e8b078e466de6c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6ea4cd4bfbcd0933", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ChannelTrafficTab.tsx:19"}, "properties": {"repobilityId": "e5cfd91311f6c2b0", "scanner": "scanner-primary", "fingerprint": "6ea4cd4bfbcd0933", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c535a451aab23530", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/CompetitorsPage.tsx:138"}, "properties": {"repobilityId": "ffd1807e456accb9", "scanner": "scanner-primary", "fingerprint": "c535a451aab23530", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee5647eca45dd4af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ChannelRegistryTab.tsx:423"}, "properties": {"repobilityId": "2794b8ee3583dfeb", "scanner": "scanner-primary", "fingerprint": "ee5647eca45dd4af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ff6dd3b47d21bfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/PublishCalendar.tsx:103"}, "properties": {"repobilityId": "746aef71a504ffd5", "scanner": "scanner-primary", "fingerprint": "0ff6dd3b47d21bfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61d7a6ae2f2ec1ae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/MentionCard.tsx:140"}, "properties": {"repobilityId": "f953cc19d6e7388c", "scanner": "scanner-primary", "fingerprint": "61d7a6ae2f2ec1ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-15b8651860b88857", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/marketing/components/BlogPreviewPage.tsx:44"}, "properties": {"repobilityId": "6bd4750902fb6819", "scanner": "scanner-primary", "fingerprint": "15b8651860b88857", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ebaf53681e6f94b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/CampaignEditor.tsx:241"}, "properties": {"repobilityId": "62eb4e76c5f200e7", "scanner": "scanner-primary", "fingerprint": "ebaf53681e6f94b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b5e2def398e6fb0", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 v4/src/features/marketing/components/ads/CreativePicker.tsx:66"}, "properties": {"repobilityId": "dfc169b5288ff1bc", "scanner": "scanner-primary", "fingerprint": "3b5e2def398e6fb0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a9da556d997682fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/ChannelFeedTab.tsx:164"}, "properties": {"repobilityId": "f493fbc016166180", "scanner": "scanner-primary", "fingerprint": "a9da556d997682fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec0747de2c082751", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/AudienceTargeting.tsx:131"}, "properties": {"repobilityId": "fe9d83185f5250ae", "scanner": "scanner-primary", "fingerprint": "ec0747de2c082751", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3f4ba0f5948386b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/ads/DirectUploadTab.tsx:199"}, "properties": {"repobilityId": "0c1f62d32980aea4", "scanner": "scanner-primary", "fingerprint": "3f4ba0f5948386b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0309ae521df2dd72", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 v4/src/features/marketing/components/content/BlogSeoEditor.tsx:111"}, "properties": {"repobilityId": "e76389fc3a7f5e09", "scanner": "scanner-primary", "fingerprint": "0309ae521df2dd72", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-56273b92514cb7bc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/ContentListPanel.tsx:85"}, "properties": {"repobilityId": "9d960cb29285c309", "scanner": "scanner-primary", "fingerprint": "56273b92514cb7bc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc42ae6b3f8755fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/BlogPreviewModal.tsx:104"}, "properties": {"repobilityId": "5b66a7f88fee1cb4", "scanner": "scanner-primary", "fingerprint": "bc42ae6b3f8755fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b0873a18c051d8a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/reelEditor/RenderJobWidget.tsx:185"}, "properties": {"repobilityId": "d1f836f3d82546e7", "scanner": "scanner-primary", "fingerprint": "b0873a18c051d8a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70bd49eb529da3de", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/marketing/components/content/reelEditor/ReelTimeline.tsx:93"}, "properties": {"repobilityId": "ed432b9c600a6500", "scanner": "scanner-primary", "fingerprint": "70bd49eb529da3de", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7004b4b1dd2d7ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/PatientStoryModal.tsx:51"}, "properties": {"repobilityId": "6d48526ac29cfe3d", "scanner": "scanner-primary", "fingerprint": "b7004b4b1dd2d7ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df89678ce4ff5b84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/IntakeSubmissionDetail.tsx:266"}, "properties": {"repobilityId": "5d1bf88c9f7bf368", "scanner": "scanner-primary", "fingerprint": "df89678ce4ff5b84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-448de6a4eaa17c98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/admin/components/AdminLayout.tsx:242"}, "properties": {"repobilityId": "e889bbbd96e7897f", "scanner": "scanner-primary", "fingerprint": "448de6a4eaa17c98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c65118d9c333df16", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/records/components/PatientHeaderCard.tsx:54"}, "properties": {"repobilityId": "2ad3ad8797400573", "scanner": "scanner-primary", "fingerprint": "c65118d9c333df16", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b589273e9d1f30d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/records/components/VisitTimelineCard.tsx:192"}, "properties": {"repobilityId": "ee21726803628b29", "scanner": "scanner-primary", "fingerprint": "b589273e9d1f30d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-291ce0d082bdc31e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/intake/components/StepUploads.tsx:113"}, "properties": {"repobilityId": "bea74abf77e0b8f0", "scanner": "scanner-primary", "fingerprint": "291ce0d082bdc31e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b129ee046e99ce5f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v4/src/features/content/components/RecipeSwipeCard.tsx:27"}, "properties": {"repobilityId": "263cbc91278a86c5", "scanner": "scanner-primary", "fingerprint": "b129ee046e99ce5f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c8c4cd5ba07d540d", "level": "error", "message": {"text": "Runtime dotenv file present in repo: v4/.env.production"}, "properties": {"repobilityId": "3c628fd2e3540d7b", "scanner": "scanner-primary", "fingerprint": "c8c4cd5ba07d540d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/.env.production"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-14c3bd2b6ba878cf", "level": "error", "message": {"text": "Possible secret in cases/import_patient_roster.mjs"}, "properties": {"repobilityId": "6d6aa29ea765d25d", "scanner": "scanner-primary", "fingerprint": "14c3bd2b6ba878cf", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cases/import_patient_roster.mjs"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-237143697565dfcc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cases/select_case_candidates.mjs:335"}, "properties": {"repobilityId": "a4856b8174405d06", "scanner": "scanner-primary", "fingerprint": "237143697565dfcc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cases/select_case_candidates.mjs"}, "region": {"startLine": 335}}}]}, {"ruleId": "scanner-21b746a7ded87e84", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cases/gen_case_profiles.mjs:739"}, "properties": {"repobilityId": "de10422b3e4747ad", "scanner": "scanner-primary", "fingerprint": "21b746a7ded87e84", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cases/gen_case_profiles.mjs"}, "region": {"startLine": 739}}}]}, {"ruleId": "scanner-18d14311653052a9", "level": "error", "message": {"text": "Possible secret in cases/upsert_children_from_labs.mjs"}, "properties": {"repobilityId": "50e9b07e067dc017", "scanner": "scanner-primary", "fingerprint": "18d14311653052a9", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cases/upsert_children_from_labs.mjs"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-5bbec79aceb09e7c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/cardnews/build-html.mjs:82"}, "properties": {"repobilityId": "30a03bf4d10c082d", "scanner": "scanner-primary", "fingerprint": "5bbec79aceb09e7c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/cardnews/build-html.mjs"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-8659a6c156e8e1aa", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-sync.mjs:5"}, "properties": {"repobilityId": "67f46a21cde413fe", "scanner": "scanner-primary", "fingerprint": "8659a6c156e8e1aa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/gen-tts-sync.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-a982723dc90f4c20", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/build-mainclip-warp.mjs:11"}, "properties": {"repobilityId": "92c3c837b2a49fbb", "scanner": "scanner-primary", "fingerprint": "a982723dc90f4c20", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/build-mainclip-warp.mjs"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-0d21aa52d5fe9d95", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/make-presenter-base.mjs:9"}, "properties": {"repobilityId": "a0223791aa30851d", "scanner": "scanner-primary", "fingerprint": "0d21aa52d5fe9d95", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/make-presenter-base.mjs"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-fb1e9c9dc57144b6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-sync-ko.mjs:5"}, "properties": {"repobilityId": "d3ede84f5ad0f65f", "scanner": "scanner-primary", "fingerprint": "fb1e9c9dc57144b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/gen-tts-sync-ko.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-3d45f3665fa225a3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/prep-lipsync.mjs:4"}, "properties": {"repobilityId": "c2a7daa9409cec2f", "scanner": "scanner-primary", "fingerprint": "3d45f3665fa225a3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/prep-lipsync.mjs"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-47e088ceb2a47d78", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/reel-worker.mjs:6"}, "properties": {"repobilityId": "ef8ea5ab611855e2", "scanner": "scanner-primary", "fingerprint": "47e088ceb2a47d78", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/reel-worker.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-feab030798c93540", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-tts-short.mjs:6"}, "properties": {"repobilityId": "0203c83976059dbe", "scanner": "scanner-primary", "fingerprint": "feab030798c93540", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/gen-tts-short.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-a18c3c990596b098", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/gen-mainclip-tts.mjs:12"}, "properties": {"repobilityId": "d021e7c9e6ba1dad", "scanner": "scanner-primary", "fingerprint": "a18c3c990596b098", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/gen-mainclip-tts.mjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-040fe0b26433a82d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in remotion/scripts/make-contact-sheets.mjs:3"}, "properties": {"repobilityId": "c4e8e8c32ce65217", "scanner": "scanner-primary", "fingerprint": "040fe0b26433a82d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "remotion/scripts/make-contact-sheets.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-ff6ccfffde7f8328", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in marketing/\uc5f0\uc138\uc0c8\ubd04\uc758\uc6d0_\ub9c8\ucf00\ud305\uc804\ub7b5 260323.html:1380"}, "properties": {"repobilityId": "1bf0a74bfd3d5a8e", "scanner": "scanner-primary", "fingerprint": "ff6ccfffde7f8328", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "marketing/\uc5f0\uc138\uc0c8\ubd04\uc758\uc6d0_\ub9c8\ucf00\ud305\uc804\ub7b5 260323.html"}, "region": {"startLine": 1380}}}]}, {"ruleId": "scanner-85f0601f05522d9a", "level": "error", "message": {"text": "Possible secret in v4/scripts/create_admin.mjs"}, "properties": {"repobilityId": "0e8e76359462de09", "scanner": "scanner-primary", "fingerprint": "85f0601f05522d9a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/scripts/create_admin.mjs"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-fa41755a15a1cc5c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/consulting.html:604"}, "properties": {"repobilityId": "15400dc3410fdf02", "scanner": "scanner-primary", "fingerprint": "fa41755a15a1cc5c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/public/consulting.html"}, "region": {"startLine": 604}}}]}, {"ruleId": "scanner-c9a17fa235342968", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/_shell.js:184"}, "properties": {"repobilityId": "08a315a769e12988", "scanner": "scanner-primary", "fingerprint": "c9a17fa235342968", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/public/_shell.js"}, "region": {"startLine": 184}}}]}, {"ruleId": "scanner-c9814dcfca10b6f9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/case-charts.js:3"}, "properties": {"repobilityId": "4ca8f91458faa630", "scanner": "scanner-primary", "fingerprint": "c9814dcfca10b6f9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/public/marketing/strategy/case-charts.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-c1ff42f16c65aab3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/youtube-analysis.html:592"}, "properties": {"repobilityId": "6b212fa76692bf42", "scanner": "scanner-primary", "fingerprint": "c1ff42f16c65aab3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/public/marketing/strategy/youtube-analysis.html"}, "region": {"startLine": 592}}}]}, {"ruleId": "scanner-c74cbb3f474a8e80", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/public/marketing/strategy/domestic-strategy.html:1380"}, "properties": {"repobilityId": "61831e32340ebf9d", "scanner": "scanner-primary", "fingerprint": "c74cbb3f474a8e80", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/public/marketing/strategy/domestic-strategy.html"}, "region": {"startLine": 1380}}}]}, {"ruleId": "scanner-69ce0b6252410d25", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in v4/src/shared/components/Layout.tsx:35"}, "properties": {"repobilityId": "a6f5e293b68bca28", "scanner": "scanner-primary", "fingerprint": "69ce0b6252410d25", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/src/shared/components/Layout.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-7acf9bcca2e9c822", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/website/components/HeightCalculator.tsx:160"}, "properties": {"repobilityId": "de42bcbe829bfe41", "scanner": "scanner-primary", "fingerprint": "7acf9bcca2e9c822", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/src/features/website/components/HeightCalculator.tsx"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-be7ad4e3daa9c194", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in v4/src/features/website/pages/AdminAnalyticsPage.tsx:70"}, "properties": {"repobilityId": "b2d4c3837b0336b0", "scanner": "scanner-primary", "fingerprint": "be7ad4e3daa9c194", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/src/features/website/pages/AdminAnalyticsPage.tsx"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-7e71009f37640620", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in v4/src/features/website/pages/AdminWebsitePage.tsx:151"}, "properties": {"repobilityId": "b135ac2bcf9a8332", "scanner": "scanner-primary", "fingerprint": "7e71009f37640620", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/src/features/website/pages/AdminWebsitePage.tsx"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-0cfc7495744f7961", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in v4/src/features/hospital/lib/caseChartsStandalone.ts:143"}, "properties": {"repobilityId": "a532952dc2947097", "scanner": "scanner-primary", "fingerprint": "0cfc7495744f7961", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/src/features/hospital/lib/caseChartsStandalone.ts"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-aba7306053deeffc", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/marketing/components/BlogPreviewPage.tsx:44"}, "properties": {"repobilityId": "6ce719e3b0496bc5", "scanner": "scanner-primary", "fingerprint": "aba7306053deeffc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/src/features/marketing/components/BlogPreviewPage.tsx"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-3957fd4babaed608", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in v4/src/features/marketing/components/content/BlogSeoEditor.tsx:111"}, "properties": {"repobilityId": "f0e22174283be622", "scanner": "scanner-primary", "fingerprint": "3957fd4babaed608", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v4/src/features/marketing/components/content/BlogSeoEditor.tsx"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9a29d765cba7f986", "level": "note", "message": {"text": "Very large file: cases/gen_case_profiles.mjs (965 lines)"}, "properties": {"repobilityId": "a6d1bf2028c0ac40", "scanner": "scanner-primary", "fingerprint": "9a29d765cba7f986", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-eeea302969d5ca3e", "level": "note", "message": {"text": "Very large file: v4/src/features/website/components/SectionCarousel.tsx (1389 lines)"}, "properties": {"repobilityId": "ac6c2b7a4a6c48c5", "scanner": "scanner-primary", "fingerprint": "eeea302969d5ca3e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-99f0f780ac9ba800", "level": "note", "message": {"text": "Very large file: v4/src/features/guide/components/SectionRenderer.tsx (1781 lines)"}, "properties": {"repobilityId": "2871ba66eb3c33ce", "scanner": "scanner-primary", "fingerprint": "99f0f780ac9ba800", "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": "966fd83dbcb65f19", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-dbef5a20e01dfb62", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: migration/package.json"}, "properties": {"repobilityId": "0fce8273db9aa00a", "scanner": "scanner-primary", "fingerprint": "dbef5a20e01dfb62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "migration/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "20d98895fa8a5d09", "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": "653b0c4fc1d27552", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "d5f2831ed7d67854", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "da23e6832ed1d26d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "e3c6c778b21286f8", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "7a0da248db3961b1", "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": "4a5cc20c737930d1", "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": "561c91f053228256", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-5d7c2d14f748dffa", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/generate_patient_stories.mjs:6"}, "properties": {"repobilityId": "bab67c0fed7bf42b", "scanner": "scanner-primary", "fingerprint": "5d7c2d14f748dffa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2665010ef53fede", "level": "none", "message": {"text": "Commented-code block (7 lines) in cases/insert_prescriptions.mjs:6"}, "properties": {"repobilityId": "fc1d0a7bb95a40ca", "scanner": "scanner-primary", "fingerprint": "e2665010ef53fede", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc1b3c75d002e5e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in cases/import_patient_roster.mjs:3"}, "properties": {"repobilityId": "a2cc15a56e16a1ab", "scanner": "scanner-primary", "fingerprint": "bc1b3c75d002e5e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c26310f04a2907f1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/select_case_candidates.mjs:14"}, "properties": {"repobilityId": "9fef7279c8d40bf1", "scanner": "scanner-primary", "fingerprint": "c26310f04a2907f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e66ef87dc37668c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/upsert_patient_story.mjs:3"}, "properties": {"repobilityId": "69707574a005dc43", "scanner": "scanner-primary", "fingerprint": "e66ef87dc37668c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbdc27cf9ae29392", "level": "none", "message": {"text": "Commented-code block (6 lines) in cases/import_ocr_measurements.mjs:6"}, "properties": {"repobilityId": "d72dd8b68b801803", "scanner": "scanner-primary", "fingerprint": "dbdc27cf9ae29392", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e825170a9fc644d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/gen_case_profiles.mjs:1"}, "properties": {"repobilityId": "43d7eb7550647f82", "scanner": "scanner-primary", "fingerprint": "e825170a9fc644d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b4808ef40e023d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/gen_case_profiles.mjs:29"}, "properties": {"repobilityId": "740b9907834642af", "scanner": "scanner-primary", "fingerprint": "5b4808ef40e023d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae16e0ddbb95b821", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/recode_medications.mjs:3"}, "properties": {"repobilityId": "fce0f63ca94ff08c", "scanner": "scanner-primary", "fingerprint": "ae16e0ddbb95b821", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a9e6afff0e9885f", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/r2_upload_website.mjs:1"}, "properties": {"repobilityId": "63e7ebf67519c65a", "scanner": "scanner-primary", "fingerprint": "5a9e6afff0e9885f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2b298d193d41738", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/r2_upload_website.mjs:25"}, "properties": {"repobilityId": "d9748d9575a3632a", "scanner": "scanner-primary", "fingerprint": "f2b298d193d41738", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-79a50bdbe14301c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/backfill_measurement_pah.mjs:9"}, "properties": {"repobilityId": "19bf92ebe0fea35f", "scanner": "scanner-primary", "fingerprint": "79a50bdbe14301c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d8a71b27c8075c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in cases/parse_eone.py:456"}, "properties": {"repobilityId": "adcaee01f0b45998", "scanner": "scanner-primary", "fingerprint": "8d8a71b27c8075c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75d1ee21456cdc58", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/import_intake_surveys.mjs:6"}, "properties": {"repobilityId": "d532d4e68a06ec7a", "scanner": "scanner-primary", "fingerprint": "75d1ee21456cdc58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bbb758b6a9ad86ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cases/verify_demo_login.mjs:31"}, "properties": {"repobilityId": "fb67468175f430b7", "scanner": "scanner-primary", "fingerprint": "bbb758b6a9ad86ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d24ebc39987e9698", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/parse_prescriptions.py:7"}, "properties": {"repobilityId": "312b09266d2ad008", "scanner": "scanner-primary", "fingerprint": "d24ebc39987e9698", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a909059f4af3240", "level": "none", "message": {"text": "Commented-code block (5 lines) in cases/remap_labs_to_clinical_visits.mjs:1"}, "properties": {"repobilityId": "f0edfa4f8b636d2a", "scanner": "scanner-primary", "fingerprint": "7a909059f4af3240", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93de26ac3a9878a9", "level": "none", "message": {"text": "Commented-code block (7 lines) in cases/upsert_children_from_labs.mjs:4"}, "properties": {"repobilityId": "69b7a5045ef91322", "scanner": "scanner-primary", "fingerprint": "93de26ac3a9878a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6957491021e78426", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/export-ko-for-zh.mjs:12"}, "properties": {"repobilityId": "8c0fbf724880e53f", "scanner": "scanner-primary", "fingerprint": "6957491021e78426", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f01638d9c5b065e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/fetch-sources.mjs:17"}, "properties": {"repobilityId": "62a1ae901d22b8eb", "scanner": "scanner-primary", "fingerprint": "3f01638d9c5b065e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb19ce7ec775fca0", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/blog/import-to-db.mjs:1"}, "properties": {"repobilityId": "6dfaf6a676191c4a", "scanner": "scanner-primary", "fingerprint": "cb19ce7ec775fca0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfe07d66ae9e644e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/import-to-db.mjs:20"}, "properties": {"repobilityId": "7f9d4c0682f4622d", "scanner": "scanner-primary", "fingerprint": "bfe07d66ae9e644e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80547f00f5e27ad5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/blog/import-zh-blog.mjs:15"}, "properties": {"repobilityId": "c21cdcdcfc5bb4c9", "scanner": "scanner-primary", "fingerprint": "80547f00f5e27ad5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f2cdb06337cffc2", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/blog/build-preview.mjs:1"}, "properties": {"repobilityId": "74fa20a216e7d69c", "scanner": "scanner-primary", "fingerprint": "7f2cdb06337cffc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e5629c33fff8c33", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/blog/lib/seo-check.mjs:1"}, "properties": {"repobilityId": "a49092e62460a085", "scanner": "scanner-primary", "fingerprint": "9e5629c33fff8c33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8f18fb44739538e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/import-to-db.mjs:15"}, "properties": {"repobilityId": "4c7f4bcf0b770638", "scanner": "scanner-primary", "fingerprint": "b8f18fb44739538e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4db63e250011762e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/export-ch-for-cn.mjs:12"}, "properties": {"repobilityId": "961f2e0547b5b251", "scanner": "scanner-primary", "fingerprint": "4db63e250011762e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c34b2e41106050ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/cardnews/import-cn-cardnews.mjs:13"}, "properties": {"repobilityId": "ada8f1d7c551b6d6", "scanner": "scanner-primary", "fingerprint": "c34b2e41106050ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-76108b450c6a4ae4", "level": "none", "message": {"text": "Commented-code block (5 lines) in remotion/scripts/render-thumbs.mjs:1"}, "properties": {"repobilityId": "d56288fe40e6b42c", "scanner": "scanner-primary", "fingerprint": "76108b450c6a4ae4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2e95ba36760d6c7", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-sync.mjs:16"}, "properties": {"repobilityId": "5903551e83b95ee6", "scanner": "scanner-primary", "fingerprint": "b2e95ba36760d6c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-01d73fc686f504cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-sync.mjs:52"}, "properties": {"repobilityId": "5a50faed4a6041d1", "scanner": "scanner-primary", "fingerprint": "01d73fc686f504cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-31098c91839ad3b1", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-seq.mjs:20"}, "properties": {"repobilityId": "6e2719690641b0bb", "scanner": "scanner-primary", "fingerprint": "31098c91839ad3b1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-516f3d08cdc7fa5a", "level": "none", "message": {"text": "Commented-code block (5 lines) in remotion/scripts/gen-tts-seq.mjs:1"}, "properties": {"repobilityId": "8ba0503ae9c9c867", "scanner": "scanner-primary", "fingerprint": "516f3d08cdc7fa5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8689e0695dbbd326", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-seq.mjs:39"}, "properties": {"repobilityId": "0e35a1f8572342f1", "scanner": "scanner-primary", "fingerprint": "8689e0695dbbd326", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b125c9b4c4f9ee5a", "level": "none", "message": {"text": "Commented-code block (7 lines) in remotion/scripts/build-mainclip-warp.mjs:1"}, "properties": {"repobilityId": "e6ce3d3b462862a2", "scanner": "scanner-primary", "fingerprint": "b125c9b4c4f9ee5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd195db7e709437f", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-tts-sync-ko.mjs:14"}, "properties": {"repobilityId": "bebdd785b8e44ea3", "scanner": "scanner-primary", "fingerprint": "cd195db7e709437f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fe4e9b99a06a1930", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-sync-ko.mjs:34"}, "properties": {"repobilityId": "11c94e2fea9b5f70", "scanner": "scanner-primary", "fingerprint": "fe4e9b99a06a1930", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d2077f4bd17f9b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in remotion/scripts/gen-tts.mjs:4"}, "properties": {"repobilityId": "3e3584d8d6176f04", "scanner": "scanner-primary", "fingerprint": "1d2077f4bd17f9b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1f5bec99d856440", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts.mjs:94"}, "properties": {"repobilityId": "4f18c018c2198b77", "scanner": "scanner-primary", "fingerprint": "c1f5bec99d856440", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1a623a8c704707d", "level": "note", "message": {"text": "Legacy-named symbol `multilingual_v2` in remotion/scripts/gen-tts-line.mjs:19"}, "properties": {"repobilityId": "9359fc34ada10d93", "scanner": "scanner-primary", "fingerprint": "f1a623a8c704707d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2422528d195b2878", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-line.mjs:22"}, "properties": {"repobilityId": "e614ce0d1b8aa641", "scanner": "scanner-primary", "fingerprint": "2422528d195b2878", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17144d0bd6d33ce1", "level": "note", "message": {"text": "Legacy-named symbol `multilingual_v2` in remotion/scripts/gen-tts-short.mjs:22"}, "properties": {"repobilityId": "9dce192d5a2041e2", "scanner": "scanner-primary", "fingerprint": "17144d0bd6d33ce1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8a8916fc1792a58c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-tts-short.mjs:32"}, "properties": {"repobilityId": "1dbe3a600ff894b2", "scanner": "scanner-primary", "fingerprint": "8a8916fc1792a58c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c5074b755ed0aaa", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in remotion/scripts/gen-mainclip-tts.mjs:23"}, "properties": {"repobilityId": "a6f78d65844e571c", "scanner": "scanner-primary", "fingerprint": "8c5074b755ed0aaa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cc3d703f6337972c", "level": "none", "message": {"text": "Commented-code block (8 lines) in remotion/scripts/gen-mainclip-tts.mjs:1"}, "properties": {"repobilityId": "ff740734d85eadaf", "scanner": "scanner-primary", "fingerprint": "cc3d703f6337972c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-709fc8c160a20e63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/gen-mainclip-tts.mjs:69"}, "properties": {"repobilityId": "283acfeaa5c0837b", "scanner": "scanner-primary", "fingerprint": "709fc8c160a20e63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d671d5a7de29ed34", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/storyboard-to-reel.mjs:88"}, "properties": {"repobilityId": "0c3d1f1178a848ad", "scanner": "scanner-primary", "fingerprint": "d671d5a7de29ed34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ccf4c73896d39406", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 remotion/scripts/lib/reelDb.mjs:32"}, "properties": {"repobilityId": "eb4db97893ff92bc", "scanner": "scanner-primary", "fingerprint": "ccf4c73896d39406", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2efa3175e4dd43d", "level": "none", "message": {"text": "Commented-code block (7 lines) in remotion/src/mainclip/overlays.tsx:207"}, "properties": {"repobilityId": "72d499d30e20f788", "scanner": "scanner-primary", "fingerprint": "b2efa3175e4dd43d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f8d9d3e2048c485", "level": "none", "message": {"text": "Commented-code block (5 lines) in remotion/src/shorts/_shared/StackedShort.tsx:1"}, "properties": {"repobilityId": "0582a3dbeb447262", "scanner": "scanner-primary", "fingerprint": "5f8d9d3e2048c485", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f5bbbee76e3bea5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 migration/scripts/export-website.mjs:32"}, "properties": {"repobilityId": "5cb5527cc667f152", "scanner": "scanner-primary", "fingerprint": "8f5bbbee76e3bea5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c95c7473ebe0742b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/set-fb-photos.mjs:67"}, "properties": {"repobilityId": "7c5aaa41c5c8d3c2", "scanner": "scanner-primary", "fingerprint": "c95c7473ebe0742b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-addf3d6e149bc5ef", "level": "none", "message": {"text": "Commented-code block (7 lines) in ai-server/scripts/ingest-evidence.mjs:1"}, "properties": {"repobilityId": "b41d09f3fe990f87", "scanner": "scanner-primary", "fingerprint": "addf3d6e149bc5ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5acd7303bc112353", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/check-fb-about.mjs:12"}, "properties": {"repobilityId": "595702b0da7f532e", "scanner": "scanner-primary", "fingerprint": "5acd7303bc112353", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c8b0d850dcfd860", "level": "none", "message": {"text": "Commented-code block (10 lines) in ai-server/scripts/backfill-embeddings.mjs:1"}, "properties": {"repobilityId": "2990b11f5a3aec45", "scanner": "scanner-primary", "fingerprint": "8c8b0d850dcfd860", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-916761e389f53d8a", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/scripts/validate-evidence-search.mjs:1"}, "properties": {"repobilityId": "4022c8e89abd6640", "scanner": "scanner-primary", "fingerprint": "916761e389f53d8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-423d4d158d5fef01", "level": "none", "message": {"text": "Commented-code block (6 lines) in ai-server/scripts/attach-references.mjs:1"}, "properties": {"repobilityId": "68e73b55ee791eba", "scanner": "scanner-primary", "fingerprint": "423d4d158d5fef01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0788f4a65f5892f", "level": "none", "message": {"text": "Commented-code block (8 lines) in ai-server/scripts/setup-ga4-oauth.mjs:3"}, "properties": {"repobilityId": "749de066c3246c3f", "scanner": "scanner-primary", "fingerprint": "a0788f4a65f5892f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-465d88f348f189f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/scripts/set-fb-about.mjs:1"}, "properties": {"repobilityId": "b93143f4ce26b3c7", "scanner": "scanner-primary", "fingerprint": "465d88f348f189f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c72816bca1c81a10", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/scripts/set-fb-about.mjs:91"}, "properties": {"repobilityId": "09ed29644341e6ea", "scanner": "scanner-primary", "fingerprint": "c72816bca1c81a10", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e23be91066d99ae2", "level": "none", "message": {"text": "Commented-code block (6 lines) in ai-server/src/middleware/marketingAuth.ts:1"}, "properties": {"repobilityId": "8e62c05fcb960c12", "scanner": "scanner-primary", "fingerprint": "e23be91066d99ae2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbba214412f35228", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/src/routes/coaching.ts:1"}, "properties": {"repobilityId": "7e51eea854da6086", "scanner": "scanner-primary", "fingerprint": "cbba214412f35228", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-819788283f40cd8b", "level": "none", "message": {"text": "Commented-code block (6 lines) in ai-server/src/routes/patientAnalysis.ts:4"}, "properties": {"repobilityId": "96aea758e5b7ed3b", "scanner": "scanner-primary", "fingerprint": "819788283f40cd8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6405aa17f7d89613", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaFeed.ts:105"}, "properties": {"repobilityId": "491f02c8add370a5", "scanner": "scanner-primary", "fingerprint": "6405aa17f7d89613", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c81361e6c7b4081", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/openalex.ts:41"}, "properties": {"repobilityId": "f9daade7f8817f78", "scanner": "scanner-primary", "fingerprint": "3c81361e6c7b4081", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5201fcba039b2b6e", "level": "none", "message": {"text": "Commented-code block (12 lines) in ai-server/src/services/metaAds.ts:1"}, "properties": {"repobilityId": "a23f244e1b1549c1", "scanner": "scanner-primary", "fingerprint": "5201fcba039b2b6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9f54e20632fd6df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaAds.ts:52"}, "properties": {"repobilityId": "4eefe02fb688bfea", "scanner": "scanner-primary", "fingerprint": "d9f54e20632fd6df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd3c774c7fc10632", "level": "none", "message": {"text": "Commented-code block (6 lines) in ai-server/src/services/seoAudit.ts:1"}, "properties": {"repobilityId": "bc8a19d93823f938", "scanner": "scanner-primary", "fingerprint": "dd3c774c7fc10632", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a66eb535a87320e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/seoAudit.ts:96"}, "properties": {"repobilityId": "c0ae75023348d304", "scanner": "scanner-primary", "fingerprint": "8a66eb535a87320e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d79121a0b167a29a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaPublish.ts:5"}, "properties": {"repobilityId": "f95ed06ebdaf3504", "scanner": "scanner-primary", "fingerprint": "d79121a0b167a29a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e1dd39b65a90a53f", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/src/services/competitorAnalyzer.ts:1"}, "properties": {"repobilityId": "98bd624a52286c4d", "scanner": "scanner-primary", "fingerprint": "e1dd39b65a90a53f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6dc8411e40ed61f", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/src/services/ga4.ts:222"}, "properties": {"repobilityId": "3411b02119cfef5f", "scanner": "scanner-primary", "fingerprint": "b6dc8411e40ed61f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0811050de0dc2d21", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaAudiences.ts:49"}, "properties": {"repobilityId": "9d2d6fd0a23d8976", "scanner": "scanner-primary", "fingerprint": "0811050de0dc2d21", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43431a81833efe98", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/src/services/keywordIdeas.ts:1"}, "properties": {"repobilityId": "e765153bdacdc04f", "scanner": "scanner-primary", "fingerprint": "43431a81833efe98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34b3fff2fb5cb431", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaTargeting.ts:213"}, "properties": {"repobilityId": "38616988d48f32fe", "scanner": "scanner-primary", "fingerprint": "34b3fff2fb5cb431", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8702086c8a23c0ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/pubmed.ts:43"}, "properties": {"repobilityId": "707ac09bd86500f6", "scanner": "scanner-primary", "fingerprint": "8702086c8a23c0ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c012f0c6396fd31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ai-server/src/services/metaOAuth.ts:35"}, "properties": {"repobilityId": "5d7005d70dc1b0c9", "scanner": "scanner-primary", "fingerprint": "9c012f0c6396fd31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f36f7f31c6bfebe0", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/src/services/contentPrompts.ts:1"}, "properties": {"repobilityId": "d317d11f4a3dc8a7", "scanner": "scanner-primary", "fingerprint": "f36f7f31c6bfebe0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55482aa52e285d96", "level": "none", "message": {"text": "Commented-code block (5 lines) in ai-server/src/services/publishPush.ts:1"}, "properties": {"repobilityId": "997af4a5a028062d", "scanner": "scanner-primary", "fingerprint": "55482aa52e285d96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-312922afaabbd795", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/vite.config.ts:15"}, "properties": {"repobilityId": "2161840efd5d98fd", "scanner": "scanner-primary", "fingerprint": "312922afaabbd795", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1218c78bf100eca4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/build-i18n.mjs:69"}, "properties": {"repobilityId": "b75c12047ac8f85b", "scanner": "scanner-primary", "fingerprint": "1218c78bf100eca4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87caf96c359966c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/scripts/upload-reel-covers.mjs:1"}, "properties": {"repobilityId": "528433edb2ba9cb0", "scanner": "scanner-primary", "fingerprint": "87caf96c359966c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2104aaaf867ca50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/upload-reel-covers.mjs:33"}, "properties": {"repobilityId": "46506fffab2160cd", "scanner": "scanner-primary", "fingerprint": "b2104aaaf867ca50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dde92e07b9f0cd30", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/scripts/create_admin.mjs:1"}, "properties": {"repobilityId": "134e6a5b590ae1ab", "scanner": "scanner-primary", "fingerprint": "dde92e07b9f0cd30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-789e87066f6d55b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/scripts/setup_storage.mjs:1"}, "properties": {"repobilityId": "fd2cb47e523d4756", "scanner": "scanner-primary", "fingerprint": "789e87066f6d55b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9a049ab2d4d4178", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/scripts/lib/img-attrs.mjs:1"}, "properties": {"repobilityId": "7297e83be9f08bcb", "scanner": "scanner-primary", "fingerprint": "f9a049ab2d4d4178", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e9027410fa50b4e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/scripts/lib/fetch-contentflow-posts.mjs:6"}, "properties": {"repobilityId": "1d75f95fb4bf5f00", "scanner": "scanner-primary", "fingerprint": "4e9027410fa50b4e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8a9beaae799fb20", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/public/_shell.js:261"}, "properties": {"repobilityId": "fc2e6f1df6c1789b", "scanner": "scanner-primary", "fingerprint": "d8a9beaae799fb20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75f86b21b52cd706", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/stores/authStore.ts:10"}, "properties": {"repobilityId": "d590323fb753bcd4", "scanner": "scanner-primary", "fingerprint": "75f86b21b52cd706", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68b0df9278902937", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/shared/components/BottomNav.tsx:1"}, "properties": {"repobilityId": "273f26a78e4a2755", "scanner": "scanner-primary", "fingerprint": "68b0df9278902937", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98425a3538003525", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/shared/components/GrowthChart.tsx:1"}, "properties": {"repobilityId": "1da43c57901c768c", "scanner": "scanner-primary", "fingerprint": "98425a3538003525", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac6ce8254765ca20", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/shared/components/MeasurementTable.tsx:1"}, "properties": {"repobilityId": "0d6bcf14520296aa", "scanner": "scanner-primary", "fingerprint": "ac6ce8254765ca20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc9bf1415be05e81", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/reel-stubs/shorts/_shared/PresenterShort.tsx:1"}, "properties": {"repobilityId": "2e69f0fc002fcc3a", "scanner": "scanner-primary", "fingerprint": "dc9bf1415be05e81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb3b4048ac3b2241", "level": "none", "message": {"text": "Commented-code block (11 lines) in v4/src/app/router.tsx:9"}, "properties": {"repobilityId": "0b7578984f3a25cd", "scanner": "scanner-primary", "fingerprint": "eb3b4048ac3b2241", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c65526a334712bc", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/pages/RoutinePage.tsx:1"}, "properties": {"repobilityId": "1bd1e1ab057c1ca8", "scanner": "scanner-primary", "fingerprint": "9c65526a334712bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-027d73e5d0e1df69", "level": "none", "message": {"text": "Commented-code block (8 lines) in v4/src/pages/admin/AdminAppHomePage.tsx:1"}, "properties": {"repobilityId": "a3998fada169472d", "scanner": "scanner-primary", "fingerprint": "027d73e5d0e1df69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca79556a009094b4", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/pages/admin/AdminPatientDetailPage.tsx:78"}, "properties": {"repobilityId": "ce891e332b9f06d2", "scanner": "scanner-primary", "fingerprint": "ca79556a009094b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe08374412f53cd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/auth/components/LoginPage.tsx:7"}, "properties": {"repobilityId": "d140cb6607a83323", "scanner": "scanner-primary", "fingerprint": "fe08374412f53cd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ef5739663a96770", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/auth/components/AdminLoginPage.tsx:7"}, "properties": {"repobilityId": "51cec4c29672b0a6", "scanner": "scanner-primary", "fingerprint": "9ef5739663a96770", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aae08154eccd8417", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/features/website/pages/AdminAnalyticsPage.tsx:5"}, "properties": {"repobilityId": "03d4c271ae856f6f", "scanner": "scanner-primary", "fingerprint": "aae08154eccd8417", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abd0bd637678b0c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/website/pages/IntakeDiagnosisPage.tsx:1"}, "properties": {"repobilityId": "18c586ca0caaef4c", "scanner": "scanner-primary", "fingerprint": "abd0bd637678b0c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f327b54fcaf43e78", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/website/services/websiteSectionService.ts:5"}, "properties": {"repobilityId": "574aba8a72d4a60d", "scanner": "scanner-primary", "fingerprint": "f327b54fcaf43e78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53c91eec25103288", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/website/services/analyticsService.ts:20"}, "properties": {"repobilityId": "0108ba64b53f403e", "scanner": "scanner-primary", "fingerprint": "53c91eec25103288", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8bdbf21dce9f2297", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/components/AdminPatientGrowthChart.tsx:1"}, "properties": {"repobilityId": "25634929248592d9", "scanner": "scanner-primary", "fingerprint": "8bdbf21dce9f2297", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5efeaba66b653036", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/components/VisitDetailPanel.tsx:112"}, "properties": {"repobilityId": "ecf83241d68d017b", "scanner": "scanner-primary", "fingerprint": "5efeaba66b653036", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e47bf799e4b32830", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/components/XrayPanel.tsx:1"}, "properties": {"repobilityId": "ab44993e03d1c2c6", "scanner": "scanner-primary", "fingerprint": "e47bf799e4b32830", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32b1cd9b4abe359d", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/hospital/lib/caseChartsStandalone.ts:1"}, "properties": {"repobilityId": "c31d6416a9078140", "scanner": "scanner-primary", "fingerprint": "32b1cd9b4abe359d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a6695c83f45e731", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/hospital/services/patientAnalysisService.ts:33"}, "properties": {"repobilityId": "106e6ca8bd416f40", "scanner": "scanner-primary", "fingerprint": "4a6695c83f45e731", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd9eefe34ac671a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/features/marketing/types.ts:132"}, "properties": {"repobilityId": "417aa4b4dd2cedca", "scanner": "scanner-primary", "fingerprint": "bd9eefe34ac671a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7adbd620cfad9f3b", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/features/marketing/utils/goldenScore.ts:1"}, "properties": {"repobilityId": "ad0873df17a7ebaf", "scanner": "scanner-primary", "fingerprint": "7adbd620cfad9f3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2893d9dcc6d8dfc3", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/features/marketing/components/ads/CreativePicker.tsx:1"}, "properties": {"repobilityId": "baf631fa856801e1", "scanner": "scanner-primary", "fingerprint": "2893d9dcc6d8dfc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdbe984ea0104552", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/marketing/components/content/reelEditor/CanvasDragLayer.tsx:1"}, "properties": {"repobilityId": "9fdd558bd73c1b7e", "scanner": "scanner-primary", "fingerprint": "cdbe984ea0104552", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9ef6d08ad2aa4b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/routine/components/CoachingCard.tsx:33"}, "properties": {"repobilityId": "a4938a8fd47a113c", "scanner": "scanner-primary", "fingerprint": "a9ef6d08ad2aa4b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0015abce3ae10f3d", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/admin/utils/patientCategories.ts:89"}, "properties": {"repobilityId": "e463e343b9a3876d", "scanner": "scanner-primary", "fingerprint": "0015abce3ae10f3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4848c159c15f94d9", "level": "none", "message": {"text": "Commented-code block (6 lines) in v4/src/features/admin/utils/region.ts:1"}, "properties": {"repobilityId": "87afc1c54089fee9", "scanner": "scanner-primary", "fingerprint": "4848c159c15f94d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a80a42e7800e220f", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/admin/components/IntakeSubmissionDetail.tsx:12"}, "properties": {"repobilityId": "b9f71534bcdacefa", "scanner": "scanner-primary", "fingerprint": "a80a42e7800e220f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca11ed3b49a6f378", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/admin/components/ImageUploader.tsx:1"}, "properties": {"repobilityId": "9dd4b5504fbc9664", "scanner": "scanner-primary", "fingerprint": "ca11ed3b49a6f378", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c96b361a95d2a563", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/admin/services/adminService.ts:143"}, "properties": {"repobilityId": "6b883af257f96009", "scanner": "scanner-primary", "fingerprint": "c96b361a95d2a563", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-631366b8a4805211", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/bone-age/lib/growthStandard.ts:1"}, "properties": {"repobilityId": "6c5066845569cf7d", "scanner": "scanner-primary", "fingerprint": "631366b8a4805211", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e985859b07ed7b14", "level": "none", "message": {"text": "Commented-code block (7 lines) in v4/src/features/bone-age/lib/growthStandardCN.ts:1"}, "properties": {"repobilityId": "0617c994a282c03f", "scanner": "scanner-primary", "fingerprint": "e985859b07ed7b14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a54be607d74bfd51", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/bone-age/lib/atlas.ts:7"}, "properties": {"repobilityId": "231879fec2726e79", "scanner": "scanner-primary", "fingerprint": "a54be607d74bfd51", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58b23f4fb5bf8f14", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/bone-age/lib/growthPrediction.ts:3"}, "properties": {"repobilityId": "b5d60960b5ac5fc2", "scanner": "scanner-primary", "fingerprint": "58b23f4fb5bf8f14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8520193cc28aeaa6", "level": "none", "message": {"text": "Commented-code block (5 lines) in v4/src/features/records/components/ConsultationRecordView.tsx:1"}, "properties": {"repobilityId": "050eb5d9aa30fbe1", "scanner": "scanner-primary", "fingerprint": "8520193cc28aeaa6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cbd7e1c9ddab9c7", "level": "none", "message": {"text": "Commented-code block (7 lines) in v4/src/features/records/services/patientRecordsService.ts:12"}, "properties": {"repobilityId": "1ae5bf629c74b5f7", "scanner": "scanner-primary", "fingerprint": "6cbd7e1c9ddab9c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3f7bcd5d63aa9d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 v4/src/features/records/services/patientRecordsService.ts:72"}, "properties": {"repobilityId": "864e53c08a5abc62", "scanner": "scanner-primary", "fingerprint": "b3f7bcd5d63aa9d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c41bb1a1f430bd6", "level": "note", "message": {"text": "39 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "4a6a9acd19ef8277", "scanner": "scanner-primary", "fingerprint": "5c41bb1a1f430bd6", "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": "404a8efc377ea1bb", "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": "b042ff5312ad6e63", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-817fd6248f021092", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scripts/gen-tts-seq.mjs:39)"}, "properties": {"repobilityId": "0a9692a4f52aebc6", "scanner": "scanner-primary", "fingerprint": "817fd6248f021092", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6774848a882048a5", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scripts/gen-tts-line.mjs:22)"}, "properties": {"repobilityId": "ab43517787b5f645", "scanner": "scanner-primary", "fingerprint": "6774848a882048a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-353e77797bf5f196", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${VOICE_ID}?output_format=mp3_44100_128 (remotion/scripts/gen-mainclip-tts.mjs:69)"}, "properties": {"repobilityId": "323f6780eb8a1886", "scanner": "scanner-primary", "fingerprint": "353e77797bf5f196", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88cac7efe6bdd1e5", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v21.0/1162825793580038?fields=about,description&access_token=${page.pageAccessToken} (ai-server/scripts/check-fb-about.mjs:12)"}, "properties": {"repobilityId": "5064a050572dab2a", "scanner": "scanner-primary", "fingerprint": "88cac7efe6bdd1e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea2ce530bd6cf2de", "level": "error", "message": {"text": "Dangling fetch: GET /storyboards/index.json (v4/src/features/marketing/components/content/ReelsPanel.tsx:31)"}, "properties": {"repobilityId": "38afd2f54a145c1b", "scanner": "scanner-primary", "fingerprint": "ea2ce530bd6cf2de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62609e9424b57c50", "level": "error", "message": {"text": "Dangling fetch: GET /storyboards/infographics.json (v4/src/features/marketing/components/content/InfographicAssetsPanel.tsx:20)"}, "properties": {"repobilityId": "29a326c95f27202d", "scanner": "scanner-primary", "fingerprint": "62609e9424b57c50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7156cce7794854a7", "level": "error", "message": {"text": "Dangling fetch: GET /atlas.json (v4/src/features/bone-age/lib/atlas.ts:7)"}, "properties": {"repobilityId": "b4796f0867fb23ec", "scanner": "scanner-primary", "fingerprint": "7156cce7794854a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b2357c2b3e8cd7e", "level": "note", "message": {"text": "Unused endpoint: USE /api/analyze"}, "properties": {"repobilityId": "d39f7e5c32a64f63", "scanner": "scanner-primary", "fingerprint": "1b2357c2b3e8cd7e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aecde4e5e16006b0", "level": "note", "message": {"text": "Unused endpoint: USE /api/r2"}, "properties": {"repobilityId": "1e1845ab89991a62", "scanner": "scanner-primary", "fingerprint": "aecde4e5e16006b0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ae6cd8d183fa156", "level": "note", "message": {"text": "Unused endpoint: USE /api/patient-analysis"}, "properties": {"repobilityId": "b249223a93e3dd5a", "scanner": "scanner-primary", "fingerprint": "2ae6cd8d183fa156", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d803e7e5650befd4", "level": "note", "message": {"text": "Unused endpoint: USE /api/analytics"}, "properties": {"repobilityId": "d6a7101dd0867839", "scanner": "scanner-primary", "fingerprint": "d803e7e5650befd4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-209ee5992d490f8f", "level": "note", "message": {"text": "Unused endpoint: USE /api/embeddings"}, "properties": {"repobilityId": "7f548d05488b6eef", "scanner": "scanner-primary", "fingerprint": "209ee5992d490f8f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db09d358dc62ee13", "level": "note", "message": {"text": "Unused endpoint: USE /api/similar-cases"}, "properties": {"repobilityId": "ea3c5d93a4d096c5", "scanner": "scanner-primary", "fingerprint": "db09d358dc62ee13", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e76e800612b093e", "level": "note", "message": {"text": "Unused endpoint: USE /api/coaching"}, "properties": {"repobilityId": "c530d6c9a02c071a", "scanner": "scanner-primary", "fingerprint": "0e76e800612b093e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4d2feab9ea8ddbb8", "level": "note", "message": {"text": "Unused endpoint: USE /api/marketing"}, "properties": {"repobilityId": "1adc317f7af28c3b", "scanner": "scanner-primary", "fingerprint": "4d2feab9ea8ddbb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c1b6ce2fd726244", "level": "note", "message": {"text": "Unused endpoint: USE /api/knowledge"}, "properties": {"repobilityId": "f425ece44f28bcc5", "scanner": "scanner-primary", "fingerprint": "0c1b6ce2fd726244", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fbb8dd0fabdde7e4", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/meta"}, "properties": {"repobilityId": "e945c9a78dd60ec9", "scanner": "scanner-primary", "fingerprint": "fbb8dd0fabdde7e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5f1c638065e0fa59", "level": "note", "message": {"text": "Unused endpoint: USE /api/case-story"}, "properties": {"repobilityId": "f9c94ce2c77cc089", "scanner": "scanner-primary", "fingerprint": "5f1c638065e0fa59", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-08de4c97836d0b4c", "level": "note", "message": {"text": "Unused endpoint: POST /allergy"}, "properties": {"repobilityId": "a773525e7760b0a1", "scanner": "scanner-primary", "fingerprint": "08de4c97836d0b4c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "f911d939b5722d7d", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdfb578618cf2542", "level": "note", "message": {"text": "Unused endpoint: GET /callback"}, "properties": {"repobilityId": "4ab01c436c2cb53b", "scanner": "scanner-primary", "fingerprint": "cdfb578618cf2542", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2274134cf96af478", "level": "note", "message": {"text": "Unused endpoint: POST /data-deletion"}, "properties": {"repobilityId": "531dc37e496d5b08", "scanner": "scanner-primary", "fingerprint": "2274134cf96af478", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac2f552bf9d967ce", "level": "note", "message": {"text": "Unused endpoint: GET /overview"}, "properties": {"repobilityId": "210fb90c3c78b497", "scanner": "scanner-primary", "fingerprint": "ac2f552bf9d967ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e0b9bdc04b58bea3", "level": "note", "message": {"text": "Unused endpoint: GET /channels"}, "properties": {"repobilityId": "9810560000a7de1b", "scanner": "scanner-primary", "fingerprint": "e0b9bdc04b58bea3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4363015d572fd17", "level": "note", "message": {"text": "Unused endpoint: GET /site-breakdown"}, "properties": {"repobilityId": "c1030aadba881c76", "scanner": "scanner-primary", "fingerprint": "d4363015d572fd17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-937081020dff853d", "level": "note", "message": {"text": "Unused endpoint: POST /build/:childId"}, "properties": {"repobilityId": "7a2deeac88dbdfb5", "scanner": "scanner-primary", "fingerprint": "937081020dff853d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ac87fc73137b628", "level": "note", "message": {"text": "Unused endpoint: POST /build-all"}, "properties": {"repobilityId": "0634a8a95114346d", "scanner": "scanner-primary", "fingerprint": "9ac87fc73137b628", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a09fa41c8e8138e", "level": "note", "message": {"text": "Unused endpoint: POST /meal"}, "properties": {"repobilityId": "3a18f4188f21218e", "scanner": "scanner-primary", "fingerprint": "9a09fa41c8e8138e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17a164638609b114", "level": "note", "message": {"text": "Unused endpoint: POST /search"}, "properties": {"repobilityId": "501b600196c03a4e", "scanner": "scanner-primary", "fingerprint": "17a164638609b114", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56abbd7c8861c53e", "level": "note", "message": {"text": "Unused endpoint: POST /rx-recommend"}, "properties": {"repobilityId": "610fc4226b36d185", "scanner": "scanner-primary", "fingerprint": "56abbd7c8861c53e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4f209aa00f50322c", "level": "note", "message": {"text": "Unused endpoint: GET /:childId"}, "properties": {"repobilityId": "b4cb965b7201ef04", "scanner": "scanner-primary", "fingerprint": "4f209aa00f50322c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6650fa676bba0c2d", "level": "note", "message": {"text": "Unused endpoint: POST /:childId"}, "properties": {"repobilityId": "64f1f287690dbc8f", "scanner": "scanner-primary", "fingerprint": "6650fa676bba0c2d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6be31713cc29667f", "level": "note", "message": {"text": "Unused endpoint: GET /website"}, "properties": {"repobilityId": "18bc13e337ebd4c9", "scanner": "scanner-primary", "fingerprint": "6be31713cc29667f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87f35d6d5e2c102d", "level": "note", "message": {"text": "Unused endpoint: PUT /website"}, "properties": {"repobilityId": "f23bd3395bc677be", "scanner": "scanner-primary", "fingerprint": "87f35d6d5e2c102d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "57960b3c564861e9", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-109c8f7a0f49ba28", "level": "note", "message": {"text": "Unused endpoint: GET /public-url"}, "properties": {"repobilityId": "b0f7f8ecb099faa5", "scanner": "scanner-primary", "fingerprint": "109c8f7a0f49ba28", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-864a0c44e452e9ce", "level": "note", "message": {"text": "Unused endpoint: GET /:chart"}, "properties": {"repobilityId": "9686332cba6c09ed", "scanner": "scanner-primary", "fingerprint": "864a0c44e452e9ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "086552492a70b84a", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5bc896a78c6b44cc", "level": "note", "message": {"text": "Unused endpoint: POST /body"}, "properties": {"repobilityId": "f085fab9ff7237ff", "scanner": "scanner-primary", "fingerprint": "5bc896a78c6b44cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f56e59e5cf20860", "level": "note", "message": {"text": "Unused endpoint: POST /generate-article"}, "properties": {"repobilityId": "b370d6e726f84891", "scanner": "scanner-primary", "fingerprint": "3f56e59e5cf20860", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-748cb812c74c9fc4", "level": "note", "message": {"text": "Unused endpoint: POST /naver-keywords"}, "properties": {"repobilityId": "b592045fba04fc71", "scanner": "scanner-primary", "fingerprint": "748cb812c74c9fc4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b54570ff08c2340e", "level": "note", "message": {"text": "Unused endpoint: POST /google-keywords"}, "properties": {"repobilityId": "b1f8a6e113bd1a8e", "scanner": "scanner-primary", "fingerprint": "b54570ff08c2340e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63a5e42a5593d63d", "level": "note", "message": {"text": "Unused endpoint: POST /seo-audit"}, "properties": {"repobilityId": "2b76c1453d9ca04f", "scanner": "scanner-primary", "fingerprint": "63a5e42a5593d63d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-604f269b6c694a05", "level": "note", "message": {"text": "Unused endpoint: POST /seo-suggest"}, "properties": {"repobilityId": "bd320d88dc7d8e1d", "scanner": "scanner-primary", "fingerprint": "604f269b6c694a05", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9bb8d86af8297e1c", "level": "note", "message": {"text": "Unused endpoint: POST /youtube-channel"}, "properties": {"repobilityId": "a7536de36b04327a", "scanner": "scanner-primary", "fingerprint": "9bb8d86af8297e1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bd35293fbdb7fd9a", "level": "note", "message": {"text": "Unused endpoint: POST /competitor-analysis"}, "properties": {"repobilityId": "9136bd64ceb6cfab", "scanner": "scanner-primary", "fingerprint": "bd35293fbdb7fd9a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c41a12ec0b77e69f", "level": "note", "message": {"text": "Unused endpoint: POST /publish-push"}, "properties": {"repobilityId": "2a83121c9662b9ca", "scanner": "scanner-primary", "fingerprint": "c41a12ec0b77e69f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09fc614072c4a5da", "level": "note", "message": {"text": "Unused endpoint: POST /comment-draft"}, "properties": {"repobilityId": "33491c9b1c6a5518", "scanner": "scanner-primary", "fingerprint": "09fc614072c4a5da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c28a94522b2a149", "level": "note", "message": {"text": "Unused endpoint: POST /ads-insights"}, "properties": {"repobilityId": "4b43e27f37922920", "scanner": "scanner-primary", "fingerprint": "6c28a94522b2a149", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5d341c2044fdf7d", "level": "note", "message": {"text": "Unused endpoint: POST /keyword-ideas"}, "properties": {"repobilityId": "f274fe7f4503e474", "scanner": "scanner-primary", "fingerprint": "e5d341c2044fdf7d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63eee11a6e2191d0", "level": "note", "message": {"text": "Unused endpoint: POST /base-article"}, "properties": {"repobilityId": "9c1a01864849fad4", "scanner": "scanner-primary", "fingerprint": "63eee11a6e2191d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95d0619d95e761f1", "level": "note", "message": {"text": "Unused endpoint: POST /topics"}, "properties": {"repobilityId": "96bbfda13166324b", "scanner": "scanner-primary", "fingerprint": "95d0619d95e761f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f2b52e64a5b9841", "level": "note", "message": {"text": "Unused endpoint: POST /blog-generate"}, "properties": {"repobilityId": "b63bb4048f946d9b", "scanner": "scanner-primary", "fingerprint": "7f2b52e64a5b9841", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e02f9c498884d876", "level": "note", "message": {"text": "Unused endpoint: POST /blog-seo-outline"}, "properties": {"repobilityId": "9f5cfa70957877e2", "scanner": "scanner-primary", "fingerprint": "e02f9c498884d876", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-682053886d4f79f9", "level": "note", "message": {"text": "Unused endpoint: POST /blog-seo-body"}, "properties": {"repobilityId": "489317476eff5dae", "scanner": "scanner-primary", "fingerprint": "682053886d4f79f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3de525026fc8db1", "level": "note", "message": {"text": "Unused endpoint: POST /rewrite"}, "properties": {"repobilityId": "6e2b296104f5dd8f", "scanner": "scanner-primary", "fingerprint": "b3de525026fc8db1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd733b9f0655496b", "level": "note", "message": {"text": "Unused endpoint: POST /translate"}, "properties": {"repobilityId": "c091f8d1cbf48f9d", "scanner": "scanner-primary", "fingerprint": "dd733b9f0655496b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}