{"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-639ed6af99a8343d", "name": "Stray `console.log` in TS/JS \u2014 api/copywriter.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/copywriter.ts:117"}, "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-02a503eda8eaa05d", "name": "Stray `console.log` in TS/JS \u2014 api/generate-deck.ts:150", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/generate-deck.ts:150"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-823b87ad52d0570d", "name": "Stray `console.log` in TS/JS \u2014 api/agent.ts:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/agent.ts:118"}, "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-c36f2d0bce3678af", "name": "Stray `console.log` in TS/JS \u2014 api/image-chat/generate.ts:318", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/image-chat/generate.ts:318"}, "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-3bf671a0a5f7a890", "name": "Stray `console.log` in TS/JS \u2014 api/image-chat/send.ts:508", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/image-chat/send.ts:508"}, "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-a7d18029311f8b4b", "name": "Stray `console.log` in TS/JS \u2014 api/_lib/aiAgent.ts:279", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/_lib/aiAgent.ts:279"}, "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-e835e74ec41d88b5", "name": "Stray `console.log` in TS/JS \u2014 worker/src/runPreviewJob.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runPreviewJob.ts:83"}, "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-29fe36abe7e345ed", "name": "Stray `console.log` in TS/JS \u2014 worker/src/runImageJob.ts:220", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runImageJob.ts:220"}, "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-e9b1bc4ef33d9756", "name": "TODO/FIXME marker in shipping code \u2014 worker/src/env.ts:24", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 worker/src/env.ts:24"}, "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-5b10288e2cd295e3", "name": "Stray `console.log` in TS/JS \u2014 worker/src/runDeckJob.ts:340", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runDeckJob.ts:340"}, "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-7c89073af1374513", "name": "Stray `console.log` in TS/JS \u2014 worker/src/index.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/index.ts:90"}, "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-bb305c61eceadd79", "name": "Stray `console.log` in TS/JS \u2014 worker/src/runCompressJob.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runCompressJob.ts:89"}, "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-56ec293f4eae3102", "name": "Stray `console.log` in TS/JS \u2014 src/stores/appStore.ts:525", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/appStore.ts:525"}, "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-ed243ec06597a338", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:430", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:430"}, "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-033e875405c37c0e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Header.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Header.tsx:92"}, "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-9c7cfe85c3265007", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Templates/TemplatesLibraryPage.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Templates/TemplatesLibraryPage.tsx:185"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f9b2c1bc560e1b5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard/DashboardEditorPage.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard/DashboardEditorPage.tsx:164"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cede6b22099983a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/MapsView.tsx:597", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/MapsView.tsx:597"}, "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-f790a45cff341033", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/AttachmentFieldInput.tsx:227", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/AttachmentFieldInput.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-047813097ba899e9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/FieldFilterPopover.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/FieldFilterPopover.tsx:88"}, "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-4207e21f5594102d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DuplicateWarningModal.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DuplicateWarningModal.tsx:89"}, "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-5b6513b63318c1ea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ViewEditor.tsx:343", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ViewEditor.tsx:343"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e505366fa28af07", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/SectionMirrorComparison.tsx:232", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/SectionMirrorComparison.tsx:232"}, "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-3574f1b53a6554f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ViewSelector.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ViewSelector.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd58c8d78125543e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/UnitPickerField.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/UnitPickerField.tsx:207"}, "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-256837d60fd89bee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/GenerationsGallery.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/GenerationsGallery.tsx:94"}, "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-bb85058a170e1ece", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/AdvancedFilterPanel.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/AdvancedFilterPanel.tsx:219"}, "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-1edd1100f06b12e6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ResearchViewEditor.tsx:355", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ResearchViewEditor.tsx:355"}, "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-5bd6a0be04c03716", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DriveFieldInputs.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DriveFieldInputs.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09f46fdfa789bc55", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DynamicCell.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DynamicCell.tsx:96"}, "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-059746b4a3354bb6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/MultiSelect.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/MultiSelect.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-a57318d430864f2c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DriveCells.tsx:226", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DriveCells.tsx:226"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6e2b571ee826c03", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/TemplatesPickerModal.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/TemplatesPickerModal.tsx:171"}, "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-bb79d6424a448fdd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/SectionBlock.tsx:434", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/SectionBlock.tsx:434"}, "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-00028b8e4be49971", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/RelatedModelTable.tsx:334", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/RelatedModelTable.tsx:334"}, "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-8842a6a2cf29544d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DynamicField.tsx:901", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DynamicField.tsx:901"}, "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-b22c364025e48886", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DropdownSelect.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DropdownSelect.tsx:154"}, "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-6fd9b5fc06f1f8e3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home/HomePage.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home/HomePage.tsx:150"}, "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-0e89e5f1c281d788", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/AuditLogPage.tsx:269", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/AuditLogPage.tsx:269"}, "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-984e9815268c71b3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/TranslationSettingsPage.tsx:506", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/TranslationSettingsPage.tsx:506"}, "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-ff7585cba979c289", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/MenuArrangementPage.tsx:631", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/MenuArrangementPage.tsx:631"}, "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-7f2d23f5211345f5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/ProjectDetailsListPage.tsx:337", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/ProjectDetailsListPage.tsx:337"}, "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-ed595adf0b2f4a50", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/WebhookSlugsPage.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/WebhookSlugsPage.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-d7af14f00ddfd1fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/WhatsAppNumbersPage.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/WhatsAppNumbersPage.tsx:210"}, "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-162c26bbdcfd4ebb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/components/PermissionMatrix.tsx:283", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/components/PermissionMatrix.tsx:283"}, "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-a9f96a18de423fdc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/DecksPage.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/DecksPage.tsx:107"}, "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-c4485f3a5fee46a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/components/PickFromFilesModal.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/components/PickFromFilesModal.tsx:152"}, "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-c0b6a88104d09075", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/components/DeckRightPane.tsx:720", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/components/DeckRightPane.tsx:720"}, "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-31c78674c121d49e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Whiteboard/WhiteboardListPage.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Whiteboard/WhiteboardListPage.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b4c27b7a5650c0c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/DataMigrationPage.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/DataMigrationPage.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8c2d33bc26b81c2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/MigrationWizard.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/MigrationWizard.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98c59ba280ca07d6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/ValueStandardizationColumn.tsx:9", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/ValueStandardizationColumn.tsx:96"}, "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-517e8661fefc942b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepPickModel.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepPickModel.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d18b27613c6aaca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepUpload.tsx:308", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepUpload.tsx:308"}, "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-905878c960c01308", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepMapping.tsx:115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepMapping.tsx:115"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f234243337035ec", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/ChatTemplateFormPage.tsx:298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/ChatTemplateFormPage.tsx:298"}, "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-ed3ea80ae4eb7b78", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ChatDetail.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ChatDetail.tsx:91"}, "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-0d16e2a7f2f8b76d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ChatList.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ChatList.tsx:248"}, "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-c27b4d50a0e6bd6b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/MessageBubble.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/MessageBubble.tsx:41"}, "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-d0320c63bb9c0512", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ProjectMessageGeneratorModal.tsx:303", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ProjectMessageGeneratorModal.tsx:303"}, "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-84d87c44540c978b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/Composer.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/Composer.tsx:257"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f48fc582707394a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ClientPicker.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ClientPicker.tsx:210"}, "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-215b482351e2a660", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/StartChatModal.tsx:202", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/StartChatModal.tsx:202"}, "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-ef39a8532450bb11", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/TemplatePickerModal.tsx:229", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/TemplatePickerModal.tsx:229"}, "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-1e009f9fdc248497", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PublicShare/PublicShareFilePage.tsx:290", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PublicShare/PublicShareFilePage.tsx:290"}, "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-49d224af7415c21e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/BuilderAgentPage.tsx:392", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/BuilderAgentPage.tsx:392"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4059bb7671a08939", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FieldEditor.tsx:2007", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FieldEditor.tsx:2007"}, "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-10774b034a9a5233", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FreezeModelModal.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FreezeModelModal.tsx:170"}, "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-1b1784651b079a0e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FieldTemplateCatalog.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FieldTemplateCatalog.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75d298f2c1e1ece5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/ModelList.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/ModelList.tsx:73"}, "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-44ebb0cb64de1a4e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/OptionsEditor.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/OptionsEditor.tsx:113"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd3ffee9b1b2aca0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/ImageChatsPage.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/ImageChatsPage.tsx:211"}, "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-e66ec270da2a1055", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/PromptLibraryButton.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/PromptLibraryButton.tsx:107"}, "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-dcd976566754a042", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/AssetLightbox.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/AssetLightbox.tsx:221"}, "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-653a76f391b1f819", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/StudioWorkspace.tsx:199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/StudioWorkspace.tsx:199"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f05ae3f8fe2b45ec", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/AddImageToRecordModal.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/AddImageToRecordModal.tsx:222"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f025b88b2fb7dc8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/ModelDropdown.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/ModelDropdown.tsx:98"}, "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-caa79185cc6ffee2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/BrandPresetDropdown.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/BrandPresetDropdown.tsx:58"}, "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-1b481b1b0fda2599", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowRunDetailPage.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowRunDetailPage.tsx:189"}, "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-38b4aab8f4d9ce3e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowListPage.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowListPage.tsx:118"}, "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-37917ce4f7ca77fa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowAgentPage.tsx:331", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowAgentPage.tsx:331"}, "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-afd1e69c2670ab99", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowLogsPage.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowLogsPage.tsx:218"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2262737771c682be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/components/ActionList.tsx:2148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/components/ActionList.tsx:2148"}, "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-6e251b6fd3945ef8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/ActionNode.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/ActionNode.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2df0555c45a61fe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/ConditionGroupNode.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/ConditionGroupNode.tsx:105"}, "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-c657a1069d421f4e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/BranchHeaderNode.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/BranchHeaderNode.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea3b6ca9cf6fc200", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/TriggerNode.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/TriggerNode.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-8af22c35d4c52554", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/CopywriterPage.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/CopywriterPage.tsx:110"}, "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-4a5d28e16a91b734", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/components/CopywriterThread.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/components/CopywriterThread.tsx:219"}, "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-88402a849bc4373e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/components/ReelScriptCard.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/components/ReelScriptCard.tsx:31"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b731f40eb0acc3a4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/BulkMoveModal.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/BulkMoveModal.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98db0b910f12023b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/MoveToFolderModal.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/MoveToFolderModal.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce3ec7b2387f3085", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/UploadDropzone.tsx:297", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/UploadDropzone.tsx:297"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36de9609bb5e8f74", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/FilesBreadcrumb.tsx:48", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/FilesBreadcrumb.tsx:48"}, "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-3d47fdf2aeb9bf81", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/ShareLinkModal.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/ShareLinkModal.tsx:107"}, "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-d983ec711933e25d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/PermissionsPanel.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/PermissionsPanel.tsx:192"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08eea87f54b81a4c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/DriveBrowserModal.tsx:803", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/DriveBrowserModal.tsx:803"}, "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-21ce29d70693961e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Logs/LogsPage.tsx:339", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Logs/LogsPage.tsx:339"}, "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-4d5ff9d6af5e6881", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AiAgent/AiAgentPage.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AiAgent/AiAgentPage.tsx:110"}, "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-dc5d2424ab9396f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AiAgent/components/AiChatThread.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AiAgent/components/AiChatThread.tsx:170"}, "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-b8bf9586b2b082b9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/LinkedRecordsModal.tsx:163", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/LinkedRecordsModal.tsx:163"}, "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-502bceb31da8bbae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/VersionHistoryModal.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/VersionHistoryModal.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-ccbb4cf218414295", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/Documents/components/VersionHistoryModal.tsx:238", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/Documents/components/VersionHistoryModal.tsx:238"}, "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-870812e14721e56a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/CommentsPanel.tsx:404", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/CommentsPanel.tsx:404"}, "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-0943f286f048071f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/CrmVariablesPopover.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/CrmVariablesPopover.tsx:79"}, "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-468058dbb59c39a2", "name": "Dockerfile runs as root: worker/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: worker/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a96264e268b4e48", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2b8c0f5e3068565", "name": "Dockerfile ADD downloads remote content without checksum", "shortDescription": {"text": "Dockerfile ADD downloads remote content without checksum"}, "fullDescription": {"text": "Remote build inputs can change or be replaced upstream. Use Dockerfile ADD --checksum or download with an explicit digest/signature verification step."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c4a615da5b208cdb", "name": "Insecure pattern 'node_child_process' in worker/src/runPreviewJob.ts:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in worker/src/runPreviewJob.ts: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-ff44310a14aab0b6", "name": "Insecure pattern 'node_child_process' in worker/src/pdfToImages.ts:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in worker/src/pdfToImages.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e393e31eb6c1b935", "name": "Insecure pattern 'node_child_process' in worker/src/runCompressJob.ts:21", "shortDescription": {"text": "Insecure pattern 'node_child_process' in worker/src/runCompressJob.ts:21"}, "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-009ad97fd09abea5", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-user/index.ts:42", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-user/index.ts:42"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3cd622dbe09bf1f6", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-user/index.ts:30", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-user/index.ts:30"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba0eeeed188d70f4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/project-details-ai-v2/index.ts:35", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/project-details-ai-v2/index.ts:35"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c172c431edbd06c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/inbox/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/inbox/index.ts:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-79054112d18aecc5", "name": "Insecure pattern 'document_write' in src/lib/documents/export.ts:162", "shortDescription": {"text": "Insecure pattern 'document_write' in src/lib/documents/export.ts:162"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ad447f24e0fa8f3", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/Documents/components/VersionHistoryModal.tsx:238", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/Documents/components/VersionHistoryModal.tsx:238"}, "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-0005f02ad6f2eec4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/Documents/components/DocumentEditor.tsx:75", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/Documents/components/DocumentEditor.tsx:75"}, "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-e0fb246346eeceda", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/Documents/components/MentionExtension.ts:169", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/Documents/components/MentionExtension.ts:169"}, "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-4bfeeec6106438f6", "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@v6 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-326933de5a70f9cc", "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-cb8153e7c43ba840", "name": "Very large file: api/_lib/builderAgent.ts (1453 lines)", "shortDescription": {"text": "Very large file: api/_lib/builderAgent.ts (1453 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-97564afcf6a3e22e", "name": "Very large file: src/types/index.ts (2288 lines)", "shortDescription": {"text": "Very large file: src/types/index.ts (2288 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-fd0d1c599b6f3f22", "name": "Very large file: src/stores/appStore.ts (4327 lines)", "shortDescription": {"text": "Very large file: src/stores/appStore.ts (4327 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-4dd6cdbe4e91c986", "name": "Very large file: src/lib/workflowEngine.ts (1289 lines)", "shortDescription": {"text": "Very large file: src/lib/workflowEngine.ts (1289 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-a66226619df44d8f", "name": "Very large file: src/lib/i18n.ts (1749 lines)", "shortDescription": {"text": "Very large file: src/lib/i18n.ts (1749 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-e02d7bd22537b877", "name": "Very large file: src/pages/Records/RecordFormPage.tsx (1529 lines)", "shortDescription": {"text": "Very large file: src/pages/Records/RecordFormPage.tsx (1529 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-646d3802c15bae5b", "name": "Very large file: src/pages/Builder/components/FieldEditor.tsx (2858 lines)", "shortDescription": {"text": "Very large file: src/pages/Builder/components/FieldEditor.tsx (2858 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-de1adfdd57377a43", "name": "Very large file: src/pages/Workflow/components/ActionList.tsx (2548 lines)", "shortDescription": {"text": "Very large file: src/pages/Workflow/components/ActionList.tsx (2548 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-47bb30924c853c3f", "name": "Very large file: src/pages/Files/FilesPage.tsx (1360 lines)", "shortDescription": {"text": "Very large file: src/pages/Files/FilesPage.tsx (1360 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "10 test file(s) for 413 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 167 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 295 placeholder/mock markers across 108 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 license. 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-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.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-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-658a686c823ea44b", "name": "Commented-code block (5 lines) in vite.config.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in vite.config.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3a1f1ab9ae02fec", "name": "Commented-code block (7 lines) in api/copywriter.ts:142", "shortDescription": {"text": "Commented-code block (7 lines) in api/copywriter.ts:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7bd5f451a4374eb", "name": "Commented-code block (9 lines) in api/generate-deck.ts:118", "shortDescription": {"text": "Commented-code block (9 lines) in api/generate-deck.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b310c9a1df40a9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/generate-deck.ts:163", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/generate-deck.ts:163"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3916f9fe0d5dd385", "name": "Commented-code block (6 lines) in api/research-project.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in api/research-project.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe8b5a03d0d51868", "name": "Commented-code block (6 lines) in api/sweep-due-followups.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in api/sweep-due-followups.ts: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-9bb6b7009f8e7cd0", "name": "Commented-code block (5 lines) in api/run-button-workflow.ts:164", "shortDescription": {"text": "Commented-code block (5 lines) in api/run-button-workflow.ts:164"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00b6d4d9036a272e", "name": "Commented-code block (7 lines) in api/webhook/hatif-call.ts:270", "shortDescription": {"text": "Commented-code block (7 lines) in api/webhook/hatif-call.ts:270"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-135264286a5b4c1d", "name": "Commented-code block (6 lines) in api/webhook/haberchat.ts:42", "shortDescription": {"text": "Commented-code block (6 lines) in api/webhook/haberchat.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9371af32cfaa1581", "name": "Commented-code block (5 lines) in api/templates/generate-from-description.ts:169", "shortDescription": {"text": "Commented-code block (5 lines) in api/templates/generate-from-description.ts:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2aca62e4b6f85445", "name": "Commented-code block (5 lines) in api/image-chat/promote-asset.ts:184", "shortDescription": {"text": "Commented-code block (5 lines) in api/image-chat/promote-asset.ts:184"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74c0b3da51d21d34", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/icons/generate.ts:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/icons/generate.ts:211"}, "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-b5b4a9b8a0141ffa", "name": "Commented-code block (5 lines) in api/share/view.ts:84", "shortDescription": {"text": "Commented-code block (5 lines) in api/share/view.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5161cafbea618951", "name": "Commented-code block (8 lines) in api/_lib/migrateAgent.ts:693", "shortDescription": {"text": "Commented-code block (8 lines) in api/_lib/migrateAgent.ts:693"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9318fd5fc6b5cfcf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lib/paseetRunner.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lib/paseetRunner.ts:53"}, "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-0c1d32f9c695c598", "name": "Commented-code block (5 lines) in api/_lib/hatif.ts:185", "shortDescription": {"text": "Commented-code block (5 lines) in api/_lib/hatif.ts:185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1ae852aa8e9d69d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lib/hatif.ts:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lib/hatif.ts:95"}, "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-d4c1accbd56c35b7", "name": "Commented-code block (5 lines) in api/_lib/workflowSweeper.ts:410", "shortDescription": {"text": "Commented-code block (5 lines) in api/_lib/workflowSweeper.ts:410"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e4517affe784672", "name": "Commented-code block (5 lines) in api/_lib/haberchat.ts:503", "shortDescription": {"text": "Commented-code block (5 lines) in api/_lib/haberchat.ts:503"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f76828b0fc28504", "name": "Commented-code block (5 lines) in api/_lib/activityLogger.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in api/_lib/activityLogger.ts:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5f9666f418f2feb", "name": "Commented-code block (5 lines) in api/_lib/builderAgent.ts:1372", "shortDescription": {"text": "Commented-code block (5 lines) in api/_lib/builderAgent.ts:1372"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5872b4d14dd9beda", "name": "Commented-code block (6 lines) in api/_lib/aiAgent.ts:228", "shortDescription": {"text": "Commented-code block (6 lines) in api/_lib/aiAgent.ts:228"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a52e735afac6c180", "name": "Commented-code block (5 lines) in api/_lib/copywriterAgent.ts:481", "shortDescription": {"text": "Commented-code block (5 lines) in api/_lib/copywriterAgent.ts:481"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43cab16f482ce106", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-paseet-chat.mjs:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-paseet-chat.mjs:24"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-50174d87329e8233", "name": "Commented-code block (6 lines) in scripts/paseet-context-setup.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/paseet-context-setup.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77c5a5d82582b7d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/paseet-context-setup.mjs:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/paseet-context-setup.mjs:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fbc12409aab239f3", "name": "Commented-code block (6 lines) in scripts/upload-wassel-skill.mjs:58", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/upload-wassel-skill.mjs:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bb835b0a993f0fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-paseet.mjs:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-paseet.mjs:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb52be5d4e765071", "name": "Commented-code block (5 lines) in worker/src/runPreviewJob.ts:130", "shortDescription": {"text": "Commented-code block (5 lines) in worker/src/runPreviewJob.ts:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4cf8b557c699751", "name": "Commented-code block (6 lines) in worker/src/env.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in worker/src/env.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2bbe6cfc1b0c390", "name": "Commented-code block (6 lines) in worker/src/runDeckJob.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in worker/src/runDeckJob.ts: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-fc52c02320523c8b", "name": "Commented-code block (10 lines) in supabase/functions/delete-user/index.ts:5", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/delete-user/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-255ba29ed206ee74", "name": "Commented-code block (7 lines) in supabase/functions/invite-user/index.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/invite-user/index.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-175de2f58a5af7cd", "name": "Commented-code block (6 lines) in supabase/functions/project-details-ai-v2/index.ts:19", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/project-details-ai-v2/index.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-8e092271c0cd4ce1", "name": "Commented-code block (9 lines) in supabase/functions/inbox/index.ts:6", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/inbox/index.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fef1df8a5c15abe", "name": "Commented-code block (5 lines) in supabase/functions/_shared/supabase.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/supabase.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c533dfc5a072384a", "name": "Commented-code block (5 lines) in supabase/functions/_shared/webhookOutbox.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/webhookOutbox.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b266c7450b68ca91", "name": "Commented-code block (5 lines) in src/App.tsx:172", "shortDescription": {"text": "Commented-code block (5 lines) in src/App.tsx:172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3350b47057f980b0", "name": "Commented-code block (6 lines) in src/types/index.ts:87", "shortDescription": {"text": "Commented-code block (6 lines) in src/types/index.ts:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29eb36673d80e1a7", "name": "Commented-code block (9 lines) in src/stores/appStore.ts:156", "shortDescription": {"text": "Commented-code block (9 lines) in src/stores/appStore.ts:156"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f05735709df7f6a", "name": "Commented-code block (8 lines) in src/lib/excelUtils.ts:240", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/excelUtils.ts:240"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f467417e74fba948", "name": "Commented-code block (7 lines) in src/lib/auth.ts:99", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/auth.ts:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f69de6fd4e6a9b4", "name": "Commented-code block (6 lines) in src/lib/permissions.ts:230", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/permissions.ts:230"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5da911105dbfcae", "name": "Commented-code block (5 lines) in src/lib/fieldFallbackResolver.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/fieldFallbackResolver.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a746a7a4b305e95", "name": "Commented-code block (7 lines) in src/lib/similarity.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/similarity.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70a8b248d1a31447", "name": "Commented-code block (6 lines) in src/lib/autoIdAssigner.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/autoIdAssigner.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5caa0e0baa84ff1d", "name": "Commented-code block (7 lines) in src/lib/formulaEngine.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/formulaEngine.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03efee34f6e2c46e", "name": "Commented-code block (9 lines) in src/lib/projectMessageFacts.ts:6", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/projectMessageFacts.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6f4c611c5f2c4aa", "name": "Commented-code block (5 lines) in src/lib/imageUpload.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/imageUpload.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f5c3b032ae90e8b", "name": "Commented-code block (7 lines) in src/lib/projectDetailsAi.ts:85", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/projectDetailsAi.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-6f723df8926f1c04", "name": "Commented-code block (5 lines) in src/lib/recordSort.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/recordSort.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25ab443c4c21185a", "name": "Commented-code block (7 lines) in src/lib/workflowEngine.ts:226", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/workflowEngine.ts:226"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63ffe9ff09a40151", "name": "Legacy-named symbol `__legacy` in src/lib/workflowEngineCore.ts:234", "shortDescription": {"text": "Legacy-named symbol `__legacy` in src/lib/workflowEngineCore.ts:234"}, "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-1017a4fb7346ea28", "name": "Commented-code block (14 lines) in src/lib/fieldRename.ts:5", "shortDescription": {"text": "Commented-code block (14 lines) in src/lib/fieldRename.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4944f0f0d4afcb1", "name": "Commented-code block (6 lines) in src/lib/schemaMigrations.ts:86", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/schemaMigrations.ts:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ec764da15c81c53", "name": "Commented-code block (6 lines) in src/lib/recordsCache.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/recordsCache.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2c4dfcc6904d0f2", "name": "Commented-code block (5 lines) in src/lib/__tests__/projectMessageFacts.test.ts:145", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/projectMessageFacts.test.ts:145"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46d4bf0ff10813f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/decks/client.ts:154", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/decks/client.ts:154"}, "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-77c556026531fb63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/assets/promote.ts:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/assets/promote.ts:50"}, "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-5d3498eb63c24e9c", "name": "Commented-code block (7 lines) in src/lib/files/client.ts:218", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/files/client.ts:218"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-131b7b05ea2a8535", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/imageChat/client.ts:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/imageChat/client.ts:164"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2866890de1185d2b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/haberchat/client.ts:165", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/haberchat/client.ts:165"}, "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-2b228605fb2591e3", "name": "Commented-code block (9 lines) in src/lib/realtime/dedup.ts:9", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/realtime/dedup.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fb05e91813cae96", "name": "Commented-code block (5 lines) in src/lib/realtime/RealtimeOrchestrator.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/realtime/RealtimeOrchestrator.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a73848260ea13e0a", "name": "Commented-code block (8 lines) in src/lib/realtime/mergeHandlers.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/realtime/mergeHandlers.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8532aa1f85797292", "name": "Commented-code block (6 lines) in src/pages/Records/RecordListPage.tsx:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Records/RecordListPage.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f8f8a7b35932bcb", "name": "Commented-code block (6 lines) in src/pages/Records/RecordFormPage.tsx:87", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Records/RecordFormPage.tsx:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc043edd4904fc6f", "name": "Commented-code block (6 lines) in src/pages/Records/components/MapsView.tsx:320", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Records/components/MapsView.tsx:320"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aae513bad40c1811", "name": "Commented-code block (7 lines) in src/pages/Records/components/CallHistoryPanel.tsx:46", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/Records/components/CallHistoryPanel.tsx:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c78188a7035636b6", "name": "Commented-code block (6 lines) in src/pages/Records/components/LookupCombobox.tsx:32", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Records/components/LookupCombobox.tsx:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2a0ba1b05f439e5", "name": "Commented-code block (8 lines) in src/pages/Records/components/ViewEditor.tsx:83", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/Records/components/ViewEditor.tsx:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bee402294f7cbec", "name": "Commented-code block (8 lines) in src/pages/Records/components/TableView.tsx:643", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/Records/components/TableView.tsx:643"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58ba43c21801e2c1", "name": "Commented-code block (6 lines) in src/pages/Records/components/ViewSelector.tsx:47", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Records/components/ViewSelector.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-beff34a6b7608f4e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Records/components/IconPickerModal.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Records/components/IconPickerModal.tsx:84"}, "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-dea503ba6aa84bf3", "name": "Commented-code block (5 lines) in src/pages/Records/components/TableField.tsx:264", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Records/components/TableField.tsx:264"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d1eef95c8f4c121", "name": "Commented-code block (13 lines) in src/pages/Records/components/BulkEditModal.tsx:106", "shortDescription": {"text": "Commented-code block (13 lines) in src/pages/Records/components/BulkEditModal.tsx:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd504ae28ae30416", "name": "Legacy-named symbol `isLegacy` in src/pages/Records/components/DriveFieldInputs.tsx:167", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in src/pages/Records/components/DriveFieldInputs.tsx:167"}, "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-f6b043a409efc3cd", "name": "Commented-code block (6 lines) in src/pages/Records/components/MultiSelect.tsx:136", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Records/components/MultiSelect.tsx:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2ff19ddc31ea8e2", "name": "Commented-code block (5 lines) in src/pages/Records/components/ImportModal.tsx:80", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Records/components/ImportModal.tsx:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f8bfaf352b4b5e1", "name": "Legacy-named symbol `isLegacy` in src/pages/Records/components/DriveCells.tsx:129", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in src/pages/Records/components/DriveCells.tsx:129"}, "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-b33cdce8a017c54a", "name": "Commented-code block (10 lines) in src/pages/Records/components/SectionBlock.tsx:335", "shortDescription": {"text": "Commented-code block (10 lines) in src/pages/Records/components/SectionBlock.tsx:335"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fe9cb864ba80df0", "name": "Commented-code block (5 lines) in src/pages/Records/components/DynamicField.tsx:630", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Records/components/DynamicField.tsx:630"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65129e0aa54af852", "name": "Commented-code block (5 lines) in src/pages/Records/hooks/useAutoLink.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Records/hooks/useAutoLink.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-917532bcdcfba8e2", "name": "Commented-code block (5 lines) in src/pages/Settings/UsersPage.tsx:66", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Settings/UsersPage.tsx:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba981188bc006c77", "name": "Commented-code block (9 lines) in src/pages/Settings/TranslationSettingsPage.tsx:38", "shortDescription": {"text": "Commented-code block (9 lines) in src/pages/Settings/TranslationSettingsPage.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f3a9dda5bd42ca2", "name": "Commented-code block (5 lines) in src/pages/Settings/ProjectDetailsBridgePage.tsx:75", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Settings/ProjectDetailsBridgePage.tsx:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73d7ad6f928583ee", "name": "Commented-code block (7 lines) in src/pages/Whiteboard/WhiteboardEditorPage.tsx:49", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/Whiteboard/WhiteboardEditorPage.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd1d4fbaca874e38", "name": "Commented-code block (5 lines) in src/pages/Chats/components/MessageBubble.tsx:94", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Chats/components/MessageBubble.tsx:94"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a31ddd165fa52fdf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Chats/components/MessageBubble.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Chats/components/MessageBubble.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-292bc1787748daef", "name": "Commented-code block (5 lines) in src/pages/Chats/components/ProjectMessageGeneratorModal.tsx:115", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Chats/components/ProjectMessageGeneratorModal.tsx: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-3ea71495bda9aacd", "name": "Commented-code block (5 lines) in src/pages/Builder/BuilderAgentPage.tsx:24", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Builder/BuilderAgentPage.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abc9619db9a75566", "name": "Commented-code block (6 lines) in src/pages/Builder/components/FieldEditor.tsx:199", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Builder/components/FieldEditor.tsx:199"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-493727f29d211f61", "name": "Commented-code block (6 lines) in src/pages/Builder/components/SectionManager.tsx:169", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Builder/components/SectionManager.tsx:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d9af8785eeada9e", "name": "Commented-code block (6 lines) in src/pages/Builder/components/CustomButtonsTab.tsx:94", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Builder/components/CustomButtonsTab.tsx:94"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c8eb51f497e10d0", "name": "Commented-code block (5 lines) in src/pages/Builder/components/OptionsEditor.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Builder/components/OptionsEditor.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23949e82bbeb5b59", "name": "Commented-code block (7 lines) in src/pages/Builder/components/MapsBuilder.tsx:49", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/Builder/components/MapsBuilder.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4d4222204b12fdd", "name": "Commented-code block (6 lines) in src/pages/Workflow/components/FieldValueInput.tsx:69", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Workflow/components/FieldValueInput.tsx:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d871935f47bc3f07", "name": "Commented-code block (7 lines) in src/pages/Workflow/components/ActionList.tsx:1775", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/Workflow/components/ActionList.tsx:1775"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f1e6ce2454fd585", "name": "Commented-code block (10 lines) in src/pages/Workflow/canvas/workflowToGraph.ts:40", "shortDescription": {"text": "Commented-code block (10 lines) in src/pages/Workflow/canvas/workflowToGraph.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f339dd1d2d470c11", "name": "Commented-code block (6 lines) in src/pages/Workflow/canvas/WorkflowCanvas.tsx:74", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Workflow/canvas/WorkflowCanvas.tsx:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5cb21484f43616e", "name": "Commented-code block (5 lines) in src/pages/Workflow/canvas/AddNodeMenu.tsx:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Workflow/canvas/AddNodeMenu.tsx:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53b4c2c7cb3916a1", "name": "Commented-code block (6 lines) in src/pages/Workflow/canvas/NodeDrawer.tsx:91", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Workflow/canvas/NodeDrawer.tsx:91"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfafd3bcf1e6b548", "name": "Commented-code block (5 lines) in src/pages/Workflow/canvas/nodes/ConditionGroupNode.tsx:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Workflow/canvas/nodes/ConditionGroupNode.tsx:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce52273cf1f950b8", "name": "Commented-code block (5 lines) in src/pages/Workflow/canvas/nodes/BranchHeaderNode.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Workflow/canvas/nodes/BranchHeaderNode.tsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac46fb19265484bd", "name": "Commented-code block (5 lines) in src/pages/Files/useFilesSelection.ts:148", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Files/useFilesSelection.ts:148"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1307f3ebc19cfeb2", "name": "Commented-code block (8 lines) in src/pages/Files/FilesPage.tsx:154", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/Files/FilesPage.tsx:154"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2af70e6d51dfbfdf", "name": "Commented-code block (5 lines) in src/pages/Files/components/FilePreviewModal.tsx:105", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Files/components/FilePreviewModal.tsx:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c80657f53589a34", "name": "Commented-code block (5 lines) in src/pages/Documents/DocumentEditorPage.tsx:685", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Documents/DocumentEditorPage.tsx:685"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9d27cf9dfb3b6f3", "name": "Commented-code block (7 lines) in src/pages/Documents/components/DocumentEditor.tsx:271", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/Documents/components/DocumentEditor.tsx:271"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20b7360c4d010393", "name": "Commented-code block (7 lines) in src/pages/Documents/components/MentionExtension.ts:68", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/Documents/components/MentionExtension.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-446c461e6fdad5b6", "name": "Commented-code block (7 lines) in src/hooks/useResolvedLocations.ts:42", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useResolvedLocations.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59b992d62d86a65a", "name": "25 env vars used in code but missing from .env.example", "shortDescription": {"text": "25 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_BASE_URL`, `ANTHROPIC_WASSEL_REVIEW_SKILL_ID`, `ANTHROPIC_WASSEL_SKILL_ID`, `BROWSERBASE_API_KEY`, `BROWSERBASE_PROJECT_ID`, `CRON_SECRET`, `DEBUG_MODEL`, `DEBUG_USER_BRIEF` + 17 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d674fedc105a40b0", "name": "Frontend route `/auth/reset-password` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/auth/reset-password` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3b93ccde8a4767ee", "name": "Frontend route `/public/dashboard/:token` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/public/dashboard/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1ada464e89525af", "name": "Frontend route `/share/:token` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/share/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12bc59d0d184d656", "name": "Frontend route `/files/doc/:fileId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/files/doc/:fileId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c86b72b48d13a7b", "name": "Frontend route `/files/:folderId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/files/:folderId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad1c58330b9866cf", "name": "Frontend route `/model/:modelName` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/model/:modelName` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a37b131f20feed91", "name": "Frontend route `/model/:modelName/new` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/model/:modelName/new` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0928d59328c5dcba", "name": "Frontend route `/model/:modelName/:recordId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/model/:modelName/:recordId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a5e507dd6c9b14c", "name": "Frontend route `/builder/:modelId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/builder/:modelId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-939bbe7a71e366cd", "name": "Frontend route `/workflow/logs/:runId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/workflow/logs/:runId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a973cd07260e0305", "name": "Frontend route `/workflow/:workflowId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/workflow/:workflowId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52ce0e125958264e", "name": "Frontend route `/dashboards/:dashboardId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/dashboards/:dashboardId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9da5e92249c6ffe", "name": "Frontend route `/whiteboard/:boardId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/whiteboard/:boardId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57e121bb0ee3735c", "name": "Frontend route `/settings/profiles/:profileId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/settings/profiles/:profileId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e7aec62c201efb92", "name": "Frontend route `/settings/roles/:roleId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/settings/roles/:roleId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8cae9c89774ccd19", "name": "Frontend route `/settings/project-details/:projectId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/settings/project-details/:projectId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22554"}, "properties": {"repository": "wasselre/wassell-claude-code", "repoUrl": "https://github.com/wasselre/wassell-claude-code", "branch": "main"}, "results": [{"ruleId": "scanner-639ed6af99a8343d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/copywriter.ts:117"}, "properties": {"repobilityId": "42d5cf61987905f6", "scanner": "scanner-primary", "fingerprint": "639ed6af99a8343d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-02a503eda8eaa05d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/generate-deck.ts:150"}, "properties": {"repobilityId": "0678512166d54c1a", "scanner": "scanner-primary", "fingerprint": "02a503eda8eaa05d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-823b87ad52d0570d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/agent.ts:118"}, "properties": {"repobilityId": "10e5d2e2ad28ff76", "scanner": "scanner-primary", "fingerprint": "823b87ad52d0570d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c36f2d0bce3678af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/image-chat/generate.ts:318"}, "properties": {"repobilityId": "1358dc7eeef09508", "scanner": "scanner-primary", "fingerprint": "c36f2d0bce3678af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3bf671a0a5f7a890", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/image-chat/send.ts:508"}, "properties": {"repobilityId": "8a7924011ed58995", "scanner": "scanner-primary", "fingerprint": "3bf671a0a5f7a890", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7d18029311f8b4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/_lib/aiAgent.ts:279"}, "properties": {"repobilityId": "3b341fec74a5ebd5", "scanner": "scanner-primary", "fingerprint": "a7d18029311f8b4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e835e74ec41d88b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runPreviewJob.ts:83"}, "properties": {"repobilityId": "648e4ff628a7a373", "scanner": "scanner-primary", "fingerprint": "e835e74ec41d88b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29fe36abe7e345ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runImageJob.ts:220"}, "properties": {"repobilityId": "1927406f0016b92a", "scanner": "scanner-primary", "fingerprint": "29fe36abe7e345ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9b1bc4ef33d9756", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 worker/src/env.ts:24"}, "properties": {"repobilityId": "a4568f92f7fd4870", "scanner": "scanner-primary", "fingerprint": "e9b1bc4ef33d9756", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5b10288e2cd295e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runDeckJob.ts:340"}, "properties": {"repobilityId": "7e7a5aba0b5442b8", "scanner": "scanner-primary", "fingerprint": "5b10288e2cd295e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c89073af1374513", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/index.ts:90"}, "properties": {"repobilityId": "9d920df95db5924f", "scanner": "scanner-primary", "fingerprint": "7c89073af1374513", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb305c61eceadd79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/runCompressJob.ts:89"}, "properties": {"repobilityId": "da07632f11161f7b", "scanner": "scanner-primary", "fingerprint": "bb305c61eceadd79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56ec293f4eae3102", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/appStore.ts:525"}, "properties": {"repobilityId": "84c0742f3f50303b", "scanner": "scanner-primary", "fingerprint": "56ec293f4eae3102", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed243ec06597a338", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:430"}, "properties": {"repobilityId": "be1152cdf47927a8", "scanner": "scanner-primary", "fingerprint": "ed243ec06597a338", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-033e875405c37c0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Header.tsx:92"}, "properties": {"repobilityId": "c848c722ce61f0cc", "scanner": "scanner-primary", "fingerprint": "033e875405c37c0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c7cfe85c3265007", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Templates/TemplatesLibraryPage.tsx:185"}, "properties": {"repobilityId": "b880bde1fde86ee4", "scanner": "scanner-primary", "fingerprint": "9c7cfe85c3265007", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f9b2c1bc560e1b5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard/DashboardEditorPage.tsx:164"}, "properties": {"repobilityId": "4c401e5051bf154d", "scanner": "scanner-primary", "fingerprint": "0f9b2c1bc560e1b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cede6b22099983a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/MapsView.tsx:597"}, "properties": {"repobilityId": "bc5793979d2b456b", "scanner": "scanner-primary", "fingerprint": "1cede6b22099983a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f790a45cff341033", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/AttachmentFieldInput.tsx:227"}, "properties": {"repobilityId": "622f59abec88d0ca", "scanner": "scanner-primary", "fingerprint": "f790a45cff341033", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-047813097ba899e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/FieldFilterPopover.tsx:88"}, "properties": {"repobilityId": "d9e4610a0fe128cf", "scanner": "scanner-primary", "fingerprint": "047813097ba899e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4207e21f5594102d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DuplicateWarningModal.tsx:89"}, "properties": {"repobilityId": "62410205240572b9", "scanner": "scanner-primary", "fingerprint": "4207e21f5594102d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b6513b63318c1ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ViewEditor.tsx:343"}, "properties": {"repobilityId": "d72553dcfde338cf", "scanner": "scanner-primary", "fingerprint": "5b6513b63318c1ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e505366fa28af07", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/SectionMirrorComparison.tsx:232"}, "properties": {"repobilityId": "8ef4ee1ba7ff2027", "scanner": "scanner-primary", "fingerprint": "8e505366fa28af07", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3574f1b53a6554f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ViewSelector.tsx:117"}, "properties": {"repobilityId": "1009e7a043b49668", "scanner": "scanner-primary", "fingerprint": "3574f1b53a6554f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd58c8d78125543e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/UnitPickerField.tsx:207"}, "properties": {"repobilityId": "2d3b80f48d7f3af5", "scanner": "scanner-primary", "fingerprint": "bd58c8d78125543e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-256837d60fd89bee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/GenerationsGallery.tsx:94"}, "properties": {"repobilityId": "492759f777808d22", "scanner": "scanner-primary", "fingerprint": "256837d60fd89bee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb85058a170e1ece", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/AdvancedFilterPanel.tsx:219"}, "properties": {"repobilityId": "78f7d1a3c7594307", "scanner": "scanner-primary", "fingerprint": "bb85058a170e1ece", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1edd1100f06b12e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/ResearchViewEditor.tsx:355"}, "properties": {"repobilityId": "0d22700d76751808", "scanner": "scanner-primary", "fingerprint": "1edd1100f06b12e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5bd6a0be04c03716", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DriveFieldInputs.tsx:106"}, "properties": {"repobilityId": "c5adcf9ecb404eac", "scanner": "scanner-primary", "fingerprint": "5bd6a0be04c03716", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-09f46fdfa789bc55", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DynamicCell.tsx:96"}, "properties": {"repobilityId": "b3f14774be195ea0", "scanner": "scanner-primary", "fingerprint": "09f46fdfa789bc55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-059746b4a3354bb6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/MultiSelect.tsx:178"}, "properties": {"repobilityId": "053187b1ea9217b0", "scanner": "scanner-primary", "fingerprint": "059746b4a3354bb6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a57318d430864f2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DriveCells.tsx:226"}, "properties": {"repobilityId": "ea9d9bb2b11ba0a0", "scanner": "scanner-primary", "fingerprint": "a57318d430864f2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6e2b571ee826c03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/TemplatesPickerModal.tsx:171"}, "properties": {"repobilityId": "273d1ca3e1d998c5", "scanner": "scanner-primary", "fingerprint": "d6e2b571ee826c03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb79d6424a448fdd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/SectionBlock.tsx:434"}, "properties": {"repobilityId": "7f74bf9637b02e60", "scanner": "scanner-primary", "fingerprint": "bb79d6424a448fdd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-00028b8e4be49971", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/RelatedModelTable.tsx:334"}, "properties": {"repobilityId": "42ed898457d603e0", "scanner": "scanner-primary", "fingerprint": "00028b8e4be49971", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8842a6a2cf29544d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DynamicField.tsx:901"}, "properties": {"repobilityId": "26797160879a2182", "scanner": "scanner-primary", "fingerprint": "8842a6a2cf29544d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b22c364025e48886", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Records/components/DropdownSelect.tsx:154"}, "properties": {"repobilityId": "f57290342c168d04", "scanner": "scanner-primary", "fingerprint": "b22c364025e48886", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6fd9b5fc06f1f8e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home/HomePage.tsx:150"}, "properties": {"repobilityId": "72252b2a97d28866", "scanner": "scanner-primary", "fingerprint": "6fd9b5fc06f1f8e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e89e5f1c281d788", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/AuditLogPage.tsx:269"}, "properties": {"repobilityId": "1fb6c57130cf8813", "scanner": "scanner-primary", "fingerprint": "0e89e5f1c281d788", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-984e9815268c71b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/TranslationSettingsPage.tsx:506"}, "properties": {"repobilityId": "25c412afefd5fb50", "scanner": "scanner-primary", "fingerprint": "984e9815268c71b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff7585cba979c289", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/MenuArrangementPage.tsx:631"}, "properties": {"repobilityId": "b4f0605a48606beb", "scanner": "scanner-primary", "fingerprint": "ff7585cba979c289", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f2d23f5211345f5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/ProjectDetailsListPage.tsx:337"}, "properties": {"repobilityId": "fca77a86ba3393f6", "scanner": "scanner-primary", "fingerprint": "7f2d23f5211345f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed595adf0b2f4a50", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/WebhookSlugsPage.tsx:158"}, "properties": {"repobilityId": "a19e683899be9441", "scanner": "scanner-primary", "fingerprint": "ed595adf0b2f4a50", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d7af14f00ddfd1fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/WhatsAppNumbersPage.tsx:210"}, "properties": {"repobilityId": "d97c5fa3454da498", "scanner": "scanner-primary", "fingerprint": "d7af14f00ddfd1fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-162c26bbdcfd4ebb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings/components/PermissionMatrix.tsx:283"}, "properties": {"repobilityId": "fa871c20ed50f6a8", "scanner": "scanner-primary", "fingerprint": "162c26bbdcfd4ebb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9f96a18de423fdc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/DecksPage.tsx:107"}, "properties": {"repobilityId": "130521b172e3c249", "scanner": "scanner-primary", "fingerprint": "a9f96a18de423fdc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4485f3a5fee46a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/components/PickFromFilesModal.tsx:152"}, "properties": {"repobilityId": "41aaf757056cea32", "scanner": "scanner-primary", "fingerprint": "c4485f3a5fee46a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c0b6a88104d09075", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Decks/components/DeckRightPane.tsx:720"}, "properties": {"repobilityId": "d60262eb08080638", "scanner": "scanner-primary", "fingerprint": "c0b6a88104d09075", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-31c78674c121d49e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Whiteboard/WhiteboardListPage.tsx:77"}, "properties": {"repobilityId": "454bf6675813e2ee", "scanner": "scanner-primary", "fingerprint": "31c78674c121d49e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b4c27b7a5650c0c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/DataMigrationPage.tsx:127"}, "properties": {"repobilityId": "0c0eca6a6dcf9f98", "scanner": "scanner-primary", "fingerprint": "3b4c27b7a5650c0c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a8c2d33bc26b81c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/MigrationWizard.tsx:70"}, "properties": {"repobilityId": "c35cd4f6fd43ba71", "scanner": "scanner-primary", "fingerprint": "a8c2d33bc26b81c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98c59ba280ca07d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/ValueStandardizationColumn.tsx:96"}, "properties": {"repobilityId": "c9c05d218997376b", "scanner": "scanner-primary", "fingerprint": "98c59ba280ca07d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-517e8661fefc942b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepPickModel.tsx:44"}, "properties": {"repobilityId": "570df01a1645395d", "scanner": "scanner-primary", "fingerprint": "517e8661fefc942b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8d18b27613c6aaca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepUpload.tsx:308"}, "properties": {"repobilityId": "adb5b32c10fad429", "scanner": "scanner-primary", "fingerprint": "8d18b27613c6aaca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-905878c960c01308", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/DataMigration/components/steps/StepMapping.tsx:115"}, "properties": {"repobilityId": "46b284c569b69815", "scanner": "scanner-primary", "fingerprint": "905878c960c01308", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f234243337035ec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/ChatTemplateFormPage.tsx:298"}, "properties": {"repobilityId": "f6d98fc233a30dd7", "scanner": "scanner-primary", "fingerprint": "9f234243337035ec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed3ea80ae4eb7b78", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ChatDetail.tsx:91"}, "properties": {"repobilityId": "3ffdc6a86575529b", "scanner": "scanner-primary", "fingerprint": "ed3ea80ae4eb7b78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d16e2a7f2f8b76d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ChatList.tsx:248"}, "properties": {"repobilityId": "2502751ea2fcd60c", "scanner": "scanner-primary", "fingerprint": "0d16e2a7f2f8b76d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c27b4d50a0e6bd6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/MessageBubble.tsx:41"}, "properties": {"repobilityId": "dae423fcb5e84465", "scanner": "scanner-primary", "fingerprint": "c27b4d50a0e6bd6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d0320c63bb9c0512", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ProjectMessageGeneratorModal.tsx:303"}, "properties": {"repobilityId": "8fd35a7200152dc8", "scanner": "scanner-primary", "fingerprint": "d0320c63bb9c0512", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84d87c44540c978b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/Composer.tsx:257"}, "properties": {"repobilityId": "bfbbeaeac3fa8584", "scanner": "scanner-primary", "fingerprint": "84d87c44540c978b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f48fc582707394a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/ClientPicker.tsx:210"}, "properties": {"repobilityId": "33d7df7b705a055a", "scanner": "scanner-primary", "fingerprint": "f48fc582707394a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-215b482351e2a660", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/StartChatModal.tsx:202"}, "properties": {"repobilityId": "0fd417c936c670f9", "scanner": "scanner-primary", "fingerprint": "215b482351e2a660", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef39a8532450bb11", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Chats/components/TemplatePickerModal.tsx:229"}, "properties": {"repobilityId": "22aa122598048000", "scanner": "scanner-primary", "fingerprint": "ef39a8532450bb11", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e009f9fdc248497", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/PublicShare/PublicShareFilePage.tsx:290"}, "properties": {"repobilityId": "3c6fcbaa6b8e7341", "scanner": "scanner-primary", "fingerprint": "1e009f9fdc248497", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49d224af7415c21e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/BuilderAgentPage.tsx:392"}, "properties": {"repobilityId": "5bb824471d688410", "scanner": "scanner-primary", "fingerprint": "49d224af7415c21e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4059bb7671a08939", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FieldEditor.tsx:2007"}, "properties": {"repobilityId": "9c724d8b3bf5ff1d", "scanner": "scanner-primary", "fingerprint": "4059bb7671a08939", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-10774b034a9a5233", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FreezeModelModal.tsx:170"}, "properties": {"repobilityId": "b98b6017093b90e7", "scanner": "scanner-primary", "fingerprint": "10774b034a9a5233", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b1784651b079a0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/FieldTemplateCatalog.tsx:74"}, "properties": {"repobilityId": "8aa0d104fd797eb7", "scanner": "scanner-primary", "fingerprint": "1b1784651b079a0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75d298f2c1e1ece5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/ModelList.tsx:73"}, "properties": {"repobilityId": "1d0e4a9887033c85", "scanner": "scanner-primary", "fingerprint": "75d298f2c1e1ece5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44ebb0cb64de1a4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Builder/components/OptionsEditor.tsx:113"}, "properties": {"repobilityId": "cdb624e3a6127fe4", "scanner": "scanner-primary", "fingerprint": "44ebb0cb64de1a4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd3ffee9b1b2aca0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/ImageChatsPage.tsx:211"}, "properties": {"repobilityId": "dc7841ff8702b4b6", "scanner": "scanner-primary", "fingerprint": "cd3ffee9b1b2aca0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e66ec270da2a1055", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/PromptLibraryButton.tsx:107"}, "properties": {"repobilityId": "33b5046e38c445d7", "scanner": "scanner-primary", "fingerprint": "e66ec270da2a1055", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dcd976566754a042", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/AssetLightbox.tsx:221"}, "properties": {"repobilityId": "d75b2cb1774328ef", "scanner": "scanner-primary", "fingerprint": "dcd976566754a042", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-653a76f391b1f819", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/StudioWorkspace.tsx:199"}, "properties": {"repobilityId": "1fd5952997bcda1a", "scanner": "scanner-primary", "fingerprint": "653a76f391b1f819", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f05ae3f8fe2b45ec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/AddImageToRecordModal.tsx:222"}, "properties": {"repobilityId": "b29175447d114301", "scanner": "scanner-primary", "fingerprint": "f05ae3f8fe2b45ec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8f025b88b2fb7dc8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/ModelDropdown.tsx:98"}, "properties": {"repobilityId": "8cfbda922179c4f7", "scanner": "scanner-primary", "fingerprint": "8f025b88b2fb7dc8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-caa79185cc6ffee2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ImageChats/components/BrandPresetDropdown.tsx:58"}, "properties": {"repobilityId": "7048b6d9eba233d5", "scanner": "scanner-primary", "fingerprint": "caa79185cc6ffee2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b481b1b0fda2599", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowRunDetailPage.tsx:189"}, "properties": {"repobilityId": "c0ed3184b7b4377b", "scanner": "scanner-primary", "fingerprint": "1b481b1b0fda2599", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38b4aab8f4d9ce3e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowListPage.tsx:118"}, "properties": {"repobilityId": "4cfb3c0f1b965524", "scanner": "scanner-primary", "fingerprint": "38b4aab8f4d9ce3e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37917ce4f7ca77fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowAgentPage.tsx:331"}, "properties": {"repobilityId": "c15fa3f8f47d1556", "scanner": "scanner-primary", "fingerprint": "37917ce4f7ca77fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afd1e69c2670ab99", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/WorkflowLogsPage.tsx:218"}, "properties": {"repobilityId": "dab565554c3e8128", "scanner": "scanner-primary", "fingerprint": "afd1e69c2670ab99", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2262737771c682be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/components/ActionList.tsx:2148"}, "properties": {"repobilityId": "262d3ccf474e5d3c", "scanner": "scanner-primary", "fingerprint": "2262737771c682be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e251b6fd3945ef8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/ActionNode.tsx:57"}, "properties": {"repobilityId": "06cdb557a56a3aba", "scanner": "scanner-primary", "fingerprint": "6e251b6fd3945ef8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c2df0555c45a61fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/ConditionGroupNode.tsx:105"}, "properties": {"repobilityId": "b494a6662614c113", "scanner": "scanner-primary", "fingerprint": "c2df0555c45a61fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c657a1069d421f4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/BranchHeaderNode.tsx:70"}, "properties": {"repobilityId": "3542982cf16b295e", "scanner": "scanner-primary", "fingerprint": "c657a1069d421f4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea3b6ca9cf6fc200", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Workflow/canvas/nodes/TriggerNode.tsx:42"}, "properties": {"repobilityId": "5f9e9ed34232a428", "scanner": "scanner-primary", "fingerprint": "ea3b6ca9cf6fc200", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8af22c35d4c52554", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/CopywriterPage.tsx:110"}, "properties": {"repobilityId": "97cb7631e36aef91", "scanner": "scanner-primary", "fingerprint": "8af22c35d4c52554", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a5d28e16a91b734", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/components/CopywriterThread.tsx:219"}, "properties": {"repobilityId": "95252d8cb4732e38", "scanner": "scanner-primary", "fingerprint": "4a5d28e16a91b734", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88402a849bc4373e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Copywriter/components/ReelScriptCard.tsx:31"}, "properties": {"repobilityId": "d694204bcc31135e", "scanner": "scanner-primary", "fingerprint": "88402a849bc4373e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b731f40eb0acc3a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/BulkMoveModal.tsx:119"}, "properties": {"repobilityId": "5de81d7133aee79e", "scanner": "scanner-primary", "fingerprint": "b731f40eb0acc3a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98db0b910f12023b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/MoveToFolderModal.tsx:103"}, "properties": {"repobilityId": "f9166df2cc378937", "scanner": "scanner-primary", "fingerprint": "98db0b910f12023b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce3ec7b2387f3085", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/UploadDropzone.tsx:297"}, "properties": {"repobilityId": "11926301fe447c8d", "scanner": "scanner-primary", "fingerprint": "ce3ec7b2387f3085", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36de9609bb5e8f74", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/FilesBreadcrumb.tsx:48"}, "properties": {"repobilityId": "3d98914b63c1649e", "scanner": "scanner-primary", "fingerprint": "36de9609bb5e8f74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d47fdf2aeb9bf81", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/ShareLinkModal.tsx:107"}, "properties": {"repobilityId": "1e1bb4f584a61aa5", "scanner": "scanner-primary", "fingerprint": "3d47fdf2aeb9bf81", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d983ec711933e25d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/PermissionsPanel.tsx:192"}, "properties": {"repobilityId": "9641d909b02a1e1c", "scanner": "scanner-primary", "fingerprint": "d983ec711933e25d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-08eea87f54b81a4c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Files/components/DriveBrowserModal.tsx:803"}, "properties": {"repobilityId": "96b71cb1e6ee2a23", "scanner": "scanner-primary", "fingerprint": "08eea87f54b81a4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-21ce29d70693961e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Logs/LogsPage.tsx:339"}, "properties": {"repobilityId": "c68ca21c847bbcba", "scanner": "scanner-primary", "fingerprint": "21ce29d70693961e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d5ff9d6af5e6881", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AiAgent/AiAgentPage.tsx:110"}, "properties": {"repobilityId": "98674a6c9925c521", "scanner": "scanner-primary", "fingerprint": "4d5ff9d6af5e6881", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc5d2424ab9396f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/AiAgent/components/AiChatThread.tsx:170"}, "properties": {"repobilityId": "5fbe87db6034401f", "scanner": "scanner-primary", "fingerprint": "dc5d2424ab9396f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8bf9586b2b082b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/LinkedRecordsModal.tsx:163"}, "properties": {"repobilityId": "26c38599123d98b0", "scanner": "scanner-primary", "fingerprint": "b8bf9586b2b082b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-502bceb31da8bbae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/VersionHistoryModal.tsx:173"}, "properties": {"repobilityId": "54a52d3d94e48e67", "scanner": "scanner-primary", "fingerprint": "502bceb31da8bbae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ccbb4cf218414295", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/Documents/components/VersionHistoryModal.tsx:238"}, "properties": {"repobilityId": "05950ac013a52273", "scanner": "scanner-primary", "fingerprint": "ccbb4cf218414295", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-870812e14721e56a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/CommentsPanel.tsx:404"}, "properties": {"repobilityId": "34b3d4921a70ebc2", "scanner": "scanner-primary", "fingerprint": "870812e14721e56a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0943f286f048071f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Documents/components/CrmVariablesPopover.tsx:79"}, "properties": {"repobilityId": "ea7987c1fe60a636", "scanner": "scanner-primary", "fingerprint": "0943f286f048071f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-468058dbb59c39a2", "level": "warning", "message": {"text": "Dockerfile runs as root: worker/Dockerfile"}, "properties": {"repobilityId": "afa47d310a7f3283", "scanner": "scanner-primary", "fingerprint": "468058dbb59c39a2", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-8a96264e268b4e48", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "f187abf95728b3bd", "scanner": "scanner-primary", "fingerprint": "8a96264e268b4e48", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-8a96264e268b4e48", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-alpine"}, "properties": {"repobilityId": "8e8bce5f55ddfaf6", "scanner": "scanner-primary", "fingerprint": "8a96264e268b4e48", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/Dockerfile"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-c2b8c0f5e3068565", "level": "warning", "message": {"text": "Dockerfile ADD downloads remote content without checksum"}, "properties": {"repobilityId": "dc0cf1be62a10559", "scanner": "scanner-primary", "fingerprint": "c2b8c0f5e3068565", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "docker", "checksum"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/Dockerfile"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-c2b8c0f5e3068565", "level": "warning", "message": {"text": "Dockerfile ADD downloads remote content without checksum"}, "properties": {"repobilityId": "4643566642b81500", "scanner": "scanner-primary", "fingerprint": "c2b8c0f5e3068565", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "docker", "checksum"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/Dockerfile"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-c2b8c0f5e3068565", "level": "warning", "message": {"text": "Dockerfile ADD downloads remote content without checksum"}, "properties": {"repobilityId": "7beefcd8af01d217", "scanner": "scanner-primary", "fingerprint": "c2b8c0f5e3068565", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "docker", "checksum"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/Dockerfile"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-c2b8c0f5e3068565", "level": "warning", "message": {"text": "Dockerfile ADD downloads remote content without checksum"}, "properties": {"repobilityId": "ca5b529ea65b70df", "scanner": "scanner-primary", "fingerprint": "c2b8c0f5e3068565", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "docker", "checksum"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/Dockerfile"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-c4a615da5b208cdb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in worker/src/runPreviewJob.ts:23"}, "properties": {"repobilityId": "edebdec6269770db", "scanner": "scanner-primary", "fingerprint": "c4a615da5b208cdb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/src/runPreviewJob.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-ff44310a14aab0b6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in worker/src/pdfToImages.ts:18"}, "properties": {"repobilityId": "d994ed7d50e995ed", "scanner": "scanner-primary", "fingerprint": "ff44310a14aab0b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/src/pdfToImages.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-e393e31eb6c1b935", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in worker/src/runCompressJob.ts:21"}, "properties": {"repobilityId": "126b0b7e784ca0ca", "scanner": "scanner-primary", "fingerprint": "e393e31eb6c1b935", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/src/runCompressJob.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-009ad97fd09abea5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/delete-user/index.ts:42"}, "properties": {"repobilityId": "c784695c877499b9", "scanner": "scanner-primary", "fingerprint": "009ad97fd09abea5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/delete-user/index.ts"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-3cd622dbe09bf1f6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/invite-user/index.ts:30"}, "properties": {"repobilityId": "f1b1a21e6d6efd72", "scanner": "scanner-primary", "fingerprint": "3cd622dbe09bf1f6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/invite-user/index.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-ba0eeeed188d70f4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/project-details-ai-v2/index.ts:35"}, "properties": {"repobilityId": "26b4446fc49126c5", "scanner": "scanner-primary", "fingerprint": "ba0eeeed188d70f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/project-details-ai-v2/index.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-4c172c431edbd06c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/inbox/index.ts:25"}, "properties": {"repobilityId": "f3027aca0647e82e", "scanner": "scanner-primary", "fingerprint": "4c172c431edbd06c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/inbox/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-79054112d18aecc5", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/lib/documents/export.ts:162"}, "properties": {"repobilityId": "e4881b33932f4840", "scanner": "scanner-primary", "fingerprint": "79054112d18aecc5", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/documents/export.ts"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-9ad447f24e0fa8f3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/Documents/components/VersionHistoryModal.tsx:238"}, "properties": {"repobilityId": "c69c2e22e782f224", "scanner": "scanner-primary", "fingerprint": "9ad447f24e0fa8f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/Documents/components/VersionHistoryModal.tsx"}, "region": {"startLine": 238}}}]}, {"ruleId": "scanner-0005f02ad6f2eec4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/Documents/components/DocumentEditor.tsx:75"}, "properties": {"repobilityId": "13fa01fed21f4620", "scanner": "scanner-primary", "fingerprint": "0005f02ad6f2eec4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/Documents/components/DocumentEditor.tsx"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-e0fb246346eeceda", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/pages/Documents/components/MentionExtension.ts:169"}, "properties": {"repobilityId": "ad2dd24e6cd1f43c", "scanner": "scanner-primary", "fingerprint": "e0fb246346eeceda", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/Documents/components/MentionExtension.ts"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-4bfeeec6106438f6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7886787a720329e7", "scanner": "scanner-primary", "fingerprint": "4bfeeec6106438f6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-prds.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-4bfeeec6106438f6", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "baae4a3eb37dd70b", "scanner": "scanner-primary", "fingerprint": "4bfeeec6106438f6", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-prds.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-326933de5a70f9cc", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "086b47629dc9a625", "scanner": "scanner-primary", "fingerprint": "326933de5a70f9cc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sync-prds.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb8153e7c43ba840", "level": "note", "message": {"text": "Very large file: api/_lib/builderAgent.ts (1453 lines)"}, "properties": {"repobilityId": "3e2dc1ca8519b859", "scanner": "scanner-primary", "fingerprint": "cb8153e7c43ba840", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-97564afcf6a3e22e", "level": "note", "message": {"text": "Very large file: src/types/index.ts (2288 lines)"}, "properties": {"repobilityId": "6bc7d72791bfb09e", "scanner": "scanner-primary", "fingerprint": "97564afcf6a3e22e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fd0d1c599b6f3f22", "level": "note", "message": {"text": "Very large file: src/stores/appStore.ts (4327 lines)"}, "properties": {"repobilityId": "26103f060048d422", "scanner": "scanner-primary", "fingerprint": "fd0d1c599b6f3f22", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4dd6cdbe4e91c986", "level": "note", "message": {"text": "Very large file: src/lib/workflowEngine.ts (1289 lines)"}, "properties": {"repobilityId": "53c417ddbf1a1693", "scanner": "scanner-primary", "fingerprint": "4dd6cdbe4e91c986", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a66226619df44d8f", "level": "note", "message": {"text": "Very large file: src/lib/i18n.ts (1749 lines)"}, "properties": {"repobilityId": "1390b2f0160e71ff", "scanner": "scanner-primary", "fingerprint": "a66226619df44d8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e02d7bd22537b877", "level": "note", "message": {"text": "Very large file: src/pages/Records/RecordFormPage.tsx (1529 lines)"}, "properties": {"repobilityId": "220b6e807fbc0cdd", "scanner": "scanner-primary", "fingerprint": "e02d7bd22537b877", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-646d3802c15bae5b", "level": "note", "message": {"text": "Very large file: src/pages/Builder/components/FieldEditor.tsx (2858 lines)"}, "properties": {"repobilityId": "e2328a5f459dfc28", "scanner": "scanner-primary", "fingerprint": "646d3802c15bae5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-de1adfdd57377a43", "level": "note", "message": {"text": "Very large file: src/pages/Workflow/components/ActionList.tsx (2548 lines)"}, "properties": {"repobilityId": "16d970977683aad1", "scanner": "scanner-primary", "fingerprint": "de1adfdd57377a43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-47bb30924c853c3f", "level": "note", "message": {"text": "Very large file: src/pages/Files/FilesPage.tsx (1360 lines)"}, "properties": {"repobilityId": "06b128757620b886", "scanner": "scanner-primary", "fingerprint": "47bb30924c853c3f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "7c2ec039f31ec8c5", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "cd5341c6ded3fdcd", "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": "6449c46bb66de8ae", "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": "59a30426bb13bca4", "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": "c0aa8074488d1476", "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": "e89b02264b58a99e", "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": "5094c3d364cac934", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "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-658a686c823ea44b", "level": "none", "message": {"text": "Commented-code block (5 lines) in vite.config.ts:5"}, "properties": {"repobilityId": "1ba5b9406ff87eea", "scanner": "scanner-primary", "fingerprint": "658a686c823ea44b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3a1f1ab9ae02fec", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/copywriter.ts:142"}, "properties": {"repobilityId": "c2af537417dd7d69", "scanner": "scanner-primary", "fingerprint": "c3a1f1ab9ae02fec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7bd5f451a4374eb", "level": "none", "message": {"text": "Commented-code block (9 lines) in api/generate-deck.ts:118"}, "properties": {"repobilityId": "79b90614256333af", "scanner": "scanner-primary", "fingerprint": "e7bd5f451a4374eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b310c9a1df40a9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/generate-deck.ts:163"}, "properties": {"repobilityId": "3b1ef6d942b7ac4f", "scanner": "scanner-primary", "fingerprint": "8b310c9a1df40a9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3916f9fe0d5dd385", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/research-project.ts:33"}, "properties": {"repobilityId": "d6111363ac371d3d", "scanner": "scanner-primary", "fingerprint": "3916f9fe0d5dd385", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe8b5a03d0d51868", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/sweep-due-followups.ts:92"}, "properties": {"repobilityId": "532585e35a20f01c", "scanner": "scanner-primary", "fingerprint": "fe8b5a03d0d51868", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bb6b7009f8e7cd0", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/run-button-workflow.ts:164"}, "properties": {"repobilityId": "af5b4385be8613f4", "scanner": "scanner-primary", "fingerprint": "9bb6b7009f8e7cd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00b6d4d9036a272e", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/webhook/hatif-call.ts:270"}, "properties": {"repobilityId": "60725e4590a73260", "scanner": "scanner-primary", "fingerprint": "00b6d4d9036a272e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-135264286a5b4c1d", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/webhook/haberchat.ts:42"}, "properties": {"repobilityId": "155d0c68d0b757c7", "scanner": "scanner-primary", "fingerprint": "135264286a5b4c1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9371af32cfaa1581", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/templates/generate-from-description.ts:169"}, "properties": {"repobilityId": "e906fa8e067c1500", "scanner": "scanner-primary", "fingerprint": "9371af32cfaa1581", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2aca62e4b6f85445", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/image-chat/promote-asset.ts:184"}, "properties": {"repobilityId": "e41cb090de6d1e49", "scanner": "scanner-primary", "fingerprint": "2aca62e4b6f85445", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74c0b3da51d21d34", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/icons/generate.ts:211"}, "properties": {"repobilityId": "47c24aed67bcf43d", "scanner": "scanner-primary", "fingerprint": "74c0b3da51d21d34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5b4a9b8a0141ffa", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/share/view.ts:84"}, "properties": {"repobilityId": "b54239d19bf00fbf", "scanner": "scanner-primary", "fingerprint": "b5b4a9b8a0141ffa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5161cafbea618951", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/_lib/migrateAgent.ts:693"}, "properties": {"repobilityId": "2b96555af25b0cc0", "scanner": "scanner-primary", "fingerprint": "5161cafbea618951", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9318fd5fc6b5cfcf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lib/paseetRunner.ts:53"}, "properties": {"repobilityId": "be5d03286f09a907", "scanner": "scanner-primary", "fingerprint": "9318fd5fc6b5cfcf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c1d32f9c695c598", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_lib/hatif.ts:185"}, "properties": {"repobilityId": "7827929a97647ebc", "scanner": "scanner-primary", "fingerprint": "0c1d32f9c695c598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1ae852aa8e9d69d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/_lib/hatif.ts:95"}, "properties": {"repobilityId": "adf640883dcd9cae", "scanner": "scanner-primary", "fingerprint": "a1ae852aa8e9d69d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4c1accbd56c35b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_lib/workflowSweeper.ts:410"}, "properties": {"repobilityId": "26bccde3bb36e0d3", "scanner": "scanner-primary", "fingerprint": "d4c1accbd56c35b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e4517affe784672", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_lib/haberchat.ts:503"}, "properties": {"repobilityId": "ea75c07e78ecd6db", "scanner": "scanner-primary", "fingerprint": "4e4517affe784672", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f76828b0fc28504", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_lib/activityLogger.ts:73"}, "properties": {"repobilityId": "aff4cb645fe7a072", "scanner": "scanner-primary", "fingerprint": "7f76828b0fc28504", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5f9666f418f2feb", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_lib/builderAgent.ts:1372"}, "properties": {"repobilityId": "b99d5b74e21b3ca2", "scanner": "scanner-primary", "fingerprint": "d5f9666f418f2feb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5872b4d14dd9beda", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/_lib/aiAgent.ts:228"}, "properties": {"repobilityId": "b00e51aa40aafbf5", "scanner": "scanner-primary", "fingerprint": "5872b4d14dd9beda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a52e735afac6c180", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_lib/copywriterAgent.ts:481"}, "properties": {"repobilityId": "6cc2dcff23026e4c", "scanner": "scanner-primary", "fingerprint": "a52e735afac6c180", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43cab16f482ce106", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-paseet-chat.mjs:24"}, "properties": {"repobilityId": "321e91ce24943944", "scanner": "scanner-primary", "fingerprint": "43cab16f482ce106", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50174d87329e8233", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/paseet-context-setup.mjs:1"}, "properties": {"repobilityId": "565ceac24a15840a", "scanner": "scanner-primary", "fingerprint": "50174d87329e8233", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77c5a5d82582b7d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/paseet-context-setup.mjs:22"}, "properties": {"repobilityId": "d7d04713610535c3", "scanner": "scanner-primary", "fingerprint": "77c5a5d82582b7d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fbc12409aab239f3", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/upload-wassel-skill.mjs:58"}, "properties": {"repobilityId": "7111a8b65e1675fc", "scanner": "scanner-primary", "fingerprint": "fbc12409aab239f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bb835b0a993f0fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/probe-paseet.mjs:18"}, "properties": {"repobilityId": "c6c6c56cbca70bd6", "scanner": "scanner-primary", "fingerprint": "7bb835b0a993f0fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bb52be5d4e765071", "level": "none", "message": {"text": "Commented-code block (5 lines) in worker/src/runPreviewJob.ts:130"}, "properties": {"repobilityId": "884cbed8b44e14a5", "scanner": "scanner-primary", "fingerprint": "bb52be5d4e765071", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4cf8b557c699751", "level": "none", "message": {"text": "Commented-code block (6 lines) in worker/src/env.ts:14"}, "properties": {"repobilityId": "ecdeb22d2059feb3", "scanner": "scanner-primary", "fingerprint": "c4cf8b557c699751", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2bbe6cfc1b0c390", "level": "none", "message": {"text": "Commented-code block (6 lines) in worker/src/runDeckJob.ts:92"}, "properties": {"repobilityId": "1791c597c3f84e39", "scanner": "scanner-primary", "fingerprint": "d2bbe6cfc1b0c390", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc52c02320523c8b", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/delete-user/index.ts:5"}, "properties": {"repobilityId": "a8c00b5576feff99", "scanner": "scanner-primary", "fingerprint": "fc52c02320523c8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-255ba29ed206ee74", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/invite-user/index.ts:4"}, "properties": {"repobilityId": "2f9a9d6f89bee165", "scanner": "scanner-primary", "fingerprint": "255ba29ed206ee74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-175de2f58a5af7cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/project-details-ai-v2/index.ts:19"}, "properties": {"repobilityId": "e6ca2fbcbf2c97e4", "scanner": "scanner-primary", "fingerprint": "175de2f58a5af7cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e092271c0cd4ce1", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/inbox/index.ts:6"}, "properties": {"repobilityId": "8061f5fe22b7bcdb", "scanner": "scanner-primary", "fingerprint": "8e092271c0cd4ce1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fef1df8a5c15abe", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/supabase.ts:31"}, "properties": {"repobilityId": "72fb451270510efb", "scanner": "scanner-primary", "fingerprint": "5fef1df8a5c15abe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c533dfc5a072384a", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/webhookOutbox.ts:1"}, "properties": {"repobilityId": "1646442f5e61c9c3", "scanner": "scanner-primary", "fingerprint": "c533dfc5a072384a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b266c7450b68ca91", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/App.tsx:172"}, "properties": {"repobilityId": "2bb6115b7412a9a9", "scanner": "scanner-primary", "fingerprint": "b266c7450b68ca91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3350b47057f980b0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/types/index.ts:87"}, "properties": {"repobilityId": "fbf7ef0b3c80fdcf", "scanner": "scanner-primary", "fingerprint": "3350b47057f980b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29eb36673d80e1a7", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/stores/appStore.ts:156"}, "properties": {"repobilityId": "f144b129eb9df8ac", "scanner": "scanner-primary", "fingerprint": "29eb36673d80e1a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f05735709df7f6a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/excelUtils.ts:240"}, "properties": {"repobilityId": "f3b53b56b750e866", "scanner": "scanner-primary", "fingerprint": "4f05735709df7f6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f467417e74fba948", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/auth.ts:99"}, "properties": {"repobilityId": "bb08ed1d61835616", "scanner": "scanner-primary", "fingerprint": "f467417e74fba948", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f69de6fd4e6a9b4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/permissions.ts:230"}, "properties": {"repobilityId": "310fca4b496c8722", "scanner": "scanner-primary", "fingerprint": "4f69de6fd4e6a9b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5da911105dbfcae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/fieldFallbackResolver.ts:14"}, "properties": {"repobilityId": "2d3a43da2df01abc", "scanner": "scanner-primary", "fingerprint": "e5da911105dbfcae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a746a7a4b305e95", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/similarity.ts:4"}, "properties": {"repobilityId": "eba77038633f3d82", "scanner": "scanner-primary", "fingerprint": "0a746a7a4b305e95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70a8b248d1a31447", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/autoIdAssigner.ts:4"}, "properties": {"repobilityId": "c2dc0effa27ba135", "scanner": "scanner-primary", "fingerprint": "70a8b248d1a31447", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5caa0e0baa84ff1d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/formulaEngine.ts:6"}, "properties": {"repobilityId": "132d56be84d70e8d", "scanner": "scanner-primary", "fingerprint": "5caa0e0baa84ff1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03efee34f6e2c46e", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/projectMessageFacts.ts:6"}, "properties": {"repobilityId": "f43a49d18c3bf2fe", "scanner": "scanner-primary", "fingerprint": "03efee34f6e2c46e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6f4c611c5f2c4aa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/imageUpload.ts:10"}, "properties": {"repobilityId": "fbf66c489d483d87", "scanner": "scanner-primary", "fingerprint": "c6f4c611c5f2c4aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f5c3b032ae90e8b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/projectDetailsAi.ts:85"}, "properties": {"repobilityId": "43c7e4cad9a79833", "scanner": "scanner-primary", "fingerprint": "8f5c3b032ae90e8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f723df8926f1c04", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/recordSort.ts:4"}, "properties": {"repobilityId": "a0f31e1d29de5ff7", "scanner": "scanner-primary", "fingerprint": "6f723df8926f1c04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25ab443c4c21185a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/workflowEngine.ts:226"}, "properties": {"repobilityId": "d984ab464023c330", "scanner": "scanner-primary", "fingerprint": "25ab443c4c21185a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63ffe9ff09a40151", "level": "note", "message": {"text": "Legacy-named symbol `__legacy` in src/lib/workflowEngineCore.ts:234"}, "properties": {"repobilityId": "28fd2e20938f2a5c", "scanner": "scanner-primary", "fingerprint": "63ffe9ff09a40151", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1017a4fb7346ea28", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/lib/fieldRename.ts:5"}, "properties": {"repobilityId": "3dff6253326f77cd", "scanner": "scanner-primary", "fingerprint": "1017a4fb7346ea28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4944f0f0d4afcb1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/schemaMigrations.ts:86"}, "properties": {"repobilityId": "7095b4aae0eb4ca6", "scanner": "scanner-primary", "fingerprint": "c4944f0f0d4afcb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ec764da15c81c53", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/recordsCache.ts:12"}, "properties": {"repobilityId": "cb306d2ac198518a", "scanner": "scanner-primary", "fingerprint": "4ec764da15c81c53", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2c4dfcc6904d0f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/projectMessageFacts.test.ts:145"}, "properties": {"repobilityId": "edd71a2f88352607", "scanner": "scanner-primary", "fingerprint": "a2c4dfcc6904d0f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46d4bf0ff10813f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/decks/client.ts:154"}, "properties": {"repobilityId": "aa7632121629b035", "scanner": "scanner-primary", "fingerprint": "46d4bf0ff10813f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77c556026531fb63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/assets/promote.ts:50"}, "properties": {"repobilityId": "a9f81870b88a6c65", "scanner": "scanner-primary", "fingerprint": "77c556026531fb63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5d3498eb63c24e9c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/files/client.ts:218"}, "properties": {"repobilityId": "928d12778a6203e2", "scanner": "scanner-primary", "fingerprint": "5d3498eb63c24e9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-131b7b05ea2a8535", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/imageChat/client.ts:164"}, "properties": {"repobilityId": "680ac90561596422", "scanner": "scanner-primary", "fingerprint": "131b7b05ea2a8535", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2866890de1185d2b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/haberchat/client.ts:165"}, "properties": {"repobilityId": "fa359974c022caae", "scanner": "scanner-primary", "fingerprint": "2866890de1185d2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b228605fb2591e3", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/realtime/dedup.ts:9"}, "properties": {"repobilityId": "bf17587bdf06a1d3", "scanner": "scanner-primary", "fingerprint": "2b228605fb2591e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fb05e91813cae96", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/realtime/RealtimeOrchestrator.ts:37"}, "properties": {"repobilityId": "6a0ebdf3e53f1e7f", "scanner": "scanner-primary", "fingerprint": "9fb05e91813cae96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a73848260ea13e0a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/realtime/mergeHandlers.ts:9"}, "properties": {"repobilityId": "c5855fb7199177be", "scanner": "scanner-primary", "fingerprint": "a73848260ea13e0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8532aa1f85797292", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Records/RecordListPage.tsx:33"}, "properties": {"repobilityId": "22812b1eb50b2a43", "scanner": "scanner-primary", "fingerprint": "8532aa1f85797292", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f8f8a7b35932bcb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Records/RecordFormPage.tsx:87"}, "properties": {"repobilityId": "7aa90f79be798154", "scanner": "scanner-primary", "fingerprint": "0f8f8a7b35932bcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc043edd4904fc6f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Records/components/MapsView.tsx:320"}, "properties": {"repobilityId": "32c87cdb3773bd08", "scanner": "scanner-primary", "fingerprint": "dc043edd4904fc6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aae513bad40c1811", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/Records/components/CallHistoryPanel.tsx:46"}, "properties": {"repobilityId": "1c8bac48f5d4c9b6", "scanner": "scanner-primary", "fingerprint": "aae513bad40c1811", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c78188a7035636b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Records/components/LookupCombobox.tsx:32"}, "properties": {"repobilityId": "060bf750c2b77ea0", "scanner": "scanner-primary", "fingerprint": "c78188a7035636b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2a0ba1b05f439e5", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/Records/components/ViewEditor.tsx:83"}, "properties": {"repobilityId": "fcef90fd236ac41c", "scanner": "scanner-primary", "fingerprint": "a2a0ba1b05f439e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bee402294f7cbec", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/Records/components/TableView.tsx:643"}, "properties": {"repobilityId": "ccc7c3dce6942a82", "scanner": "scanner-primary", "fingerprint": "9bee402294f7cbec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58ba43c21801e2c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Records/components/ViewSelector.tsx:47"}, "properties": {"repobilityId": "67a8cad5c686755c", "scanner": "scanner-primary", "fingerprint": "58ba43c21801e2c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beff34a6b7608f4e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Records/components/IconPickerModal.tsx:84"}, "properties": {"repobilityId": "970e70f9cc590133", "scanner": "scanner-primary", "fingerprint": "beff34a6b7608f4e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dea503ba6aa84bf3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Records/components/TableField.tsx:264"}, "properties": {"repobilityId": "2c278c8ecca84611", "scanner": "scanner-primary", "fingerprint": "dea503ba6aa84bf3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d1eef95c8f4c121", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/pages/Records/components/BulkEditModal.tsx:106"}, "properties": {"repobilityId": "c1e82e03c264e2b3", "scanner": "scanner-primary", "fingerprint": "1d1eef95c8f4c121", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd504ae28ae30416", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in src/pages/Records/components/DriveFieldInputs.tsx:167"}, "properties": {"repobilityId": "6d55277988e13e79", "scanner": "scanner-primary", "fingerprint": "cd504ae28ae30416", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f6b043a409efc3cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Records/components/MultiSelect.tsx:136"}, "properties": {"repobilityId": "b5f847ecf5ec2270", "scanner": "scanner-primary", "fingerprint": "f6b043a409efc3cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2ff19ddc31ea8e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Records/components/ImportModal.tsx:80"}, "properties": {"repobilityId": "88e31342ff132ca9", "scanner": "scanner-primary", "fingerprint": "c2ff19ddc31ea8e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f8bfaf352b4b5e1", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in src/pages/Records/components/DriveCells.tsx:129"}, "properties": {"repobilityId": "c1945d3330d43add", "scanner": "scanner-primary", "fingerprint": "7f8bfaf352b4b5e1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b33cdce8a017c54a", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/pages/Records/components/SectionBlock.tsx:335"}, "properties": {"repobilityId": "6e91f8c19889b010", "scanner": "scanner-primary", "fingerprint": "b33cdce8a017c54a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fe9cb864ba80df0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Records/components/DynamicField.tsx:630"}, "properties": {"repobilityId": "5a449ae60125a2ed", "scanner": "scanner-primary", "fingerprint": "4fe9cb864ba80df0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65129e0aa54af852", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Records/hooks/useAutoLink.ts:51"}, "properties": {"repobilityId": "f2f69fa9e971b8d1", "scanner": "scanner-primary", "fingerprint": "65129e0aa54af852", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-917532bcdcfba8e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Settings/UsersPage.tsx:66"}, "properties": {"repobilityId": "a649790fe5ba72cf", "scanner": "scanner-primary", "fingerprint": "917532bcdcfba8e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba981188bc006c77", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/pages/Settings/TranslationSettingsPage.tsx:38"}, "properties": {"repobilityId": "0119fb1328474d10", "scanner": "scanner-primary", "fingerprint": "ba981188bc006c77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f3a9dda5bd42ca2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Settings/ProjectDetailsBridgePage.tsx:75"}, "properties": {"repobilityId": "00dcd3423324abbb", "scanner": "scanner-primary", "fingerprint": "1f3a9dda5bd42ca2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73d7ad6f928583ee", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/Whiteboard/WhiteboardEditorPage.tsx:49"}, "properties": {"repobilityId": "3471b2ef9259dbba", "scanner": "scanner-primary", "fingerprint": "73d7ad6f928583ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd1d4fbaca874e38", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Chats/components/MessageBubble.tsx:94"}, "properties": {"repobilityId": "8736cb403d1d9a26", "scanner": "scanner-primary", "fingerprint": "fd1d4fbaca874e38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a31ddd165fa52fdf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/Chats/components/MessageBubble.tsx:13"}, "properties": {"repobilityId": "9592ade6d7a693d5", "scanner": "scanner-primary", "fingerprint": "a31ddd165fa52fdf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-292bc1787748daef", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Chats/components/ProjectMessageGeneratorModal.tsx:115"}, "properties": {"repobilityId": "2d8022c757ea6620", "scanner": "scanner-primary", "fingerprint": "292bc1787748daef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ea71495bda9aacd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Builder/BuilderAgentPage.tsx:24"}, "properties": {"repobilityId": "a761422098a89259", "scanner": "scanner-primary", "fingerprint": "3ea71495bda9aacd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abc9619db9a75566", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Builder/components/FieldEditor.tsx:199"}, "properties": {"repobilityId": "fd15bfc3c8e04fec", "scanner": "scanner-primary", "fingerprint": "abc9619db9a75566", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-493727f29d211f61", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Builder/components/SectionManager.tsx:169"}, "properties": {"repobilityId": "be12bb6fb34e0f79", "scanner": "scanner-primary", "fingerprint": "493727f29d211f61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d9af8785eeada9e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Builder/components/CustomButtonsTab.tsx:94"}, "properties": {"repobilityId": "6136caecb008c8f3", "scanner": "scanner-primary", "fingerprint": "3d9af8785eeada9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c8eb51f497e10d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Builder/components/OptionsEditor.tsx:20"}, "properties": {"repobilityId": "31c2b13c32723048", "scanner": "scanner-primary", "fingerprint": "5c8eb51f497e10d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23949e82bbeb5b59", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/Builder/components/MapsBuilder.tsx:49"}, "properties": {"repobilityId": "98565fa81976914a", "scanner": "scanner-primary", "fingerprint": "23949e82bbeb5b59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4d4222204b12fdd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Workflow/components/FieldValueInput.tsx:69"}, "properties": {"repobilityId": "cbc423bf68d98224", "scanner": "scanner-primary", "fingerprint": "b4d4222204b12fdd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d871935f47bc3f07", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/Workflow/components/ActionList.tsx:1775"}, "properties": {"repobilityId": "0c0beeea6c1d4f30", "scanner": "scanner-primary", "fingerprint": "d871935f47bc3f07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f1e6ce2454fd585", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/pages/Workflow/canvas/workflowToGraph.ts:40"}, "properties": {"repobilityId": "d3f60d07523a6211", "scanner": "scanner-primary", "fingerprint": "7f1e6ce2454fd585", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f339dd1d2d470c11", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Workflow/canvas/WorkflowCanvas.tsx:74"}, "properties": {"repobilityId": "f8c102054cca26d7", "scanner": "scanner-primary", "fingerprint": "f339dd1d2d470c11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5cb21484f43616e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Workflow/canvas/AddNodeMenu.tsx:51"}, "properties": {"repobilityId": "d8bcd72ac8cf91a3", "scanner": "scanner-primary", "fingerprint": "b5cb21484f43616e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53b4c2c7cb3916a1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Workflow/canvas/NodeDrawer.tsx:91"}, "properties": {"repobilityId": "78552497e6f3934c", "scanner": "scanner-primary", "fingerprint": "53b4c2c7cb3916a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfafd3bcf1e6b548", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Workflow/canvas/nodes/ConditionGroupNode.tsx:36"}, "properties": {"repobilityId": "c40d1b9316fe21ef", "scanner": "scanner-primary", "fingerprint": "dfafd3bcf1e6b548", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce52273cf1f950b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Workflow/canvas/nodes/BranchHeaderNode.tsx:25"}, "properties": {"repobilityId": "f1cfbcdf4bf330f8", "scanner": "scanner-primary", "fingerprint": "ce52273cf1f950b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac46fb19265484bd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Files/useFilesSelection.ts:148"}, "properties": {"repobilityId": "79a839674c77c080", "scanner": "scanner-primary", "fingerprint": "ac46fb19265484bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1307f3ebc19cfeb2", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/Files/FilesPage.tsx:154"}, "properties": {"repobilityId": "6ab43acf9fed83b1", "scanner": "scanner-primary", "fingerprint": "1307f3ebc19cfeb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2af70e6d51dfbfdf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Files/components/FilePreviewModal.tsx:105"}, "properties": {"repobilityId": "8304a3faab4d395a", "scanner": "scanner-primary", "fingerprint": "2af70e6d51dfbfdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c80657f53589a34", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Documents/DocumentEditorPage.tsx:685"}, "properties": {"repobilityId": "aaaceb9b5f2c8b54", "scanner": "scanner-primary", "fingerprint": "5c80657f53589a34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9d27cf9dfb3b6f3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/Documents/components/DocumentEditor.tsx:271"}, "properties": {"repobilityId": "2bb55ee2b726aeb0", "scanner": "scanner-primary", "fingerprint": "e9d27cf9dfb3b6f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20b7360c4d010393", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/Documents/components/MentionExtension.ts:68"}, "properties": {"repobilityId": "96c918030aa12d1e", "scanner": "scanner-primary", "fingerprint": "20b7360c4d010393", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-446c461e6fdad5b6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useResolvedLocations.ts:42"}, "properties": {"repobilityId": "35982298af32325e", "scanner": "scanner-primary", "fingerprint": "446c461e6fdad5b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59b992d62d86a65a", "level": "note", "message": {"text": "25 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "58b9516d72ffa8ba", "scanner": "scanner-primary", "fingerprint": "59b992d62d86a65a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-d674fedc105a40b0", "level": "warning", "message": {"text": "Frontend route `/auth/reset-password` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "116aac37056e74db", "scanner": "scanner-primary", "fingerprint": "d674fedc105a40b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3b93ccde8a4767ee", "level": "warning", "message": {"text": "Frontend route `/public/dashboard/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "efc7ca0f749ee2f7", "scanner": "scanner-primary", "fingerprint": "3b93ccde8a4767ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e1ada464e89525af", "level": "warning", "message": {"text": "Frontend route `/share/:token` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "4c9621e1e10cca73", "scanner": "scanner-primary", "fingerprint": "e1ada464e89525af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-12bc59d0d184d656", "level": "warning", "message": {"text": "Frontend route `/files/doc/:fileId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "7be0fd45a76c76dd", "scanner": "scanner-primary", "fingerprint": "12bc59d0d184d656", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3c86b72b48d13a7b", "level": "warning", "message": {"text": "Frontend route `/files/:folderId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "cb0a4cf21e2224d5", "scanner": "scanner-primary", "fingerprint": "3c86b72b48d13a7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ad1c58330b9866cf", "level": "warning", "message": {"text": "Frontend route `/model/:modelName` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "725ab7c4cdfa9275", "scanner": "scanner-primary", "fingerprint": "ad1c58330b9866cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a37b131f20feed91", "level": "warning", "message": {"text": "Frontend route `/model/:modelName/new` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "58c40d976847750a", "scanner": "scanner-primary", "fingerprint": "a37b131f20feed91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0928d59328c5dcba", "level": "warning", "message": {"text": "Frontend route `/model/:modelName/:recordId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "aeb365acf4618f6a", "scanner": "scanner-primary", "fingerprint": "0928d59328c5dcba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8a5e507dd6c9b14c", "level": "warning", "message": {"text": "Frontend route `/builder/:modelId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "d6d9b64f77deaa3f", "scanner": "scanner-primary", "fingerprint": "8a5e507dd6c9b14c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-939bbe7a71e366cd", "level": "warning", "message": {"text": "Frontend route `/workflow/logs/:runId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "37ca54dc1a10c95e", "scanner": "scanner-primary", "fingerprint": "939bbe7a71e366cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a973cd07260e0305", "level": "warning", "message": {"text": "Frontend route `/workflow/:workflowId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "80921b0c9f26b2d3", "scanner": "scanner-primary", "fingerprint": "a973cd07260e0305", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-52ce0e125958264e", "level": "warning", "message": {"text": "Frontend route `/dashboards/:dashboardId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "602f754f37f7da94", "scanner": "scanner-primary", "fingerprint": "52ce0e125958264e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b9da5e92249c6ffe", "level": "warning", "message": {"text": "Frontend route `/whiteboard/:boardId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "5b0faf8c478bad90", "scanner": "scanner-primary", "fingerprint": "b9da5e92249c6ffe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-57e121bb0ee3735c", "level": "warning", "message": {"text": "Frontend route `/settings/profiles/:profileId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "1fe39e527195c7b1", "scanner": "scanner-primary", "fingerprint": "57e121bb0ee3735c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e7aec62c201efb92", "level": "warning", "message": {"text": "Frontend route `/settings/roles/:roleId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "5cb5cc2b63d056c1", "scanner": "scanner-primary", "fingerprint": "e7aec62c201efb92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8cae9c89774ccd19", "level": "warning", "message": {"text": "Frontend route `/settings/project-details/:projectId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "4fe0caecd92cf682", "scanner": "scanner-primary", "fingerprint": "8cae9c89774ccd19", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}