{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-09621a6bc7055b22", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main.ts:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-87501e406e739f33", "name": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:33"}, "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-27e946be7cbf6e05", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/components/VirtualTable.tsx:623", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/components/VirtualTable.tsx:623"}, "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-c1b23984e7ed20f0", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/components/SortableList.tsx:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/components/SortableList.tsx:94"}, "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-a761c96a0287d27f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/navigation.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/navigation.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-56bc01549ac29834", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/visualization-preview/SuggestedInsights", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/visualization-preview/SuggestedInsights.tsx:14"}, "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-2c676a210e364bc2", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/visualizations/VisualizationItemCard.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/visualizations/VisualizationItemCard.tsx:177"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72aa2d341bd8ff6c", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/preview-diff/PreviewDiffRenderer.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/preview-diff/PreviewDiffRenderer.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8988e751c1e4d8dc", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/assistant/AssistantEmptyState.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/assistant/AssistantEmptyState.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29c54dc557829c68", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/assistant/AssistantSidebar.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/assistant/AssistantSidebar.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef214dad0611045d", "name": "React Flow <Controls> without dark theming \u2014 packages/app/src/components/layouts/AppLayout.tsx:43", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 packages/app/src/components/layouts/AppLayout.tsx:43"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7fbe8463131bbcbc", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/data-sources/TableDetailPanel.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/data-sources/TableDetailPanel.tsx:233"}, "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-1e32b3a16f34bf4d", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/data-sources/DataSourceControls.tsx:466", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/data-sources/DataSourceControls.tsx:466"}, "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-23e833ed8461aa4e", "name": "Stray `console.log` in TS/JS \u2014 packages/app/src/components/data-sources/DataSourcesWorkbench.tsx:284", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/app/src/components/data-sources/DataSourcesWorkbench.tsx:284"}, "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-a428c42fc3db1750", "name": "Stray `console.log` in TS/JS \u2014 packages/app/src/components/data-sources/DataPickerContent.tsx:216", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/app/src/components/data-sources/DataPickerContent.tsx:216"}, "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-bb2cfd9c0c775588", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/app/src/components/data-sources/renderers/ConnectorIcon.t", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/app/src/components/data-sources/renderers/ConnectorIcon.tsx:31"}, "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-6d1299eabf55262f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/visualizations/page.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/visualizations/page.tsx:173"}, "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-4848b9d86b5d65ad", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/visualizations/[visualizationId]/_components/V", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/visualizations/[visualizationId]/_components/VisualizationPageContent.tsx:1065"}, "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-f393d3d8d63d6e91", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/page.tsx:227", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/page.tsx:227"}, "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-0ce9fde96047276d", "name": "Stray `console.log` in TS/JS \u2014 packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent.tsx:660"}, "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-7a39d6fb51e729cb", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/DeleteConfirmDialog.tsx:102"}, "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-5b7da7f9fe0bd257", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/InsightFieldEditorModal.tsx:158"}, "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-32b7238d56b62db2", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/FiltersSection.tsx:227"}, "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-5b87eca27a29d06a", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/FieldsSection.tsx:178"}, "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-a8484ceb8350c0d2", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/MetricsSection.tsx:141"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0ccdfc978450534", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/data-sources/page.tsx:125", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/data-sources/page.tsx:125"}, "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-86b4518c4410564b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/app/src/lib/connectors/svg-sanitization.ts:81", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/app/src/lib/connectors/svg-sanitization.ts:81"}, "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-df5b67932d01ae97", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/lib/perf/PerfHud.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/lib/perf/PerfHud.tsx:165"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80cbf5478dcb9c36", "name": "TODO/FIXME marker in shipping code \u2014 packages/engine-browser/src/analyze.ts:522", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/engine-browser/src/analyze.ts:522"}, "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-b1cc18236592f581", "name": "Stray `console.log` in TS/JS \u2014 spikes/bun-duckdb/test.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 spikes/bun-duckdb/test.ts:22"}, "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-15c906029d8c4e89", "name": "Insecure pattern 'node_child_process' in apps/desktop/scripts/dev.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/desktop/scripts/dev.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-38ff6bb6923265a4", "name": "Insecure pattern 'node_child_process' in scripts/ai-changeset.mjs:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ai-changeset.mjs:23"}, "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-818fdf3cd0567644", "name": "Insecure pattern 'direct_innerhtml_assignment' in packages/visualization/README.md:161", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/visualization/README.md:161"}, "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-fbb07ba21b625aac", "name": "Insecure pattern 'direct_innerhtml_assignment' in packages/visualization/src/renderers/vgplot-renderer.ts:738", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/visualization/src/renderers/vgplot-renderer.ts:738"}, "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-63d6246bfa0dc4e5", "name": "Insecure pattern 'dangerous_innerhtml' in packages/app/src/components/data-sources/renderers/ConnectorIcon.tsx:31", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/app/src/components/data-sources/renderers/ConnectorIcon.tsx:31"}, "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-09046456f3f76ea7", "name": "Insecure pattern 'eval_used' in packages/app/src/lib/connectors/svg-sanitization.test.ts:138", "shortDescription": {"text": "Insecure pattern 'eval_used' in packages/app/src/lib/connectors/svg-sanitization.test.ts:138"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65aa740cba4a4a73", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de53ac274e5b4ecf", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37716d9c0a33ad5c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b3fffbbe7b48f26", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-151c443054f04e60", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a30a64434b54c9a", "name": "Very large file: apps/server/src/functions/commands.ts (1953 lines)", "shortDescription": {"text": "Very large file: apps/server/src/functions/commands.ts (1953 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-3429a03eb4dbeeff", "name": "Very large file: apps/server/src/functions/preview-diff.test.ts (1576 lines)", "shortDescription": {"text": "Very large file: apps/server/src/functions/preview-diff.test.ts (1576 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-d61417d7dff32998", "name": "Very large file: apps/server/src/functions/commands.test.ts (2645 lines)", "shortDescription": {"text": "Very large file: apps/server/src/functions/commands.test.ts (2645 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-7d314d990f01919e", "name": "Very large file: packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent.tsx (1387 lin", "shortDescription": {"text": "Very large file: packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent.tsx (1387 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-cade9da8cee80ba1", "name": "Very large file: packages/app/src/lib/visualizations/suggest-charts.ts (1618 lines)", "shortDescription": {"text": "Very large file: packages/app/src/lib/visualizations/suggest-charts.ts (1618 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-dd59aae74e3fcc36", "name": "Very large file: packages/app/src/hooks/useInsightView.test.tsx (1576 lines)", "shortDescription": {"text": "Very large file: packages/app/src/hooks/useInsightView.test.tsx (1576 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-3ffab216c9679f93", "name": "Node manifest has dependencies but no lockfile: apps/renderer/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/renderer/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-d57b3f82d2270c5b", "name": "Node manifest has dependencies but no lockfile: apps/desktop/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/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-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f12bbcc60e1f76c", "name": "Node manifest has dependencies but no lockfile: apps/server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/server/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-cb3e52667c84fb86", "name": "Node manifest has dependencies but no lockfile: packages/types/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/types/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-c046771bceb7b4d6", "name": "Node manifest has dependencies but no lockfile: packages/server-core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/server-core/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e9a571d09d1a32c", "name": "Node manifest has dependencies but no lockfile: packages/visualization/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/visualization/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-d19dd740c92e453c", "name": "Node manifest has dependencies but no lockfile: packages/json/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/json/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3435a2e7ade7dd2", "name": "Node manifest has dependencies but no lockfile: packages/desktop-types/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/desktop-types/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-4bf95f042f6cdfd9", "name": "Node manifest has dependencies but no lockfile: packages/app/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/app/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-c2477576abdd7245", "name": "Node manifest has dependencies but no lockfile: packages/engine-browser/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/engine-browser/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-8387913c433ff11e", "name": "Node manifest has dependencies but no lockfile: packages/engine-server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/engine-server/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-68be1512fa1e6bad", "name": "Node manifest has dependencies but no lockfile: packages/app-data/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/app-data/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-a3dbccdf10e398a3", "name": "Node manifest has dependencies but no lockfile: packages/connector-notion/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/connector-notion/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-f3cf71c28b843285", "name": "Node manifest has dependencies but no lockfile: packages/csv/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/csv/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-f9f13e1418f0ef36", "name": "Node manifest has dependencies but no lockfile: packages/engine/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/engine/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28e92806c0db3cd2", "name": "Node manifest has dependencies but no lockfile: packages/core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58cd3a5f3daec86b", "name": "Node manifest has dependencies but no lockfile: packages/connector-local/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/connector-local/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-b05ce89c70db588f", "name": "Node manifest has dependencies but no lockfile: e2e/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: e2e/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 85 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 75 placeholder/mock markers across 38 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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 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-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b391f8a8b4d38b6", "name": "Commented-code block (5 lines) in apps/renderer/src/main.tsx:44", "shortDescription": {"text": "Commented-code block (5 lines) in apps/renderer/src/main.tsx:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4625f5b1c93b5122", "name": "Commented-code block (5 lines) in apps/desktop/scripts/dev.mjs:40", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/scripts/dev.mjs:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6d14740f842b231", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/scripts/verify-native-engine.mjs:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/scripts/verify-native-engine.mjs: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-cf74b9d130226e84", "name": "Commented-code block (5 lines) in apps/desktop/src/main.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/main.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc00ddf330a5eb7e", "name": "Commented-code block (11 lines) in apps/web/vite.config.ts:16", "shortDescription": {"text": "Commented-code block (11 lines) in apps/web/vite.config.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf94c4ecb3ca556c", "name": "Commented-code block (8 lines) in apps/server/src/app.ts:207", "shortDescription": {"text": "Commented-code block (8 lines) in apps/server/src/app.ts: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-55f39f3650e736b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/app.test.ts:161", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/app.test.ts:161"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e78776d9857d0186", "name": "Commented-code block (7 lines) in apps/server/src/functions/preview-diff.ts:77", "shortDescription": {"text": "Commented-code block (7 lines) in apps/server/src/functions/preview-diff.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4231e28a46171c6", "name": "Commented-code block (5 lines) in apps/server/src/functions/app-artifacts.ts:358", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/functions/app-artifacts.ts:358"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1e5afec12856bb4", "name": "Commented-code block (5 lines) in apps/server/src/functions/commands.ts:1267", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/functions/commands.ts:1267"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fdd88de673f4054c", "name": "Commented-code block (5 lines) in apps/server/src/functions/preview-diff.test.ts:275", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/functions/preview-diff.test.ts:275"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24d2a379ee73a8c2", "name": "Commented-code block (11 lines) in apps/server/src/functions/commands.test.ts:107", "shortDescription": {"text": "Commented-code block (11 lines) in apps/server/src/functions/commands.test.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a314cac6bd061ba1", "name": "Commented-code block (5 lines) in scripts/check-no-ticket-refs.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/check-no-ticket-refs.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-5319fb4ebe2ccf66", "name": "Commented-code block (5 lines) in packages/types/src/data-sources.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in packages/types/src/data-sources.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73bf980ee1dd6f3e", "name": "Commented-code block (6 lines) in packages/server-core/vitest.config.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in packages/server-core/vitest.config.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f417e8989a001bd", "name": "Commented-code block (7 lines) in packages/server-core/src/project.ts:194", "shortDescription": {"text": "Commented-code block (7 lines) in packages/server-core/src/project.ts:194"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8517cb80eaacfb93", "name": "Commented-code block (5 lines) in packages/server-core/src/snapshots.test.ts:165", "shortDescription": {"text": "Commented-code block (5 lines) in packages/server-core/src/snapshots.test.ts:165"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88bcf848da55f314", "name": "Commented-code block (5 lines) in packages/server-core/src/write-gate.ts:257", "shortDescription": {"text": "Commented-code block (5 lines) in packages/server-core/src/write-gate.ts:257"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdb58746d09d7bd0", "name": "Commented-code block (6 lines) in packages/server-core/src/db.test.ts:227", "shortDescription": {"text": "Commented-code block (6 lines) in packages/server-core/src/db.test.ts:227"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a54b8333ce6cbc8", "name": "Commented-code block (14 lines) in packages/server-core/src/db.ts:19", "shortDescription": {"text": "Commented-code block (14 lines) in packages/server-core/src/db.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ad781719c82dc9e", "name": "Commented-code block (6 lines) in packages/visualization/src/components/Chart.tsx:343", "shortDescription": {"text": "Commented-code block (6 lines) in packages/visualization/src/components/Chart.tsx:343"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b43b1ea623ba8954", "name": "Commented-code block (6 lines) in packages/app/src/components/visualizations/AxisSelectField.tsx:160", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app/src/components/visualizations/AxisSelectField.tsx:160"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-976eb88a165d9751", "name": "Commented-code block (10 lines) in packages/app/src/components/visualizations/VisualizationDisplay.tsx:128", "shortDescription": {"text": "Commented-code block (10 lines) in packages/app/src/components/visualizations/VisualizationDisplay.tsx:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-faaa06a3c049f387", "name": "Commented-code block (5 lines) in packages/app/src/components/dashboards/DashboardGrid.tsx:152", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/components/dashboards/DashboardGrid.tsx:152"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43c9bc29ef37ec78", "name": "Commented-code block (7 lines) in packages/app/src/components/providers/ChartEngineProvider.tsx:92", "shortDescription": {"text": "Commented-code block (7 lines) in packages/app/src/components/providers/ChartEngineProvider.tsx:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84c9a128cd565077", "name": "Commented-code block (5 lines) in packages/app/src/components/providers/VisualizationSetup.tsx:173", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/components/providers/VisualizationSetup.tsx:173"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c372c7e2d654d42f", "name": "Commented-code block (6 lines) in packages/app/src/components/data-sources/DataSourceDisplay.tsx:303", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app/src/components/data-sources/DataSourceDisplay.tsx:303"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e3143039d6ebbd4", "name": "Commented-code block (5 lines) in packages/app/src/components/data-sources/SensitivityBadge.tsx:48", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/components/data-sources/SensitivityBadge.tsx:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1edfa45959b604a6", "name": "Commented-code block (6 lines) in packages/app/src/app/visualizations/[visualizationId]/_components/VisualizationPageCon", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app/src/app/visualizations/[visualizationId]/_components/VisualizationPageContent.tsx:349"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e3e772fe0a628677", "name": "Commented-code block (5 lines) in packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureCont", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent.tsx:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a039c4cc1b2ed345", "name": "Commented-code block (5 lines) in packages/app/src/app/insights/[insightId]/_components/config-panel/FilterEditDialog.ts", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/app/insights/[insightId]/_components/config-panel/FilterEditDialog.tsx:152"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb0a379c258bf882", "name": "Commented-code block (6 lines) in packages/app/src/app/insights/[insightId]/_components/config-panel/InsightConfigPanel.", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app/src/app/insights/[insightId]/_components/config-panel/InsightConfigPanel.tsx:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce46ae4d6e66a530", "name": "Commented-code block (5 lines) in packages/app/src/app/dashboards/[dashboardId]/_components/DashboardDetailContent.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/app/dashboards/[dashboardId]/_components/DashboardDetailContent.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-d1f2ba71d37e2c50", "name": "Commented-code block (5 lines) in packages/app/src/app/data-sources/[sourceId]/_components/DataSourcePageContent.tsx:257", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/app/data-sources/[sourceId]/_components/DataSourcePageContent.tsx:257"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d92b88c9e6b4124", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/app/src/lib/stores/types.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/app/src/lib/stores/types.ts: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-0b8de12aac0171a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/app/src/lib/connectors/svg-sanitization.test.ts:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/app/src/lib/connectors/svg-sanitization.test.ts:137"}, "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-91e14989369069af", "name": "Commented-code block (5 lines) in packages/app/src/lib/visualizations/suggest-charts.ts:614", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/lib/visualizations/suggest-charts.ts:614"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fc9417d5b3d0942", "name": "Commented-code block (5 lines) in packages/app/src/lib/insights/compute-combined-fields.test.ts:208", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/lib/insights/compute-combined-fields.test.ts:208"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-febdb158d3b543cb", "name": "Commented-code block (5 lines) in packages/app/src/lib/insights/compute-preview.ts:127", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/lib/insights/compute-preview.ts:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95d6857c39e2f80f", "name": "Commented-code block (6 lines) in packages/app/src/lib/dashboards/controls.ts:115", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app/src/lib/dashboards/controls.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-125d4c45212be49f", "name": "Commented-code block (5 lines) in packages/app/src/lib/perf/marks.ts:85", "shortDescription": {"text": "Commented-code block (5 lines) in packages/app/src/lib/perf/marks.ts:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7638773a3b7cddd6", "name": "Commented-code block (6 lines) in packages/app/src/hooks/useInsightPagination.ts:323", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app/src/hooks/useInsightPagination.ts:323"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e2c50a9aedacb40", "name": "Commented-code block (6 lines) in packages/app/src/hooks/useInsightView.ts:220", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app/src/hooks/useInsightView.ts:220"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-828d1485f1ea4c97", "name": "Commented-code block (7 lines) in packages/engine-server/src/parquet-cache.ts:222", "shortDescription": {"text": "Commented-code block (7 lines) in packages/engine-server/src/parquet-cache.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-d9a1f45452a14796", "name": "Commented-code block (5 lines) in packages/engine-server/src/native-engine.test.ts:274", "shortDescription": {"text": "Commented-code block (5 lines) in packages/engine-server/src/native-engine.test.ts:274"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9eb840d6b6b6cc2d", "name": "Commented-code block (7 lines) in packages/engine-server/src/arrow-encode.ts:78", "shortDescription": {"text": "Commented-code block (7 lines) in packages/engine-server/src/arrow-encode.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-301abe7052d330cb", "name": "Commented-code block (5 lines) in packages/engine-server/src/native-engine.ts:201", "shortDescription": {"text": "Commented-code block (5 lines) in packages/engine-server/src/native-engine.ts:201"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-385e7201009888c1", "name": "Commented-code block (6 lines) in packages/engine-server/src/parquet-cache.test.ts:253", "shortDescription": {"text": "Commented-code block (6 lines) in packages/engine-server/src/parquet-cache.test.ts:253"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b36f322f19cb7336", "name": "Commented-code block (6 lines) in packages/app-data/src/runtime.ts:59", "shortDescription": {"text": "Commented-code block (6 lines) in packages/app-data/src/runtime.ts:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a11f756d7d6d101", "name": "Legacy-named symbol `123456789012_v2` in packages/engine/src/sql/insight-sql.ts:173", "shortDescription": {"text": "Legacy-named symbol `123456789012_v2` in packages/engine/src/sql/insight-sql.ts:173"}, "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-621b6ca58e36a2b9", "name": "Commented-code block (6 lines) in packages/engine/src/sql/insight-sql.ts:353", "shortDescription": {"text": "Commented-code block (6 lines) in packages/engine/src/sql/insight-sql.ts:353"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8f04fa6584abc82", "name": "Commented-code block (6 lines) in e2e/web/playwright.config.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in e2e/web/playwright.config.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dda2f470e2c2fe9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/web/lib/test-fixtures.ts:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/web/lib/test-fixtures.ts:125"}, "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-1a3cc217336b536b", "name": "Dangling fetch: POST /tables/df_test (packages/engine-server/src/arrow-data-path.test.ts:198)", "shortDescription": {"text": "Dangling fetch: POST /tables/df_test (packages/engine-server/src/arrow-data-path.test.ts:198)"}, "fullDescription": {"text": "`packages/engine-server/src/arrow-data-path.test.ts:198` calls `POST /tables/df_test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tables/df_test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2d228910cb460c5", "name": "Dangling fetch: POST /tables/df_test (packages/engine-server/src/arrow-data-path.test.ts:218)", "shortDescription": {"text": "Dangling fetch: POST /tables/df_test (packages/engine-server/src/arrow-data-path.test.ts:218)"}, "fullDescription": {"text": "`packages/engine-server/src/arrow-data-path.test.ts:218` calls `POST /tables/df_test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tables/df_test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-136bc5278c9b293d", "name": "Dangling fetch: POST /tables/df_ok (packages/engine-server/src/arrow-data-path.test.ts:233)", "shortDescription": {"text": "Dangling fetch: POST /tables/df_ok (packages/engine-server/src/arrow-data-path.test.ts:233)"}, "fullDescription": {"text": "`packages/engine-server/src/arrow-data-path.test.ts:233` calls `POST /tables/df_ok` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tables/df_ok`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3b848963f1a349a", "name": "Unused endpoint: POST /tables/:name", "shortDescription": {"text": "Unused endpoint: POST /tables/:name"}, "fullDescription": {"text": "`packages/engine-server/src/arrow-data-path.ts` declares `POST /tables/:name` 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/23335"}, "properties": {"repository": "youhaowei/DashFrame", "repoUrl": "https://github.com/youhaowei/DashFrame", "branch": "main"}, "results": [{"ruleId": "scanner-09621a6bc7055b22", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/main.ts:103"}, "properties": {"repobilityId": "2fe4c38b8cfdd22d", "scanner": "scanner-primary", "fingerprint": "09621a6bc7055b22", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87501e406e739f33", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:33"}, "properties": {"repobilityId": "5c84e404c4eed546", "scanner": "scanner-primary", "fingerprint": "87501e406e739f33", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27e946be7cbf6e05", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/components/VirtualTable.tsx:623"}, "properties": {"repobilityId": "c9a414025a8468e1", "scanner": "scanner-primary", "fingerprint": "27e946be7cbf6e05", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1b23984e7ed20f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/components/SortableList.tsx:94"}, "properties": {"repobilityId": "bea1eb7511eab586", "scanner": "scanner-primary", "fingerprint": "c1b23984e7ed20f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a761c96a0287d27f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/navigation.tsx:128"}, "properties": {"repobilityId": "06eff755084acbaa", "scanner": "scanner-primary", "fingerprint": "a761c96a0287d27f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56bc01549ac29834", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/visualization-preview/SuggestedInsights.tsx:14"}, "properties": {"repobilityId": "e46390d8961c5ece", "scanner": "scanner-primary", "fingerprint": "56bc01549ac29834", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c676a210e364bc2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/visualizations/VisualizationItemCard.tsx:177"}, "properties": {"repobilityId": "97930cd174ef980a", "scanner": "scanner-primary", "fingerprint": "2c676a210e364bc2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-72aa2d341bd8ff6c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/preview-diff/PreviewDiffRenderer.tsx:90"}, "properties": {"repobilityId": "7b7845d6ed91220d", "scanner": "scanner-primary", "fingerprint": "72aa2d341bd8ff6c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8988e751c1e4d8dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/assistant/AssistantEmptyState.tsx:61"}, "properties": {"repobilityId": "ad7746ef94d5479c", "scanner": "scanner-primary", "fingerprint": "8988e751c1e4d8dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29c54dc557829c68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/assistant/AssistantSidebar.tsx:42"}, "properties": {"repobilityId": "86d4db145981138a", "scanner": "scanner-primary", "fingerprint": "29c54dc557829c68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef214dad0611045d", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 packages/app/src/components/layouts/AppLayout.tsx:43"}, "properties": {"repobilityId": "14d79b898aa765ba", "scanner": "scanner-primary", "fingerprint": "ef214dad0611045d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-7fbe8463131bbcbc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/data-sources/TableDetailPanel.tsx:233"}, "properties": {"repobilityId": "5f18021b6b7d982b", "scanner": "scanner-primary", "fingerprint": "7fbe8463131bbcbc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e32b3a16f34bf4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/components/data-sources/DataSourceControls.tsx:466"}, "properties": {"repobilityId": "3fa12f788de2891b", "scanner": "scanner-primary", "fingerprint": "1e32b3a16f34bf4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23e833ed8461aa4e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/app/src/components/data-sources/DataSourcesWorkbench.tsx:284"}, "properties": {"repobilityId": "4c01e3e22efafda7", "scanner": "scanner-primary", "fingerprint": "23e833ed8461aa4e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a428c42fc3db1750", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/app/src/components/data-sources/DataPickerContent.tsx:216"}, "properties": {"repobilityId": "60df142b1c24a3ac", "scanner": "scanner-primary", "fingerprint": "a428c42fc3db1750", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb2cfd9c0c775588", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/app/src/components/data-sources/renderers/ConnectorIcon.tsx:31"}, "properties": {"repobilityId": "0f513aaed282353d", "scanner": "scanner-primary", "fingerprint": "bb2cfd9c0c775588", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6d1299eabf55262f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/visualizations/page.tsx:173"}, "properties": {"repobilityId": "936524601583c447", "scanner": "scanner-primary", "fingerprint": "6d1299eabf55262f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4848b9d86b5d65ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/visualizations/[visualizationId]/_components/VisualizationPageContent.tsx:1065"}, "properties": {"repobilityId": "f8e96698bcf4c11c", "scanner": "scanner-primary", "fingerprint": "4848b9d86b5d65ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f393d3d8d63d6e91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/page.tsx:227"}, "properties": {"repobilityId": "d6055fb3e94f2a56", "scanner": "scanner-primary", "fingerprint": "f393d3d8d63d6e91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ce9fde96047276d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent.tsx:660"}, "properties": {"repobilityId": "7e16651915492198", "scanner": "scanner-primary", "fingerprint": "0ce9fde96047276d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a39d6fb51e729cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/DeleteConfirmDialog.tsx:102"}, "properties": {"repobilityId": "dbfa4ffe5c720125", "scanner": "scanner-primary", "fingerprint": "7a39d6fb51e729cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b7da7f9fe0bd257", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/InsightFieldEditorModal.tsx:158"}, "properties": {"repobilityId": "efe9676f80d1e32e", "scanner": "scanner-primary", "fingerprint": "5b7da7f9fe0bd257", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32b7238d56b62db2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/FiltersSection.tsx:227"}, "properties": {"repobilityId": "6e0bfcbf04d724d3", "scanner": "scanner-primary", "fingerprint": "32b7238d56b62db2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b87eca27a29d06a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/FieldsSection.tsx:178"}, "properties": {"repobilityId": "a0b374aaf46d5316", "scanner": "scanner-primary", "fingerprint": "5b87eca27a29d06a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a8484ceb8350c0d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/insights/[insightId]/_components/config-panel/MetricsSection.tsx:141"}, "properties": {"repobilityId": "49f6377e0bd48638", "scanner": "scanner-primary", "fingerprint": "a8484ceb8350c0d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0ccdfc978450534", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/app/data-sources/page.tsx:125"}, "properties": {"repobilityId": "eb73fd04def18da0", "scanner": "scanner-primary", "fingerprint": "f0ccdfc978450534", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86b4518c4410564b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/app/src/lib/connectors/svg-sanitization.ts:81"}, "properties": {"repobilityId": "e39e25018f3eebd2", "scanner": "scanner-primary", "fingerprint": "86b4518c4410564b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-df5b67932d01ae97", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/app/src/lib/perf/PerfHud.tsx:165"}, "properties": {"repobilityId": "89dbd6e9facbf3c7", "scanner": "scanner-primary", "fingerprint": "df5b67932d01ae97", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-80cbf5478dcb9c36", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/engine-browser/src/analyze.ts:522"}, "properties": {"repobilityId": "86e6dd2a837dc4ef", "scanner": "scanner-primary", "fingerprint": "80cbf5478dcb9c36", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b1cc18236592f581", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 spikes/bun-duckdb/test.ts:22"}, "properties": {"repobilityId": "3ba7bdd0a8a331b5", "scanner": "scanner-primary", "fingerprint": "b1cc18236592f581", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15c906029d8c4e89", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/desktop/scripts/dev.mjs:3"}, "properties": {"repobilityId": "961af86af007151d", "scanner": "scanner-primary", "fingerprint": "15c906029d8c4e89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/scripts/dev.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-38ff6bb6923265a4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ai-changeset.mjs:23"}, "properties": {"repobilityId": "5320c844547c0ddd", "scanner": "scanner-primary", "fingerprint": "38ff6bb6923265a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ai-changeset.mjs"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-818fdf3cd0567644", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/visualization/README.md:161"}, "properties": {"repobilityId": "4595c99e65bf56c4", "scanner": "scanner-primary", "fingerprint": "818fdf3cd0567644", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/visualization/README.md"}, "region": {"startLine": 161}}}]}, {"ruleId": "scanner-fbb07ba21b625aac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/visualization/src/renderers/vgplot-renderer.ts:738"}, "properties": {"repobilityId": "187f798a71257932", "scanner": "scanner-primary", "fingerprint": "fbb07ba21b625aac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/visualization/src/renderers/vgplot-renderer.ts"}, "region": {"startLine": 738}}}]}, {"ruleId": "scanner-63d6246bfa0dc4e5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/app/src/components/data-sources/renderers/ConnectorIcon.tsx:31"}, "properties": {"repobilityId": "7ab999e0eaded08e", "scanner": "scanner-primary", "fingerprint": "63d6246bfa0dc4e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/app/src/components/data-sources/renderers/ConnectorIcon.tsx"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-09046456f3f76ea7", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in packages/app/src/lib/connectors/svg-sanitization.test.ts:138"}, "properties": {"repobilityId": "c1635200d483f871", "scanner": "scanner-primary", "fingerprint": "09046456f3f76ea7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/app/src/lib/connectors/svg-sanitization.test.ts"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8860eac61a1ebe26", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "549a2de1ac0c3fa9", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a5721e15e3a54aa2", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dcb6504096fc20e7", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dcb6504096fc20e7", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02600186fc092bd4", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ead6a2c2bfe167b", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-37716d9c0a33ad5c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "abfb5752158cf655", "scanner": "scanner-primary", "fingerprint": "37716d9c0a33ad5c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8b3fffbbe7b48f26", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bc93de55580203fd", "scanner": "scanner-primary", "fingerprint": "8b3fffbbe7b48f26", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/version-packages.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-8b3fffbbe7b48f26", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e0e7e7ca7c4b9da7", "scanner": "scanner-primary", "fingerprint": "8b3fffbbe7b48f26", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/version-packages.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-8b3fffbbe7b48f26", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fe4d721064a4aa6a", "scanner": "scanner-primary", "fingerprint": "8b3fffbbe7b48f26", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/version-packages.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-151c443054f04e60", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a7acca5daef096f8", "scanner": "scanner-primary", "fingerprint": "151c443054f04e60", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/version-packages.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a30a64434b54c9a", "level": "note", "message": {"text": "Very large file: apps/server/src/functions/commands.ts (1953 lines)"}, "properties": {"repobilityId": "080d1ff27660af76", "scanner": "scanner-primary", "fingerprint": "6a30a64434b54c9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3429a03eb4dbeeff", "level": "note", "message": {"text": "Very large file: apps/server/src/functions/preview-diff.test.ts (1576 lines)"}, "properties": {"repobilityId": "33570a1656017330", "scanner": "scanner-primary", "fingerprint": "3429a03eb4dbeeff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d61417d7dff32998", "level": "note", "message": {"text": "Very large file: apps/server/src/functions/commands.test.ts (2645 lines)"}, "properties": {"repobilityId": "fb7ed73aacdef494", "scanner": "scanner-primary", "fingerprint": "d61417d7dff32998", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7d314d990f01919e", "level": "note", "message": {"text": "Very large file: packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent.tsx (1387 lines)"}, "properties": {"repobilityId": "253d0f7ecb273f93", "scanner": "scanner-primary", "fingerprint": "7d314d990f01919e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cade9da8cee80ba1", "level": "note", "message": {"text": "Very large file: packages/app/src/lib/visualizations/suggest-charts.ts (1618 lines)"}, "properties": {"repobilityId": "8e9fd26028bfbdcb", "scanner": "scanner-primary", "fingerprint": "cade9da8cee80ba1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dd59aae74e3fcc36", "level": "note", "message": {"text": "Very large file: packages/app/src/hooks/useInsightView.test.tsx (1576 lines)"}, "properties": {"repobilityId": "a26d2f345d029271", "scanner": "scanner-primary", "fingerprint": "dd59aae74e3fcc36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ffab216c9679f93", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/renderer/package.json"}, "properties": {"repobilityId": "87b148d2e164b40e", "scanner": "scanner-primary", "fingerprint": "3ffab216c9679f93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/renderer/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d57b3f82d2270c5b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/package.json"}, "properties": {"repobilityId": "a5d1a254ecc349f8", "scanner": "scanner-primary", "fingerprint": "d57b3f82d2270c5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f12bbcc60e1f76c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/server/package.json"}, "properties": {"repobilityId": "16bf11fe30b0b8cc", "scanner": "scanner-primary", "fingerprint": "5f12bbcc60e1f76c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb3e52667c84fb86", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/types/package.json"}, "properties": {"repobilityId": "b5e2784f829944e6", "scanner": "scanner-primary", "fingerprint": "cb3e52667c84fb86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/types/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c046771bceb7b4d6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/server-core/package.json"}, "properties": {"repobilityId": "b3b16803a9fe04a5", "scanner": "scanner-primary", "fingerprint": "c046771bceb7b4d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/server-core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2e9a571d09d1a32c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/visualization/package.json"}, "properties": {"repobilityId": "a39b5a6a3383f362", "scanner": "scanner-primary", "fingerprint": "2e9a571d09d1a32c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/visualization/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d19dd740c92e453c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/json/package.json"}, "properties": {"repobilityId": "c86270b8b5fdcdc5", "scanner": "scanner-primary", "fingerprint": "d19dd740c92e453c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/json/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a3435a2e7ade7dd2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/desktop-types/package.json"}, "properties": {"repobilityId": "0e3538e4da863d27", "scanner": "scanner-primary", "fingerprint": "a3435a2e7ade7dd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/desktop-types/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4bf95f042f6cdfd9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/app/package.json"}, "properties": {"repobilityId": "191a196ac66f8166", "scanner": "scanner-primary", "fingerprint": "4bf95f042f6cdfd9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/app/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2477576abdd7245", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/engine-browser/package.json"}, "properties": {"repobilityId": "033d5acd8138a8af", "scanner": "scanner-primary", "fingerprint": "c2477576abdd7245", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/engine-browser/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8387913c433ff11e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/engine-server/package.json"}, "properties": {"repobilityId": "3774de8bc66a4979", "scanner": "scanner-primary", "fingerprint": "8387913c433ff11e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/engine-server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68be1512fa1e6bad", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/app-data/package.json"}, "properties": {"repobilityId": "a787a82ee2cbd528", "scanner": "scanner-primary", "fingerprint": "68be1512fa1e6bad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/app-data/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a3dbccdf10e398a3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/connector-notion/package.json"}, "properties": {"repobilityId": "eaa4bf2798d19519", "scanner": "scanner-primary", "fingerprint": "a3dbccdf10e398a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/connector-notion/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f3cf71c28b843285", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/csv/package.json"}, "properties": {"repobilityId": "08daa83bdb636edf", "scanner": "scanner-primary", "fingerprint": "f3cf71c28b843285", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/csv/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f9f13e1418f0ef36", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/engine/package.json"}, "properties": {"repobilityId": "81a373b6a2e74e41", "scanner": "scanner-primary", "fingerprint": "f9f13e1418f0ef36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/engine/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28e92806c0db3cd2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "properties": {"repobilityId": "8640e46be7e3f9b2", "scanner": "scanner-primary", "fingerprint": "28e92806c0db3cd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-58cd3a5f3daec86b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/connector-local/package.json"}, "properties": {"repobilityId": "50cdb5d1ab3c6ffa", "scanner": "scanner-primary", "fingerprint": "58cd3a5f3daec86b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/connector-local/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b05ce89c70db588f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: e2e/web/package.json"}, "properties": {"repobilityId": "b369e12ee5c3f13e", "scanner": "scanner-primary", "fingerprint": "b05ce89c70db588f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "723bf3367a9a5b70", "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": "42ea5dfce5b5a341", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "575fba8969e68bfb", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "f0db848f494f5d1f", "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": "24e4f8d022ce4519", "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": "dc0a85f93a6f61e2", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5b391f8a8b4d38b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/renderer/src/main.tsx:44"}, "properties": {"repobilityId": "4f1b5fd57acf0a99", "scanner": "scanner-primary", "fingerprint": "5b391f8a8b4d38b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4625f5b1c93b5122", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/scripts/dev.mjs:40"}, "properties": {"repobilityId": "76094dbe7b336f31", "scanner": "scanner-primary", "fingerprint": "4625f5b1c93b5122", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6d14740f842b231", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/scripts/verify-native-engine.mjs:49"}, "properties": {"repobilityId": "46aacc62f0fd3e6a", "scanner": "scanner-primary", "fingerprint": "a6d14740f842b231", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf74b9d130226e84", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/main.ts:36"}, "properties": {"repobilityId": "2cf0e3d0d15c17ff", "scanner": "scanner-primary", "fingerprint": "cf74b9d130226e84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc00ddf330a5eb7e", "level": "none", "message": {"text": "Commented-code block (11 lines) in apps/web/vite.config.ts:16"}, "properties": {"repobilityId": "bd1f37bbebbfd561", "scanner": "scanner-primary", "fingerprint": "bc00ddf330a5eb7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf94c4ecb3ca556c", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/server/src/app.ts:207"}, "properties": {"repobilityId": "4de737550a2d59c0", "scanner": "scanner-primary", "fingerprint": "cf94c4ecb3ca556c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55f39f3650e736b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/app.test.ts:161"}, "properties": {"repobilityId": "0aa076d63e8d881d", "scanner": "scanner-primary", "fingerprint": "55f39f3650e736b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e78776d9857d0186", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/server/src/functions/preview-diff.ts:77"}, "properties": {"repobilityId": "a640b1c0ba877b19", "scanner": "scanner-primary", "fingerprint": "e78776d9857d0186", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4231e28a46171c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/functions/app-artifacts.ts:358"}, "properties": {"repobilityId": "c3be670e55df1462", "scanner": "scanner-primary", "fingerprint": "e4231e28a46171c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1e5afec12856bb4", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/functions/commands.ts:1267"}, "properties": {"repobilityId": "817f2a9bc186978a", "scanner": "scanner-primary", "fingerprint": "c1e5afec12856bb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fdd88de673f4054c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/functions/preview-diff.test.ts:275"}, "properties": {"repobilityId": "1b838cb377620dd5", "scanner": "scanner-primary", "fingerprint": "fdd88de673f4054c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24d2a379ee73a8c2", "level": "none", "message": {"text": "Commented-code block (11 lines) in apps/server/src/functions/commands.test.ts:107"}, "properties": {"repobilityId": "973068ba28ae9a4b", "scanner": "scanner-primary", "fingerprint": "24d2a379ee73a8c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a314cac6bd061ba1", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/check-no-ticket-refs.mjs:4"}, "properties": {"repobilityId": "afd712889f2777cd", "scanner": "scanner-primary", "fingerprint": "a314cac6bd061ba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5319fb4ebe2ccf66", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/types/src/data-sources.ts:20"}, "properties": {"repobilityId": "73af95b892901429", "scanner": "scanner-primary", "fingerprint": "5319fb4ebe2ccf66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73bf980ee1dd6f3e", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/server-core/vitest.config.ts:7"}, "properties": {"repobilityId": "de4fd4c9a7ba4cec", "scanner": "scanner-primary", "fingerprint": "73bf980ee1dd6f3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f417e8989a001bd", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/server-core/src/project.ts:194"}, "properties": {"repobilityId": "9b7373307b51f456", "scanner": "scanner-primary", "fingerprint": "3f417e8989a001bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8517cb80eaacfb93", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/server-core/src/snapshots.test.ts:165"}, "properties": {"repobilityId": "ef6474f86d8f9864", "scanner": "scanner-primary", "fingerprint": "8517cb80eaacfb93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88bcf848da55f314", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/server-core/src/write-gate.ts:257"}, "properties": {"repobilityId": "56b00e085bad4356", "scanner": "scanner-primary", "fingerprint": "88bcf848da55f314", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdb58746d09d7bd0", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/server-core/src/db.test.ts:227"}, "properties": {"repobilityId": "47c7b7df825a9c50", "scanner": "scanner-primary", "fingerprint": "bdb58746d09d7bd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a54b8333ce6cbc8", "level": "none", "message": {"text": "Commented-code block (14 lines) in packages/server-core/src/db.ts:19"}, "properties": {"repobilityId": "5d4087fd33ed462b", "scanner": "scanner-primary", "fingerprint": "7a54b8333ce6cbc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ad781719c82dc9e", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/visualization/src/components/Chart.tsx:343"}, "properties": {"repobilityId": "1c0219d59a8066e9", "scanner": "scanner-primary", "fingerprint": "7ad781719c82dc9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b43b1ea623ba8954", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app/src/components/visualizations/AxisSelectField.tsx:160"}, "properties": {"repobilityId": "f9272e8fcc70e60b", "scanner": "scanner-primary", "fingerprint": "b43b1ea623ba8954", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-976eb88a165d9751", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/app/src/components/visualizations/VisualizationDisplay.tsx:128"}, "properties": {"repobilityId": "0f83e81501e9f86e", "scanner": "scanner-primary", "fingerprint": "976eb88a165d9751", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-faaa06a3c049f387", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/components/dashboards/DashboardGrid.tsx:152"}, "properties": {"repobilityId": "2ae6dd6e43d83169", "scanner": "scanner-primary", "fingerprint": "faaa06a3c049f387", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43c9bc29ef37ec78", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/app/src/components/providers/ChartEngineProvider.tsx:92"}, "properties": {"repobilityId": "d7c170586f19a884", "scanner": "scanner-primary", "fingerprint": "43c9bc29ef37ec78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84c9a128cd565077", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/components/providers/VisualizationSetup.tsx:173"}, "properties": {"repobilityId": "860294ab42839dad", "scanner": "scanner-primary", "fingerprint": "84c9a128cd565077", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c372c7e2d654d42f", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app/src/components/data-sources/DataSourceDisplay.tsx:303"}, "properties": {"repobilityId": "943a11a491576c2b", "scanner": "scanner-primary", "fingerprint": "c372c7e2d654d42f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e3143039d6ebbd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/components/data-sources/SensitivityBadge.tsx:48"}, "properties": {"repobilityId": "b06d13ed9d3b9357", "scanner": "scanner-primary", "fingerprint": "8e3143039d6ebbd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1edfa45959b604a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app/src/app/visualizations/[visualizationId]/_components/VisualizationPageContent.tsx:349"}, "properties": {"repobilityId": "8d8a3946451b884b", "scanner": "scanner-primary", "fingerprint": "1edfa45959b604a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3e772fe0a628677", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/app/insights/[insightId]/join/[tableId]/_components/JoinConfigureContent.tsx:116"}, "properties": {"repobilityId": "4fbe1df456f35ad7", "scanner": "scanner-primary", "fingerprint": "e3e772fe0a628677", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a039c4cc1b2ed345", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/app/insights/[insightId]/_components/config-panel/FilterEditDialog.tsx:152"}, "properties": {"repobilityId": "33df5abac5ccb48b", "scanner": "scanner-primary", "fingerprint": "a039c4cc1b2ed345", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb0a379c258bf882", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app/src/app/insights/[insightId]/_components/config-panel/InsightConfigPanel.tsx:125"}, "properties": {"repobilityId": "3945e1c13b89207d", "scanner": "scanner-primary", "fingerprint": "bb0a379c258bf882", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce46ae4d6e66a530", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/app/dashboards/[dashboardId]/_components/DashboardDetailContent.tsx:78"}, "properties": {"repobilityId": "f496e55913ad4d6c", "scanner": "scanner-primary", "fingerprint": "ce46ae4d6e66a530", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1f2ba71d37e2c50", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/app/data-sources/[sourceId]/_components/DataSourcePageContent.tsx:257"}, "properties": {"repobilityId": "3dfd7b3fe29ebf8a", "scanner": "scanner-primary", "fingerprint": "d1f2ba71d37e2c50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d92b88c9e6b4124", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/app/src/lib/stores/types.ts:34"}, "properties": {"repobilityId": "aa04546521673370", "scanner": "scanner-primary", "fingerprint": "0d92b88c9e6b4124", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b8de12aac0171a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/app/src/lib/connectors/svg-sanitization.test.ts:137"}, "properties": {"repobilityId": "9383754270c30b8c", "scanner": "scanner-primary", "fingerprint": "0b8de12aac0171a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91e14989369069af", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/lib/visualizations/suggest-charts.ts:614"}, "properties": {"repobilityId": "503ac30223045838", "scanner": "scanner-primary", "fingerprint": "91e14989369069af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fc9417d5b3d0942", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/lib/insights/compute-combined-fields.test.ts:208"}, "properties": {"repobilityId": "be88ecb163826906", "scanner": "scanner-primary", "fingerprint": "8fc9417d5b3d0942", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-febdb158d3b543cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/lib/insights/compute-preview.ts:127"}, "properties": {"repobilityId": "56297aac44c1071d", "scanner": "scanner-primary", "fingerprint": "febdb158d3b543cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95d6857c39e2f80f", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app/src/lib/dashboards/controls.ts:115"}, "properties": {"repobilityId": "e044aacb7d122183", "scanner": "scanner-primary", "fingerprint": "95d6857c39e2f80f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-125d4c45212be49f", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/app/src/lib/perf/marks.ts:85"}, "properties": {"repobilityId": "fdede79dce2dcc39", "scanner": "scanner-primary", "fingerprint": "125d4c45212be49f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7638773a3b7cddd6", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app/src/hooks/useInsightPagination.ts:323"}, "properties": {"repobilityId": "07dfc5e6f8ae8728", "scanner": "scanner-primary", "fingerprint": "7638773a3b7cddd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e2c50a9aedacb40", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app/src/hooks/useInsightView.ts:220"}, "properties": {"repobilityId": "d632c39a136899ef", "scanner": "scanner-primary", "fingerprint": "1e2c50a9aedacb40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-828d1485f1ea4c97", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/engine-server/src/parquet-cache.ts:222"}, "properties": {"repobilityId": "79ff8c8fdae9dd9a", "scanner": "scanner-primary", "fingerprint": "828d1485f1ea4c97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9a1f45452a14796", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/engine-server/src/native-engine.test.ts:274"}, "properties": {"repobilityId": "0342d98c1094dc58", "scanner": "scanner-primary", "fingerprint": "d9a1f45452a14796", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9eb840d6b6b6cc2d", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/engine-server/src/arrow-encode.ts:78"}, "properties": {"repobilityId": "68ecfcf5644ef100", "scanner": "scanner-primary", "fingerprint": "9eb840d6b6b6cc2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-301abe7052d330cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/engine-server/src/native-engine.ts:201"}, "properties": {"repobilityId": "a6ffdf58f268f8fe", "scanner": "scanner-primary", "fingerprint": "301abe7052d330cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-385e7201009888c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/engine-server/src/parquet-cache.test.ts:253"}, "properties": {"repobilityId": "257bbc4fe912cde4", "scanner": "scanner-primary", "fingerprint": "385e7201009888c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b36f322f19cb7336", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/app-data/src/runtime.ts:59"}, "properties": {"repobilityId": "fdc0dc7b97a1baea", "scanner": "scanner-primary", "fingerprint": "b36f322f19cb7336", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a11f756d7d6d101", "level": "note", "message": {"text": "Legacy-named symbol `123456789012_v2` in packages/engine/src/sql/insight-sql.ts:173"}, "properties": {"repobilityId": "acc8373890abafce", "scanner": "scanner-primary", "fingerprint": "2a11f756d7d6d101", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-621b6ca58e36a2b9", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/engine/src/sql/insight-sql.ts:353"}, "properties": {"repobilityId": "1905f4106157c3e7", "scanner": "scanner-primary", "fingerprint": "621b6ca58e36a2b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8f04fa6584abc82", "level": "none", "message": {"text": "Commented-code block (6 lines) in e2e/web/playwright.config.ts:13"}, "properties": {"repobilityId": "eef02176cca3f9f1", "scanner": "scanner-primary", "fingerprint": "b8f04fa6584abc82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dda2f470e2c2fe9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 e2e/web/lib/test-fixtures.ts:125"}, "properties": {"repobilityId": "3490a76ad6237dad", "scanner": "scanner-primary", "fingerprint": "7dda2f470e2c2fe9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a3cc217336b536b", "level": "error", "message": {"text": "Dangling fetch: POST /tables/df_test (packages/engine-server/src/arrow-data-path.test.ts:198)"}, "properties": {"repobilityId": "eef2354b42a79932", "scanner": "scanner-primary", "fingerprint": "1a3cc217336b536b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f2d228910cb460c5", "level": "error", "message": {"text": "Dangling fetch: POST /tables/df_test (packages/engine-server/src/arrow-data-path.test.ts:218)"}, "properties": {"repobilityId": "30938ca0c69d432e", "scanner": "scanner-primary", "fingerprint": "f2d228910cb460c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-136bc5278c9b293d", "level": "error", "message": {"text": "Dangling fetch: POST /tables/df_ok (packages/engine-server/src/arrow-data-path.test.ts:233)"}, "properties": {"repobilityId": "bdf81838aa2051bd", "scanner": "scanner-primary", "fingerprint": "136bc5278c9b293d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f3b848963f1a349a", "level": "note", "message": {"text": "Unused endpoint: POST /tables/:name"}, "properties": {"repobilityId": "f5af8e07a90d215b", "scanner": "scanner-primary", "fingerprint": "f3b848963f1a349a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}